微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Flutter 上使用 Provider 时,在 null 错误时调用了 getter

如何解决在 Flutter 上使用 Provider 时,在 null 错误时调用了 getter

我有提供者:

import 'package:Flutter/material.dart';
import 'package:hive/hive.dart';

class AppProvider extends ChangeNotifier {
  Box tjkBox;

  // Language
  String _ln = "ru";
  String get ln => _ln;
  set ln(String l) {
    _ln = l;
    tjkBox.put("language",l);
    notifyListeners();
  }

  AppProvider() {
    tjkBox = Hive.Box("tjk");
    _ln = tjkBox.get("language",defaultValue: "ru");
    print("ln = $_ln");
  }
}

我包装了我的根小部件:

return MultiProvider(
  providers: [
    ChangeNotifierProvider<AppProvider>(create: (_) => AppProvider()),// here goes other providers
  ],child:  ...
  
);

然后我尝试像这样访问 ln 属性

Consumer<AppProvider>(
  builder: (context,app,child) => Text(app?.ln),)

或者像这样:

Text(Provider.of<AppProvider>(context).ln)

但它一直给我错误The getter 'ln' was called on null.

请解释一下,我遗漏了什么?

解决方法

提供者概念和示例可在 Provider docs 上获得。

newNode 包裹您的 Consumer 小部件(应用小部件或根屏幕)的根:

ChangeNotifierProvider

并且在所有子小部件中,您都可以访问 ChangeNotifierProvider( create: (_) => AppProvider(),child: ... ) 模型。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。