首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >颤振中的SharedPreferences误差

颤振中的SharedPreferences误差
EN

Stack Overflow用户
提问于 2018-03-21 13:11:02
回答 6查看 13.5K关注 0票数 7

我在我的颤振应用程序中使用了shared_preferences插件。从一开始(可能在颤振升级之后),它就开始抛出一个异常:

代码语言:javascript
运行
复制
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的实例时,就会发生这种情况:

代码语言:javascript
运行
复制
SharedPreferences prefs = await SharedPreferences.getInstance();

我试图找出问题的根源,但却找不到。谢谢你的帮助。

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2018-03-30 01:33:45

我尝试过shared_preferences: "0.2.4"和上面提到的其他版本,但都没有成功。最后,在将颤振通道从dev更改为beta之后,它终于开始工作了:

代码语言:javascript
运行
复制
flutter channel beta

至少,这暂时解决了这个问题,只需等待对dev通道上的shared_preferences插件进行修复。

票数 3
EN

Stack Overflow用户

发布于 2018-07-28 14:23:32

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

代码语言:javascript
运行
复制
Future<SharedPreferences> prefs = SharedPreferences.getInstance();
prefs.then(
  (pref)
  {
    //call functions like pref.getInt(), etc. here
  }
);
票数 7
EN

Stack Overflow用户

发布于 2020-06-21 02:56:54

要调试这一点,请使用以下内容:

代码语言:javascript
运行
复制
Future<SharedPreferences> _sprefs = SharedPreferences.getInstance();
_sprefs.then((prefs) {
  // ...
}, 
onError: (error) {
  print("SharedPreferences ERROR = $error");   
});

在我的例子中,错误是我想在调用await SharedPreferences.getInstance()之前调用runApp(),因此错误消息给我的解决方案是按如下顺序排列我的代码:

第一:

代码语言:javascript
运行
复制
WidgetsFlutterBinding.ensureInitialized();

之后:

代码语言:javascript
运行
复制
SharedPreferences prefs = await SharedPreferences.getInstance();

最后:

代码语言:javascript
运行
复制
runApp(...);
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49407237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档