无法使用列表创建 ListView.builder

Posted

技术标签:

【中文标题】无法使用列表创建 ListView.builder【英文标题】:Can't create ListView.builder with a list 【发布时间】:2020-11-04 21:56:57 【问题描述】:

我尝试使用 List 构建 ListView.builder。

显示此错误:参数类型“CartItem”无法分配给参数类型“String”

这是我的代码:

class CartItem 
  String name;
  String quantity;
  String price;

  CartItem(
    this.name,
    this.quantity,
    this.price,
  );


List<CartItem> cartItem = [];

var _quantity = TextEditingController();

Widget cartList() 
  if (cartItem.length != 0) 
    return ListView.builder(
      itemCount: cartItem.length,
      itemBuilder: (context, index) 
        return Text(cartItem[index]);
      ,
    );
  
  return Text('Nothing in Cart');

这是我的小部件方法的实现:

RaisedButton(
                    elevation: 1,
                    color: Colors.blueGrey,
                    onPressed: () 
                      showDialog(
                        context: context,
                        builder: (BuildContext contex) 
                          return AlertDialog(
                            content: Column(
                              children: [
                                Text('Your Order List'),
                                Expanded(
                                  child: cartList(),
                                )
                              ],
                            ),
                          );
                        ,
                      );
                    ,
                    child: Text(
                      'Conferm Order',
                      textAlign: TextAlign.end,
                    ),
                  ),

【问题讨论】:

【参考方案1】:

Text 小部件需要 String 作为参数,而 cartItem[index] 返回了 CartItem 的实例,这就是您收到错误的原因

你应该使用

return Text(cartItem[index].name);

而不是这个

return Text(cartItem[index]);

示例代码

Widget cartList() 
  if (cartItem.length != 0) 
    return ListView.builder(
      itemCount: cartItem.length,
      itemBuilder: (context, index) 
        return Text(cartItem[index].name);
      ,
    );
  
  return Text('Nothing in Cart');

【讨论】:

您的答案是正确的,但我发现我的小部件方法存在另一个问题。它告诉我一个错误:Another exception was thrown: Assertion failed: file:~/flutter/packages/flutter/lib/src/rendering/mouse_tra cking.dart:392:12 @SantoShakil 尝试重启你的应用 它不起作用。我认为这是另一个问题。但你的回答对于我对这篇文章的问题是正确的。非常感谢。

以上是关于无法使用列表创建 ListView.builder的主要内容,如果未能解决你的问题,请参考以下文章

Listview builder 创建列表项的副本

Flutter 文本编辑控制器 listview.builder

如何仅操作 ListView.builder 的一个元素

颤动 listView.Builder 隐藏最后一个列表项的分隔符

listview.builder 底部溢出和灵活和扩展小部件的错误

listview.builder底部溢出和使用灵活和扩展小部件的错误