【问题标题】:SharedPreferences error in FlutterFlutter 中的 SharedPreferences 错误
【发布时间】:2018-08-30 15:01:57
【问题描述】:

我在 Flutter 应用程序中使用了 shared_preferences 插件。从某一刻起(可能是 Flutter 升级后),它开始抛出异常:

E/flutter (27778): [ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception:
E/flutter (27778): type '_InternalLinkedHashMap' is not a subtype of type 'Map<String, Object>' where
E/flutter (27778):   _InternalLinkedHashMap is from dart:collection
E/flutter (27778):   Map is from dart:core
E/flutter (27778):   String is from dart:core
E/flutter (27778):   Object is from dart:core
E/flutter (27778): 
E/flutter (27778): #0      SharedPreferences.getInstance (package:shared_preferences/shared_preferences.dart)
E/flutter (27778): <asynchronous suspension>
E/flutter (27778): #1      loadFirstUse (**path**/lib/main.dart:29:53)
E/flutter (27778): <asynchronous suspension>
E/flutter (27778): #2      main (**path**/lib/main.dart:17:9)
E/flutter (27778): <asynchronous suspension>
E/flutter (27778): #3      _startIsolate.<anonymous closure> (dart:isolate/runtime/libisolate_patch.dart:279:19)
E/flutter (27778): #4      _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:165:12)

当我简单地尝试创建 SharedPreferences 实例时会发生这种情况:

SharedPreferences prefs = await SharedPreferences.getInstance();

我试图找到问题的根源,但无法找到它。感谢您的帮助。

编辑:我正在使用shared_preferences: "^0.4.0"

【问题讨论】:

  • 我在使用 Dart 2.0 预览版时遇到了这个问题。我想这应该使用 shared_preferences 0.4.0 来修复,您使用的是哪个版本?
  • @Rene 我正在使用shared_preferences: "^0.4.0"
  • @NileshRathod 尝试按照您的建议更改为“0.2.4”,没有区别
  • 不知道这是否会有所帮助,但也许您可以尝试使用flutter cleanpub cache repair 看看是否可以解决问题

标签: android dart sharedpreferences flutter


【解决方案1】:

我一一删除包,发现是flutter_barcode_scanner引起的。我将它升级到 2.0.0 版本,它解决了我的问题。

【讨论】:

    【解决方案2】:

    我使用以下解决方法解决了这个问题:

    Future<SharedPreferences> prefs = SharedPreferences.getInstance();
    prefs.then(
      (pref)
      {
        //call functions like pref.getInt(), etc. here
      }
    );
    

    【讨论】:

      【解决方案3】:

      要调试它,请使用以下命令:

      Future<SharedPreferences> _sprefs = SharedPreferences.getInstance();
      _sprefs.then((prefs) {
        // ...
      }, 
      onError: (error) {
        print("SharedPreferences ERROR = $error");   
      });
      

      在我的情况下,错误是我想在调用runApp() 之前调用await SharedPreferences.getInstance(),因此错误消息给我的解决方案是按如下方式订购我的代码:

      第一:

      WidgetsFlutterBinding.ensureInitialized();
      

      之后:

      SharedPreferences prefs = await SharedPreferences.getInstance();
      

      最后:

      runApp(...);
      

      【讨论】:

        【解决方案4】:

        我通过更改为 shared_preferences: "0.3.3" 来修复它。这很有可能再次中断。

        【讨论】:

        • 改成0.3.3后还是一样的错误
        • @Guus,是的,不完全确定为什么修复对我们有用。我们最终将整个状态管理切换到了 Redux。如果您想继续使用 shared_preferences,可以尝试一些其他版本号,看看它们是否能解决问题。对不起,我不能给你更好的答案。
        【解决方案5】:

        你需要像这样使用 Future

        Future<SharedPreferences> _sprefs = SharedPreferences.getInstance();
        

        【讨论】:

        • 需要一个更完整的例子。请显示代码以获得偏好?
        【解决方案6】:

        我尝试了shared_preferences: "0.2.4" 和上面建议的其他版本,但没有成功。在将 Flutter 频道从 dev 更改为 beta 后,终于让它工作了:

        flutter channel beta
        

        至少现在解决了这个问题,只需等待 dev 频道上 shared_preferences 插件的修复即可。

        【讨论】:

        • 我试过了,但收到了git: Already on 'beta' 的消息,我已经在使用0.2.4 仍然收到同样的错误。
        猜你喜欢
        • 2011-11-14
        • 1970-01-01
        • 1970-01-01
        • 2019-12-27
        • 1970-01-01
        • 2023-02-19
        • 2020-06-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多