我是颤振新手,仍在学习。我正在尝试获取 SharedPreferences 实例的引用,但出现以下错误
_CastError(对空值使用空检查运算符)
这就是我的代码的样子
应用程序设置.dart
class AppSettings {
final SharedPreferences _pref;
AppSettings._(this._pref);
static AppSettings? _instance;
static initialize() async {
if (_instance != null) {
// already initialized
return;
}
// instance not found. creating one
var pref = await SharedPreferences.getInstance();
_instance = AppSettings._(pref);
}
}
Run Code Online (Sandbox Code Playgroud)
主程序.dart
Future<void> main() async {
// initializing application settings
await AppSettings.initialize();
runApp(App());
}
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: "hello app",
home: AppHome());
}
}
Run Code Online (Sandbox Code Playgroud)
经过进一步调试,我发现异常是由invokeMapMethod引发的抛出的
flutter-sdk/flutter/packages/flutter/lib/src/services/platform_channel.dart
由getAll调用方法
flutter-sdk/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences_platform_interface-2.0.0/lib/method_channel_shared_preferences.dart
下面是错误的截图
SharedPreferences.getInstance()我之前打电话过runApp()。由于 特定于平台的本机绑定未初始化(由 )使用,因此SharedPreferences它引发了 null 异常。所以我WidgetsFlutterBinding.ensureInitialized()在打电话之前添加了await SharedPreferences.getInstance():
Future<void> main() async {
// initializing application settings
WidgetsFlutterBinding.ensureInitialized();
await AppSettingService.initialize();
runApp(WorkoutTrackerApp());
}
Run Code Online (Sandbox Code Playgroud)
您可以通过以下链接了解更多信息
ensureInitialized方法文档
| 归档时间: |
|
| 查看次数: |
797 次 |
| 最近记录: |