【问题标题】:Flutter shared preference -- Unhandled Exception: Null check operator used on a null valueFlutter 共享首选项——未处理的异常:空值检查运算符用于空值
【发布时间】:2021-06-02 16:11:10
【问题描述】:

共享偏好插件(shared_preferences:^2.0.6)

它有一个初始化实例错误,这是错误堆栈跟踪:

aunching lib/main.dart on iPhone 12 Pro Max in debug mode...
package:travel_app/main.dart:1
Xcode build done.                                           22.3s
Connecting to VM Service at ws://127.0.0.1:59168/kc8UwLPVK5s=/ws
flutter: start
[VERBOSE-2:ui_dart_state.cc(199)] Unhandled Exception: Null check operator used on a null value
#0      MethodChannel.binaryMessenger
package:flutter/…/services/platform_channel.dart:142
#1      MethodChannel._invokeMethod
package:flutter/…/services/platform_channel.dart:148
#2      MethodChannel.invokeMethod
package:flutter/…/services/platform_channel.dart:331
#3      MethodChannel.invokeMapMethod
package:flutter/…/services/platform_channel.dart:358
#4      MethodChannelSharedPreferencesStore.getAll
package:shared_preferences_platform_interface/method_channel_shared_preferences.dart:44
#5      SharedPreferences._getSharedPreferencesMap
package:shared_preferences/shared_preferences.dart:180
#6      SharedPreferences.getInstance
package:shared_preferences/shared_preferences.dart:56
#7      Global.init
package:travel_app/common/Global.dart:36
#8      main
package:travel_app/main.dart:13
#9      _runMainZoned.<anonymous closure>.<anonymous closure> (d<…>


这是我的代码(main.dart):

Future<void> main() async => await Global.init().then((e) => runApp(MyApp()));

全球.dart

static Future init() async {
print("start");
final SharedPreferences prefs = await 
SharedPreferences.getInstance();
print("_prefs $prefs");
}

源代码定位器错误是这些:(method_channel_shared_preferences.dart)

await _kChannel.invokeMapMethod<String, Object>('getAll');

发生了异常。 _CastError(用于空值的空检查运算符)

否则,我使用的系统是MacOS,有人知道如何解决这个问题吗?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    在初始化之前执行WidgetsFlutterBinding.ensureInitialized();

    【讨论】:

      【解决方案2】:

      任何使用 get_it 包并遇到类似问题的人,这里是最简单的解决方案。 只需在主函数顶部添加 WidgetsFlutterBinding.ensureInitialized(); 即可。

      像这样改变你的主要功能:

      Future<void> main() async {
      WidgetsFlutterBinding.ensureInitialized();
      await di.init()
      runApp(MyApp());}
      

      【讨论】:

        猜你喜欢
        • 2021-08-19
        • 2021-07-22
        • 1970-01-01
        • 1970-01-01
        • 2021-10-19
        • 2022-10-19
        • 2021-11-21
        • 1970-01-01
        相关资源
        最近更新 更多