flutter 处理来自main.dart的单独文件时出现“Could not find the correct Provider”错误

xzlaal3s  于 2023-10-22  发布在  Flutter
关注(0)|答案(1)|浏览(357)

我正试图为一个简单的笔记列表创建一个单独的文件。
我在lib/pages/list_entries.dart中有以下代码:

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

class NotesState extends ChangeNotifier {
  var arrNotes = [];
}

class ListEntriesPage extends StatefulWidget {
  const ListEntriesPage({super.key});

  @override
  State<ListEntriesPage> createState() => _ListEntriesState();
}

class _ListEntriesState extends State<ListEntriesPage> {

  @override
  Widget build(BuildContext context) {
    var noteState = context.watch<NotesState>();

    if (noteState.arrNotes.isEmpty) {
      return Center(
        child: Text('No note yet.'),
      );
    }
}

我得到以下错误:
错误:在此ListEntriesPage小部件上方找不到正确的提供程序
我很困惑,因为我的类NotesState不是在ListEntriesPage类的正上方声明的?
我试着查找其他问题,但代码示例太复杂了,我显然错过了这里的基础知识。
注意ListEntriesPage()是从main. dart中的类_MyHomePageState调用的。我提到这一点是因为我在main.dart中有一个非常相似的代码,它正在工作,我试图将其移动到一个单独的文件并调整代码,但我无法让它工作。所以我想这和某些东西的范围有关...

tyky79it

tyky79it1#

这可能不是一个完美的解释,但希望它能帮助初学者。“在这个ListEntriesPageWidget之上”,他们指的是父作用域,而不是前面的几行。
此外,缺少的提供程序不是NotesState类,而是对ChangeNotifierProvider函数的调用。
所以,在我的情况下,我需要进入main.dart文件,并更改:

void main() {

  //Some truncated code

  runApp(const MyApp());

}

收件人:

void main() {

  // Some truncated code

  runApp(
    ChangeNotifierProvider(
      create: (context) => NotesState(),
      child: const MyApp(),
    ),
  );

}

现在应用程序知道使用NotesState类。
这个文档/教程对我帮助很大:https://docs.flutter.dev/data-and-backend/state-mgmt/simple

相关问题