【问题标题】:Provider on Stateful Widget - issue with parameter type有状态小部件上的提供程序 - 参数类型问题
【发布时间】:2020-10-18 10:55:54
【问题描述】:

我有一个 RedditAPIService 类,我在其中放置了与 Reddit 的 DRAW 插件相关的所有项目方法。

我在无状态小部件中为类创建了一个对象。 (在 _RedditAuthState 类下扩展 State 部分)

RedditAPIService reddit = RedditAPIService();

我需要这个 reddit 对象在下游的多个小部件上可用,所以我想使用 Provider 来公开该对象:

  @override
  Widget build(BuildContext context) {
    return Provider<RedditAPIService>(
      create: (_) => RedditAPIService(),
      builder: (context) {
        Scaffold(
          appBar: GlobalAppBar(
            appbarTitle: 'Authorize ReadStories',
          ),
          body: SafeArea(
              child: Center(
            child: haveRedditAuthCode
                ? CircularProgressIndicator()
                : WebviewScaffold(
                    url: reddit.getAuthURL(),
                    hidden: true,
//                initialChild: Center(child: Text('data')),
                  ),
          )),
        );
      },
    );
  }
}

我目前收到错误:

“错误:参数类型'Null Function(BuildContext)'不能是 分配给参数类型'Widget Function(BuildContext, 小部件)'。”

我做错了什么?

【问题讨论】:

    标签: flutter flutter-provider flutter-state


    【解决方案1】:

    我相信您收到此错误是因为您没有从builder 回调函数返回任何内容,因此错误消息中的Null。尝试在Scaffold 小部件之前添加return 并将child 参数添加到回调函数,如下所示:

    @override
    Widget build(BuildContext context) {
      return Provider<RedditAPIService>(
        create: (_) => RedditAPIService(),
        builder: (context, child) {
          return Scaffold(
            appBar: GlobalAppBar(
              appbarTitle: 'Authorize ReadStories',
            ),
            body: SafeArea(
                child: Center(
                  child: haveRedditAuthCode
                      ? CircularProgressIndicator()
                      : WebviewScaffold(
                    url: reddit.getAuthURL(),
                    hidden: true,
    //              initialChild: Center(child: Text('data')),
                  ),
                )),
          );
        },
      );
    }
    

    错误是指两个不同的问题,我将在下面尝试解释:

    空 -> 小部件

    此错误是由于构建器回调函数未返回任何内容而导致的,但预计会返回 Widget。这个Widget 是在应用程序的用户界面中显示的内容,与从覆盖的build 方法返回Widget 大致相同。请参阅herehere 了解更多信息。

    (BuildContext) -> (BuildContext, 小部件)

    这个错误是由于构建器回调函数只有一个参数,但是应该有两个参数。第二个参数是一个子Widget,如果树中有一个特别大的子Widget,不需要在每次状态改变时重新创建,就可以使用它。请参阅herehere 了解更多信息。

    【讨论】:

    • 非常感谢!这修复了错误,现在我试图更多地理解这个问题。初始代码已经有一个“返回脚手架”,这意味着该函数返回了一个正确的小部件?将孩子添加到参数中如何解决这个问题?而我们这里的 child 论点指的是什么。 (如果有任何文档可以参考我,那就太好了。)非常感谢。
    • 不客气,乐于助人!我已经更新了答案,包括对错误的解释,包括文档链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 2022-11-02
    • 2020-01-13
    • 1970-01-01
    相关资源
    最近更新 更多