Flutter 颤振listview按钮以创建额外的子项

Flutter 颤振listview按钮以创建额外的子项,flutter,dart,flutter-listview,Flutter,Dart,Flutter Listview,我正在处理的颤振应用程序中有一个listview,我希望能够根据按下按钮的时间向listview添加额外的项目。按钮应位于所有项目下方。我想在每次按下按钮时添加一个额外的容器。理想情况下,它将是一个小部件。我不知道该怎么做。这是我的密码: body: ListView( children: <Widget>[ Container( //this is the container I would like to add another o

我正在处理的颤振应用程序中有一个listview,我希望能够根据按下按钮的时间向listview添加额外的项目。按钮应位于所有项目下方。我想在每次按下按钮时添加一个额外的容器。理想情况下,它将是一个小部件。我不知道该怎么做。这是我的密码:

body: ListView(
          children: <Widget>[
            Container(   //this is the container I would like to add another of when a button is pressed
              height: 200,
              child: optionsChoices(),
            ), //end container
            Container(
              height: 200,
              child: optionsChoices(),
            ),
            Container(
              height: 200,
              child: optionsChoices(),
            ),
            Container(
              height: 200,
              child: optionsChoices(),
            ),
          ]
        )

body:ListView(
儿童:[
Container(//当按下按钮时,我想添加另一个容器
身高:200,
子项:选项Choices(),
),//结束容器
容器(
身高:200,
子项:选项Choices(),
),
容器(
身高:200,
子项:选项Choices(),
),
容器(
身高:200,
子项:选项Choices(),
),
]
)

谢谢

您可以使用
ListView.builder()
为ListView生成项目。将对象或值存储到
列表中
类型变量,并将其传递给listview

这里有一个完整的示例来源:

import 'package:flutter/material.dart';

class Demo extends StatefulWidget {
  @override
  _DemoState createState() => _DemoState();
}

class _DemoState extends State<Demo> {
  List<int> items = [];

  @override
  void initState() {
    items = List.generate(3, (i) {
      // add some dummy items on activity start
      return i;
    });
    super.initState();
  }

  Widget listViewItem({int index}) {
    // widget layout for listview items
    return Container(
        height: 200,
        child:
            Text("$index") // just for the demo, you can pass optionsChoices()
        );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("DEMO"),
        ),
        body: ListView.builder(
          itemCount: items.length,
          itemBuilder: (context, i) {
            return listViewItem(index: i); // item layout
          },
        ),
        floatingActionButton: FloatingActionButton(
            child: Icon(Icons.add),
            onPressed: () {
              setState(() {
                // add another item to the list
                items.add(items.length);
              });
            }));
  }
}
导入“包装:颤振/材料.省道”;
类Demo扩展StatefulWidget{
@凌驾
_DemoState createState();
}
类_DemoState扩展了状态{
列表项=[];
@凌驾
void initState(){
项目=列表。生成(3,(i){
//在活动开始时添加一些虚拟项
返回i;
});
super.initState();
}
小部件listViewItem({int index}){
//listview项目的小部件布局
返回容器(
身高:200,
儿童:
Text(“$index”)//只是为了演示,您可以传递optionsChoices()
);
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“演示”),
),
正文:ListView.builder(
itemCount:items.length,
itemBuilder:(上下文,i){
返回listViewItem(索引:i);//项布局
},
),
浮动操作按钮:浮动操作按钮(
子:图标(Icons.add),
已按下:(){
设置状态(){
//将另一项添加到列表中
项目。添加(项目。长度);
});
}));
}
}
改用
ListView.builder()
和包含容器小部件的列表以及
setState()
来管理列表的状态

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int x = 60;
  List<Widget> a = [
      Container(
        height: 200,
        child: Text('Test'),
      )
    ];
  void _d() {
    setState(() {
      a.add(Container(
                    height: 200,
                    child: Text('Test'),
                  ));
    });
  }

  Widget build(context) {

    return Scaffold(
        appBar: AppBar(),
        body: Column(
          children: <Widget>[
            FlatButton(
                onPressed: () {
                  _d();

                },
                child: Text('Press here to add item')),
            Expanded(
              child: ListView.builder(
                  itemCount: a.length,
                  itemBuilder: (context, index) {
                    return a[index];
                  }),
            ),
          ],
        ));
  }
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
debugShowCheckedModeBanner:false,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:MyHomePage(),
);
}
}
类MyHomePage扩展StatefulWidget{
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
int x=60;
列表a=[
容器(
身高:200,
子项:文本('Test'),
)
];
无效(){
设置状态(){
a、 添加(容器)(
身高:200,
子项:文本('Test'),
));
});
}
小部件构建(上下文){
返回脚手架(
appBar:appBar(),
正文:专栏(
儿童:[
扁平按钮(
已按下:(){
_d();
},
子项:文本(“按此处添加项”),
扩大(
子项:ListView.builder(
itemCount:a.length,
itemBuilder:(上下文,索引){
返回一个[索引];
}),
),
],
));
}
}

应该可以。谢谢