Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 获得;参数类型';Widget?&x27;can';不能分配给参数类型';小部件'&引用;错误_Flutter_Dart_Widget_Consumer - Fatal编程技术网

Flutter 获得;参数类型';Widget?&x27;can';不能分配给参数类型';小部件'&引用;错误

Flutter 获得;参数类型';Widget?&x27;can';不能分配给参数类型';小部件'&引用;错误,flutter,dart,widget,consumer,Flutter,Dart,Widget,Consumer,我试图建立一个消费者,但我得到了这个 无法将参数类型“Widget”分配给参数类型“Widget” 在生成器中的子级上加下划线时出错。 代码如下: Consumer<Cart>( builder: (_, cart, ch) => Badge( child: ch, value: cart.itemCount.toString(), ), child: IconBut

我试图建立一个消费者,但我得到了这个

无法将参数类型“Widget”分配给参数类型“Widget”

生成器中的子级上加下划线时出错。 代码如下:

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

典型的生成器函数如下所示:

消费者(
生成器:(上下文、模型、子对象){
返回文本(model.foo());
}
)
但是,如果
builder
非常昂贵,则可以将其中的一部分移出builder,并移到
子参数中:

消费者(
生成器:(上下文、模型、子对象){
返回列(子项:[
Text(model.foo()),
VeryExpensiveWidget(),//每次FooModel更新时都会重新生成此文件
])
}
)
可以成为:

消费者(
生成器:(上下文、模型、子对象){
返回列(子项:[
Text(model.foo()),
child,//将其传递到生成器函数中
])
},
child:VeryExpensiveWidget(),//将其作为消费者的子级传递
)
这有效地缓存了
VeryExpensiveWidget
,构建一次,然后将其用于将来对构建器的所有调用

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

在您的情况下,您总是传入一个
child
参数,这样您就可以保证传入
builder
child
是非空的,所以使用
child是安全的
强制将
子项
转换为
小部件

然后,您的构建者将成为:

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

非常感谢,它成功了
  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,
          ),
        ),
      ),
    )
  ],
);