gpt4 book ai didi

flutter - 获取 "The argument type ' Widget ?' can' t 被分配给参数类型 'Widget' “错误

转载 作者:行者123 更新时间:2023-12-02 02:10:36 24 4
gpt4 key购买 nike

我正在尝试构建一个消费者,但我得到了这个

The argument type 'Widget?' can't be assigned to the parameter type 'Widget'.

构建器内的子级上的错误带有下划线。代码如下:

Consumer<Cart>(
builder: (_, cart, ch) => Badge(
child: ch,
value: cart.itemCount.toString(),
),
child: IconButton(
icon: Icon(
Icons.shopping_cart,
),
onPressed: () {},
),
),

这是它引用的徽章项目:

  Widget build(BuildContext context) {
return Stack(
alignment: Alignment.center,
children: [
child,
Positioned(
right: 8,
top: 8,
child: Container(
padding: EdgeInsets.all(2.0),
// color: Theme.of(context).accentColor,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.0),
color: Theme.of(context).accentColor,
),
constraints: BoxConstraints(
minWidth: 16,
minHeight: 16,
),
child: Text(
value,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 10,
),
),
),
)
],
);

最佳答案

典型的构建器函数如下所示:

Consumer<FooModel>(
builder: (context, model, child) {
return Text(model.foo());
}
)

但是,如果 builder 非常昂贵,则可以将其中一些从构建器中移出,并放入 child 参数中:

Consumer<FooModel>(
builder: (context, model, child) {
return Column(children: [
Text(model.foo()),
VeryExpensiveWidget(), // this gets rebuilt every time FooModel updates
])
}
)

可以变成:

Consumer<FooModel>(
builder: (context, model, child) {
return Column(children: [
Text(model.foo()),
child, // this gets passed into the builder function
])
},
child: VeryExpensiveWidget(), // pass it as a child of the consumer
)

这可以有效地缓存VeryExppressiveWidget,构建一次,然后将其用于以后对构建器的所有调用。

问题是您可能无法传递 child 。在第一个示例中,我们不需要 child 参数,这完全没问题。但是,这意味着 child 现在为 null。因为这是允许的行为,所以 child 必须是 Widget?

在您的情况下,您始终传递 child 参数,因此您可以保证传递给 builderchild 为非空,因此使用 child! 强制将 child 转换为 Widget

是安全的

您的构建器将成为:

builder: (_, cart, child) => Badge(child: child!, value: cart.itemCount.toString()),

关于flutter - 获取 "The argument type ' Widget ?' can' t 被分配给参数类型 'Widget' “错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67792270/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com