flutter - Flutter MultiProvider 或 ChangeNotifier 没有响应
问题描述
我主要使用 MultiProvider,如下所示:
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(
create: (context) => ReadPreferences(),
),
ChangeNotifierProvider(
create: (context) => ItemsCrud(),
),
],
child: MaterialApp(
initialRoute: initialPage,
routes: {
InitialScreen.screenId: (context) => InitialScreen(),
HomeScreen.screenId: (context) => HomeScreen(),
AddItemScreen.screenId: (context) => AddItemScreen(),
},
),
);
}
但我的问题是它根本没有读取 ReadPreferences() 类文件中的内容,尽管它正常读取 ItemsCrud() 一个。
我的 ReadPreferences() 如下所示:
import 'package:flutter/foundation.dart'; //To use the "ChangeNotifier"
import 'package:shared_preferences/shared_preferences.dart'; //local store
class ReadPreferences extends ChangeNotifier {
Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
//Constructor method
ReadPreferences() {
print('Please print this');
getPreferences();
}
void getPreferences() async {
final SharedPreferences prefs = await _prefs;
print('print anything plz');
}
}
它根本不会打印任何东西,我做错了什么?
解决方案
是否在您的任何子小部件(屏幕)中使用了 ReadPreferences?您需要在子小部件中使用它,否则不会调用构造函数。像这样使用:
//your child widget build method
@override
Widget build(BuildContext context) {
ReadPreferences _dummyProvider = Provider.of<ReadPreferences>(context);
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
.....
}
推荐阅读
- database - 如何为sqlite中的层次结构数据逐级生成序列号?
- android - 使用导航抽屉和片段未出现工具栏菜单
- opengl - 与 glDrawArrays 相比,glDrawElements 会导致运行更少的顶点着色器吗?
- java - 组合框不显示数据库中的数据
- r - 如何使用 num_range 选择在一个特定列中都包含相同前 4 位数字的行?(希望使用 dplyr/tidyverse)
- python - 在 alpine docker 容器中安装 multidict 时如何修复 gcc 错误?
- android - 如何在屏幕上随机移动图像?
- sql - 执行顺序和哪个更快
- java - 如何在spring security oauth2中分离访问令牌和刷新令牌端点
- python - 如何防止mysql和python中表的重复条目