Flutter Flatter MultiProvider或ChangeNotifier不';t反应

Flutter Flatter MultiProvider或ChangeNotifier不';t反应,flutter,Flutter,我主要使用MultiProvider,如下所示: @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider( create: (context) => ReadPreferences(), ), ChangeNotifierProvider(

我主要使用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');
  }
}
导入“包: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,你只要解决它,结果你必须在任何子部件中使用它,非常感谢你的努力来测试这个,对于我的情况,我必须在任何子部件中调用它。