Flutter Flatter MultiProvider或ChangeNotifier不';t反应
我主要使用MultiProvider,如下所示:Flutter Flatter MultiProvider或ChangeNotifier不';t反应,flutter,Flutter,我主要使用MultiProvider,如下所示: @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider( create: (context) => ReadPreferences(), ), ChangeNotifierProvider(
@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');
}
}
导入“包:flift/foundation.dart”//使用“更改通知程序”
导入“package:shared_preferences/shared_preferences.dart”//本地商店
类ReadPreferences扩展了ChangeNotifier{
Future_prefs=SharedReferences.getInstance();
//构造函数方法
ReadPreferences(){
打印('请打印此');
getPreferences();
}
void getPreferences()异步{
最终共享优先权=等待优先权;
打印(“打印任何内容”);
}
}
它根本不会打印任何东西,我做错了什么??您的子窗口小部件(屏幕)中是否使用了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),
),
.....
}
//您的子小部件构建方法
@凌驾
小部件构建(构建上下文){
ReadPreferences\u dummyProvider=Provider.of(上下文);
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
.....
}
我刚刚测试了它,并创建了一个测试按钮,如,这样它就创建了一个实例,并在onPressed中激发该方法:
FlatButton(
child: Text('Provider Test'),
onPressed: () {
final readProvider =
Provider.of<ReadPreferences>(context, listen: false);
readProvider.getPreferences();
},
),
FlatButton(
子项:文本(“提供程序测试”),
已按下:(){
最终读取提供程序=
Provider.of(上下文,listen:false);
readProvider.getPreferences();
},
),
第一次尝试时,我遇到了一个错误:
MissingPluginException(MissingPluginException(在channel plugins.flatter.io/shared_preferences上找不到方法getAll的实现))
然后我运行了flatterclean
然后flatterpub get
然后冷启动了应用程序,它工作正常
当我按下按钮时,我看到两个打印语句。它从构造函数打印到控制台?完全没有,也不知道为什么!:/What's your
initialPage
?它与InitialScreen.screenId:(上下文)=>InitialScreen()相同吗
?@ChrisPi是的,它只是一个动态值ooh,你只要解决它,结果你必须在任何子部件中使用它,非常感谢你的努力来测试这个,对于我的情况,我必须在任何子部件中调用它。