flutter - 来自 Provider 的值不可读
问题描述
我创建了一个名为'Session'的类及其提供程序类'SessionProvider',我在其中声明并初始化了一个名为'currentSession'的对象。但是不知道为什么我不能访问 currentSession 的参数,例如树中任何地方的名称、id(调用它们时只得到null),尽管我已经将主类中的 SessionProvider 定义为祖先。
这是我的代码:
class Session {
int id;
String name;
Session({int id, String name});
}
class SessionProvider with ChangeNotifier {
Session _dummy_currentSession = Session(id: 1, name: 'Spring-16');
Session get currentSession {
return _dummy_currentSession;
}
}
主类:
void main(List<String> args) {
// debugPaintSizeEnabled = true;
runApp(MyApp());
}
class MyApp extends StatefulWidget {
MyApp({Key key}) : super(key: key);
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
]);
return LayoutBuilder(
builder: (context, constraints) =>
OrientationBuilder(builder: (context, orientation) {
SizeConfig().init(constraints, orientation);
return MultiProvider(
providers: [
ChangeNotifierProvider.value(
value: SessionProvider(),
),
],
child: MaterialApp(
home: LoginPage(),
theme: AppTheme.lightTheme,
),
);
}),
);
}
}
在我想访问它的屏幕中:
final sessionTest = Provider.of<SessionProvider>(context, listen: false).currentSession;
print(' session: '+ sessionTest.name);
解决方案
因为 sessionTest.name 返回 null in print(' session: '+ sessionTest.name);
,错误的根源在 Session 类,应该是:
class Session {
int id;
String name;
Session({this.id, this.name}); // <--
}
推荐阅读
- firebase - Firestore 数据库规则 - “创建”规则不适用于云功能
- flutter - 应用全屏,但状态栏重叠
- gatsby - Gatsby mongodb 源插件在 Graphiql 中不显示任何内容
- asp.net-mvc - 关于使用登录在另一个 Web 应用程序中授予的令牌访问 Microsoft Graph 的 Web API 的建议
- selenium - 如何使用 Selenium 处理错误“在异步脚本期间检测到页面重新加载”
- android - 如何启用新的 Places 自动完成 API
- dialogflow-es - 为什么持久存储在我的谷歌操作中不起作用?
- css - 如何在 5 个元素末尾的第二列上传递一个?
- python - 如果在熊猫数据框中重复,则更改值组的名称
- raspberry-pi - i2cdetect 无法识别 TCA9548A I2C 多路复用器后面的 VL6180X 传感器