flutter - 在 Flutter 上使用 Provider 时调用 getter 时出现 null 错误
问题描述
我有提供者:
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.
请解释一下,我错过了什么?
解决方案
提供者文档中提供的提供者概念和示例。
Consumer
将小部件的根(应用小部件或根屏幕)包装为ChangeNotifierProvider
:
ChangeNotifierProvider(
create: (_) => AppProvider(),
child: ...
)
在所有子小部件中,您都可以访问AppProvider
模型。
推荐阅读
- r - 如何在 R 中获得混淆矩阵?
- ascii - Barcode39 翻译选项卡功能不正确
- amazon-web-services - AWS API GW x-amazon-apigateway-integration 响应状态码正则表达式不起作用
- r - 如何将几列移动到R中数据框的前面?
- node.js - 我的 typegoose 保存函数没有返回需要的类型(NodeJs、typescript、graphql)
- html - 使用引导程序在全高体内的多个可滚动 div
- r - 我如何使用 for 循环来简化此编码?
- visual-studio-code - 使用 VS Code 和其他编辑器交替编辑代码会导致问题
- r - 使用 R 从数据库导入数据时,不允许重复的“row.names”
- python - 如何在 Visual Studio 中运行一行 python 代码并在终端中获取输出?