Provider on Stateful Widget - 参数类型问题

Provider on Stateful Widget - issue with parameter type

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

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

RedditAPIService reddit = RedditAPIService();

我需要这个 reddit 对象在下游的多个 Widget 上可用,所以我想使用 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')),
                  ),
          )),
        );
      },
    );
  }
}

我目前遇到错误:

"error: The argument type 'Null Function(BuildContext)' can't be assigned to the parameter type 'Widget Function(BuildContext, Widget)'."

我做错了什么?

我认为您收到此错误是因为您没有从 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 非常相似。有关详细信息,请参阅 here and here

(BuildContext) -> (BuildContext, Widget)

这个错误是因为构建器回调函数只有一个参数,但应该有两个参数。第二个参数是child Widget,如果树中有一个特别大的child Widget,不需要每次状态改变时都重新创建,可以使用它。有关详细信息,请参阅 here and here