Flutter 中的 SharedPreferences 错误
SharedPreferences error in Flutter
我在我的 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"
我已尝试 shared_preferences: "0.2.4"
和上面建议的其他版本,但均未成功。将 flutter 通道从 dev 更改为 beta 后终于让它工作了:
flutter channel beta
至少这暂时解决了这个问题,只需等待开发频道上 shared_preferences 插件的修复即可。
我通过更改为 shared_preferences: "0.3.3"
来修复它。这很有可能再次破裂。
你需要像这样使用 Future
Future<SharedPreferences> _sprefs = SharedPreferences.getInstance();
我使用以下解决方法解决了这个问题:
Future<SharedPreferences> prefs = SharedPreferences.getInstance();
prefs.then(
(pref)
{
//call functions like pref.getInt(), etc. here
}
);
要对此进行调试,请使用以下命令:
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(...);
我一一删除包,发现是flutter_barcode_scanner
引起的。我把它升级到2.0.0版本,它解决了我的问题。
我在我的 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"
我已尝试 shared_preferences: "0.2.4"
和上面建议的其他版本,但均未成功。将 flutter 通道从 dev 更改为 beta 后终于让它工作了:
flutter channel beta
至少这暂时解决了这个问题,只需等待开发频道上 shared_preferences 插件的修复即可。
我通过更改为 shared_preferences: "0.3.3"
来修复它。这很有可能再次破裂。
你需要像这样使用 Future
Future<SharedPreferences> _sprefs = SharedPreferences.getInstance();
我使用以下解决方法解决了这个问题:
Future<SharedPreferences> prefs = SharedPreferences.getInstance();
prefs.then(
(pref)
{
//call functions like pref.getInt(), etc. here
}
);
要对此进行调试,请使用以下命令:
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(...);
我一一删除包,发现是flutter_barcode_scanner
引起的。我把它升级到2.0.0版本,它解决了我的问题。