首页 > 解决方案 > 在另一个屏幕中访问 FutureProvider 时遇到问题

问题描述

我正在关注一个基本的 FutureProvider 示例,该示例截至 2020 年 3 月正在运行。我想知道 Provider 包是否发生了一些变化,因为尽管 Provider 似乎在同一条路线上,但我无法让我的主屏幕访问 Provider 对象。

我的 main.dart:

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
final EmployeeService employeeService = EmployeeService();
@override
Widget build(BuildContext context) {
return FutureProvider(
  initialData: null,
  create: (context) => employeeService.fetchEmployees(),
  catchError: (context, error) {
    print(error.toString());
  },
  child: MaterialApp(
    title: 'Flutter Demo',
    theme: ThemeData(
      primarySwatch: Colors.blue,
    ),
    home: Home(),
  ),
);

我的家.dart:

class Home extends StatelessWidget{
  @override
   Widget build(BuildContext context) {
    List<Employee> employees = Provider.of<List<Employee>>(context);


return Scaffold(
  appBar: AppBar(title: Text('Employees')),
  body: (employees == null)? Center(child: CircularProgressIndicator(),) :
      ListView.builder(itemCount: employees.length,
      itemBuilder: (context, index){
        return ListTile(
          subtitle: Text(employees[index].email),
          title: Text(employees[index].name),
        );
      },)
);

}

我的超级基本 EmployeeService 类...

 class EmployeeService {

 Future<List<Employee>> fetchEmployees() async{
 var uri = Uri.parse('https://jsonplaceholder.typicode.com/users');
 var response = await http.get(uri);
 var jsonResponse = convert.jsonDecode(response.body) as List; 
 return jsonResponse.map((e) => Employee.fromJson(e)).toList();

我检查了 Flutter Inspector,小部件似乎排列正确。然而,我继续收到错误:

在构建 Home(dirty) 时引发了以下 ProviderNotFoundException:错误:在此 Home Widget 上方找不到正确的 Provider<List>

发生这种情况是因为您使用了BuildContext不包括您选择的提供者的 。

对于我正在调用的 API 所设想的模型来说,这将是一种方便的方法,所以我只是想知道 FutureProvider 是否会发生一些变化。

标签: flutterdartprovider

解决方案


推荐阅读