SharedPreferences.getInstance() 抛出 _CastError (对 null 值使用 Null 检查运算符)

Ans*_*ava 2 dart flutter

我是颤振新手,仍在学习。我正在尝试获取 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

下面是错误的截图

调用Map方法

得到所有

Ans*_*ava 5

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)

您可以通过以下链接了解更多信息