FutureProvider 坏了还是什么?

2024-01-12

我尝试这个简单的 FutureProvider 代码,但它给了我一个错误:

Error: Could not find the correct Provider<String> above this Consumer<String> Widge

我已确保 FutureProvider 包装我的 MaterialApp 并使用 Consumer 小部件获取提供程序。

这是我的代码:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return FutureProvider(
      create: (_) => Future.value('test'),
      catchError: (_, error) => print(error),
      child: MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          primarySwatch: Colors.amber,
          visualDensity: VisualDensity.adaptivePlatformDensity,
        ),
        home: Home(),
      ),
    );
  }
}

class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Consumer<String>(builder: (context, string, _) {
          return Text(string);
        }),
      ),
    );
  }
}

我在这里错过了什么吗?


该错误充分描述了正在发生的情况,您正在尝试使用String,并且您没有提供者String.

如果代替FutureProvider(...etc你写FutureProvider<String>(...etc你的 IDE 会指出catchError回报Void。这意味着您返回一个String in create and Void in catchError,制作类型的提供者dynamic.

为了解决这个问题,使catchError返回“错误”,或者您选择的任何内容,只要它是字符串即可。

      catchError: (_, error) { 
          print(error);
          return 'error';
          },

Edit

正如第一条评论指出的那样,您仍然会收到错误。由于 FutureProvider 没有初始值,因此它被设置为 null。这意味着第一次运行将向文本小部件传递一个空值。

例如,可以通过将 FutureProvider 的初始值设置为“正在加载...”来防止这种情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FutureProvider 坏了还是什么? 的相关文章

随机推荐