Flutter 中的 SharedPreferences 错误

问题描述 投票:0回答:7

我在 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"

android dart sharedpreferences flutter
7个回答
7
投票

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

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

6
投票

要调试此问题,请使用以下命令:

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

就我而言,错误是我想在调用

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

第一:

WidgetsFlutterBinding.ensureInitialized();

之后:

SharedPreferences prefs = await SharedPreferences.getInstance();

最后:

runApp(...);

3
投票

我已经尝试过

shared_preferences: "0.2.4"
和上面建议的其他版本,但没有成功。将 flutter 通道从 dev 更改为 beta 后终于开始工作了:

flutter channel beta

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


2
投票

我通过更改为

shared_preferences: "0.3.3"
来修复它。这很有可能再次破裂。


0
投票

你需要像这样使用Future

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

0
投票

我把包一一删除,发现是

flutter_barcode_scanner
造成的。我将其升级到版本2.0.0,它解决了我的问题。


0
投票

之前工作正常,但现在我在调用 SharedPreferences.getInstance(); 时遇到 无效格式异常;

为了解决方案,我尝试了一切,但没有任何效果。所以最后我创建了新项目并粘贴了我以前的所有代码。终于解决了问题

© www.soinside.com 2019 - 2024. All rights reserved.