flutter 将< Widget>[]数组作为子参数赋给Dismissible()对象

bvjveswy  于 2023-01-02  发布在  Flutter
关注(0)|答案(1)|浏览(118)

我一直试图将内容组(图像+文本)Dismissible作为一个单元(滑动删除/移除),但似乎无法将Widget列表作为child参数分配给Dismissible()对象。

    • 代码:**
class _PhotosListState extends State<PhotosList> {
  @override
  Widget build(BuildContext context) {
    return _buildBody();
  }
  Widget _buildBody() {
    return SizedBox(
        height: 485,
        child: ListView.builder(
          //scrollDirection: Axis.vertical,
          //shrinkWrap: true,
            itemCount: Photos.length,
            itemBuilder: (context,i){
              return Dismissible(
                  background: Container(
                    color: Colors.green,
                  ),
                  key: ValueKey<Object>(Photos.items[i]),
                  onDismissed: (DismissDirection direction) {
                    setState(() {
                      Photos.items.removeAt(i);
                    });
                  },
                  child: SizedBox(
                    child: <Widget> [
                      Image.asset(Photos.items[i].image),
                      Text(Photos.items[i].task,
                          textAlign: TextAlign.center,
                          style: const TextStyle(color: Colors.grey, fontWeight: FontWeight.bold, fontSize: 19.5)
                      ),
                    ]
                  )
              );
            }
        )
    );
  }
}
xdyibdwo

xdyibdwo1#

SizedBox的代码中:

SizedBox(
                    child: <Widget> [
                      Image.asset(Photos.items[i].image),
                      Text(Photos.items[i].task,
                          textAlign: TextAlign.center,
                          style: const TextStyle(color: Colors.grey, fontWeight: FontWeight.bold, fontSize: 19.5)
                      ),

您正在传递 * 多个 * 小部件作为child,但是child只接受 * 一个 * 参数(即,一个小部件)。
因此,如果您想要 * 多个 * 小部件,则应该使用Column小部件-它可以接受List:

SizedBox(
                      child: Column(children: <Widget>[
                    Image.asset(Photos.items[i].image),
                    Text(Photos.items[i].task,
                        textAlign: TextAlign.center,
                        style: const TextStyle(
                            color: Colors.grey,
                            fontWeight: FontWeight.bold,
                            fontSize: 19.5)),
                  ]))

因此,名称-child vs children-最好记住这一点,因为可能有小部件接受多个小部件,即children或一个小部件只能接受 * 一个 * child

相关问题