【问题标题】:clear shared preferences from myBackgroundMessageHandler从 myBackgroundMessageHandler 清除共享首选项
【发布时间】:2020-11-28 03:49:31
【问题描述】:

当我发送 FCM 消息并且应用处于后台时,我想清除共享首选项。在myBackgroundMessageHandler 方法中,我正在调用一个方法来清除它们。

static Future<dynamic> myBackgroundMessageHandler(
      Map<String, dynamic> message) {
     clearPreferences();
}

static void clearPreferences() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.clear();
}

我收到以下错误:

未处理的异常:MissingPluginException(未找到实现 对于通道 plugins.flutter.io/shared_preferences 上的方法 getAll)

【问题讨论】:

  • 如果应用不在后台怎么办?这种情况还会发生吗?
  • @MiguelRuivo 不,我只有在应用程序处于后台时才会出现共享首选项问题,因为除非应用程序处于后台,否则不会调用 myBackgroundMessageHandler
  • 你用的是哪个版本的 Flutter?
  • Flutter 1.17.5 和 Dart 2.8.4

标签: flutter


【解决方案1】:

步骤 1) 转到 Application.kt/Application.java(在我的例子中是 kotlin)

步骤 2) 将这些行添加到 Application 类(在 kotlin 中)

if (!registry!!.hasPlugin("io.flutter.plugins.sharedpreferences")) {
  SharedPreferencesPlugin.registerWith(registry!!.registrarFor("io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin"));
}

记得也要导入这个

import io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin

步骤 3) 运行flutter clean -> flutter get -> 卸载你的应用

【讨论】:

    【解决方案2】:

    代码完全没问题。

    只需重新启动您的模拟器。如果您没有通过关闭模拟器并再次打开它来完全重启,则可能会发生此错误,因为它没有新添加的插件。

    【讨论】:

      【解决方案3】:

      在 Flutter App 主函数内的 runApp() 函数之前将 SharedPreferences.setMockInitialValues({}) 添加到您的代码中。
      这为我解决了错误

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多