如何在 Flutter 中动态附加到 Column 小部件的子级

新手上路,请多包涵

Flutter 是一个相当新的框架,因此在简单任务上没有太多帮助。我具体要问的是如何将 Card 小部件添加到 Column 小部件。下面提供了源代码以帮助解释我的意思。

假设我有一个创建新卡片的函数,如下所示:

 buildRow(barcode, letter, name, price) {
  return new Card(
    child: new Column(
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: <Widget>[
        new ListTile(
          leading: new CircleAvatar(
            child: new Text(letter),
          ),
          title: new Text(name),
          subtitle: new Text("\$" + price),
          trailing: new Text(
            "x1",
            style: new TextStyle(color: Colors.lightBlue),
            textScaleFactor: 1.2,
          ),
        ),
      ],
    ),
  );
}
var snack = buildRow("091918229292", "C", "Crackers", "\$4.00");
var fruit = buildRow("091928229292", "P", "Pomegranate", "\$2.00");
var juice = buildRow("091948229292", "K", "Kiwi Juice", "\$20.00");

我有以下屏幕/页面:

 class Home extends StatefulWidget {
  @override
  HomePage createState() => new HomePage();
}

class HomePage extends State<Home> {
  @override
  Widget build(BuildContext context) {
    return new Column(children: <Widget>[

    ]);
  }
}

假设提供的所有代码都在同一个文件中。如何在主屏幕上的列小部件的子项中添加“零食”、“水果”和“果汁”?

原文由 otboss 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 437
2 个回答

好的,我已经解决了我的问题,我所做的是创建一个新列表,如下所示:

 List<Widget> v = [];

并使这个列表成为身体的孩子,如下所示:

 class HomePage extends State<Home> {
  @override
  Widget build(BuildContext context) {
    return new Column(children: v);
  }
}

之后我创建了一个函数来追加,如下所示:

 buildRow(barcode, letter, name, price) {
  v.add(new Card(
    child: new Column(
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: <Widget>[
        new ListTile(
          leading: new CircleAvatar(
            child: new Text(letter),
          ),
          title: new Text(name),
          subtitle: new Text("\$" + price),
          trailing: new Text(
            "x1",
            style: new TextStyle(color: Colors.lightBlue),
            textScaleFactor: 1.2,
          ),
        ),
      ],
    ),
  ));
}

最后我使用 setState 函数将更改应用到屏幕上。

原文由 otboss 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您手动更新源代码,这是一个基本示例。

       Column(
        children: _createChildren(),
      )

///////

这是创建您提供给列的小部件列表的方法

  List<int> someList = [1, 2, 3, 4, 5];
  List<Widget> _createChildren() {
    return new List<Widget>.generate(someList.length, (int index) {
      return Text(someList[index].toString());
    });
  }

//////

所以当你更新你的列表时,在 setState

   void _somethingHappens() {
    setState(() {
      someList.add(6);
    });
  }

现在,如果您从流中接收数据,则可以检查 StreamBuilder ,或者如果它来自 Future ,则可以使用 FutureBuilder

这个例子也可以在常规的 Builder 中完成

原文由 Tree 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题