我有提供者:
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.
请解释一下,我遗漏了什么?
答案 0 :(得分:0)
提供者概念和示例可在 Provider docs 上获得。
用 newNode
包裹您的 Consumer
小部件(应用小部件或根屏幕)的根:
ChangeNotifierProvider
并且在所有子小部件中,您都可以访问 ChangeNotifierProvider(
create: (_) => AppProvider(),
child: ...
)
模型。