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。
我有一个 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。