flutter - Flutter Provider:为什么在调用Provider.of <Widget>(context)时发生此错误,如下所示:

标签 flutter dart

我是新手,我正在测试Provider,无法弄清楚为什么这样做(通过工作,我的意思是它在应用栏中显示了一个列表):

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider<Data>(
      builder: (context)=> Data(),
        child: MaterialApp(
        home: Scaffold(
          appBar: AppBar(
            title: CustomText(),
          ),
        ),
      ),
    );
  }
}

使用CustomText类几乎不执行任何操作:
class CustomText extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return Text(Provider.of<Data>(context).texts.tostring());
  }
}

但这又引发了一个-在此MyApp小部件上方找不到正确的提供程序-错误:
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider<Data>(
      builder: (context)=> Data(),
        child: MaterialApp(
        home: Scaffold(
          appBar: AppBar(
            title: Text(Provider.of<Data>(context).texts.toString()),
          ),
        ),
      ),
    );
  }
}

数据类为:
class Data with ChangeNotifier{
  List<String> _texts = ['Text 1', 'Text 2', 'Text 3', 'Text 4',];

  get texts {
    return _texts;
  }

  void deleteText(int index){
    this._texts.removeAt(index);
    notifyListeners();
  }

  void addText(String text){
    this._texts.add(text);
  notifyListeners();
  }
}

我只是看不出有什么区别或为什么重要。该代码不应该等效吗?任何见解将不胜感激。

最佳答案

区别在于,在CustomText情况下,context来自其父窗口小部件MyApp,而在第二种情况下,context来自MyApp的父窗口小部件。由于您的提供程序是在MyApp内部实现的,因此,如果您使用MyApp的父级的context(第二种情况),它将找不到该提供程序。

关于flutter - Flutter Provider:为什么在调用Provider.of <Widget>(context)时发生此错误,如下所示:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58519456/

相关文章:

sqlite - 在 flutter 中使用 sqlflite 删除数据库似乎不起作用

dart - Flutter:在 TextInputFormatter 中使用 NumberFormat

flutter - Flutter Pop最佳做法

dart - Dart 中 Promise.all 的模拟?

flutter - 从init方法将上下文传递给Provider时,Flutter引发错误

dart - Http响应正文中未显示阿拉伯字母- flutter

datetime - ( flutter )将 Dart 时间(不是日期)转换为警报持续时间

variables - 在 Dart 中的字符串插值中使用点运算符时的正确语法

dart - 如何在 Flutter 中使用 Bloc 正确设置 DropdownButton 的值?

android - 已完成,错误为 : Gradle task assembleRelease failed with exit code 1