0

我有一个 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,Widget)'。”

我究竟做错了什么?

4

1 回答 1

1

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

@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预期会返回 a。这Widget是在应用程序的用户界面中显示的内容,与Widget从覆盖的build方法返回 a 非常相似。有关更多信息,请参见此处此处

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

此错误是由于构建器回调函数只有一个参数,但预期有两个参数。第二个参数是 child Widget,如果您Widget在树中有一个特别大的孩子,并且不需要在每次状态更改时重新创建它,则可以使用它。有关更多信息,请参见此处此处

于 2020-06-28T05:27:57.880 回答