-1

我试图在订单购物车中创建一个项目列表。但它只显示列表中的第一项....

这是我的代码:

…………

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) {
    for (var item in cartItem) {
      return new Text('${item.name}');
    }
  }
  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'),
                                Container(
                                  child: cartList(),
                                ),
                              ],
                            ),
                          );
                        },
                      );
                    },
                    child: Text(
                      'Conferm Order',
                      textAlign: TextAlign.end,
                    ),
                  ),

我也试过 listview.builder 但我失败了。它给了我一些错误。诸如“断言失败”或“渲染”类型错误之类的东西。

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');
}

这是我尝试使用 Listiew.builder 时的错误:

引发异常时正在处理以下 RenderObject:RenderIntrinsicWidth#3fbd2 relayoutBoundary=up6 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE: creator: IntrinsicWidth ← Semantics ← DefaultTextStyle ← AnimatedDefaultTextStyle ← _InkFeatures-[GlobalKey#eb4f8 ink renderer ] ← NotificationListener ← CustomPaint ← _ShapeBorderPaint ← PhysicalShape ← _MaterialInterior ← Material ← ConstrainedBox ← ⋯ parentData: (可以使用大小) 约束: BoxConstraints(280.0<=w<=711.0, 0.0<=h<=343.0) size: MISSING stepWidth: null stepHeight: null 此 RenderObject 具有以下后代(显示深度为 5): child: RenderFlex#22eec NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE child 1: RenderPadding#42cc4 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING -BITS-UPDATE 孩子:RenderFlex#09e2b 需要 - 布局需要 - 绘制需要 - 合成 - 位更新子 1:RenderParagraph#afac8 需要 - 布局需要 - 绘制文本:TextSpan 子 2:RenderRepaintBoundary#14459 需要 - 布局需要 - 绘制需要 - 合成 - 位更新孩子:RenderCustomPaint#ddfde 需要-布局需要-油漆需要-合成-位-更新

和这个:

抛出了另一个异常:断言失败:file:~flutter/packages/flutter/lib/src/rendering/mouse_tra cking.dart:392:12

4

1 回答 1

2

因此,首先,当您return使用几乎任何编程语言时,您就会退出该功能。所以你不会得到一个列表,而只会得到一个Text小部件。

关于ListView.builder,你错过了.name(如果你想显示更多的东西,比如价格,你必须使用另一个小部件或将它们连接成一个字符串,因为 Text 只接受 a String):

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');
}

除了Text小部件,您可能会使用ListTile它有许多 Text 小部件的占位符,这些小部件通常对列表有用。

现在对于布局错误,最简单的修复方法是为包含您的内容添加heightwidth属性:ContainercartList

return AlertDialog(
  content: Column(
    children: [
      Text('Your Order List'),
      Container(
        height: 300, // or any other number
        width: 300, // or any other number
        child: cartList(),
      ),
    ],
  ),
);
于 2020-07-15T18:04:25.073 回答