首页 > 解决方案 > 找不到正确的提供者高于此消费者小部件

问题描述

我在 MVVM 架构中创建了一个应用程序,并使用 Provider 进行状态管理。当我启动应用程序时,我收到错误: Could not find the correct Provider<GetPopResult> above this Consumer<GetPopResult> Widget.

我确实在应用程序顶部有 ChangeNofifierProvider,所以我不知道出了什么问题。

代码:

main.dart (ChangeNotifierProvider):

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        ChangeNotifierProvider(create: (context) => PopViewModel()),
      ],
      child: MaterialApp(
        title: 'Welcome to Flutter',
        home: VisitPUDO(),
      ),
    );
  }
}

视图模型 (ChangeNotifier)

class PopViewModel with ChangeNotifier {
  ApiResponse _apiResponse = ApiResponse.initial('Empty data');
  GetPopResult? _getPopResult;

  ApiResponse get response => _apiResponse;
  GetPopResult? get getPopResult => _getPopResult;

  Future<void> getPops(String username, String password, String filterBy, String query, String filter) async {
    _apiResponse = ApiResponse.loading('Fetching data');
    notifyListeners();
    try {
      GetPopResult result = await PopRepository().getPops(username, password, filterBy, query, filter);
      _apiResponse = ApiResponse.completed(result);
    } catch (e) {
      _apiResponse = ApiResponse.error(e.toString());
      print(e);
    }
    notifyListeners();
  }

  void setResult(GetPopResult? result) {
    _getPopResult = result;
    notifyListeners();
  }
}

查看(消费者):

Flexible(
              child: Consumer<GetPopResult>(builder: (context, result, child) {
                if(result.pops.isNotEmpty)
                  return ListView.builder(
                    padding: EdgeInsets.all(8.0),
                    itemBuilder: (_, int index) => VisitPudoListviewItem(model: result.pops[index]),
                    itemCount: result.pops.length,
                  );
                else
                  return Center(child: Text("No data"));
              }),
            ),

标签: flutterflutter-provider

解决方案


推荐阅读