Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 理解ListView.builder_Flutter_Dart - Fatal编程技术网

Flutter 理解ListView.builder

Flutter 理解ListView.builder,flutter,dart,Flutter,Dart,好吧,我想我有点受不了颤振生成器了 我创建了一个简单的应用程序,只是为了让我的问题更简单: 我有一个数据类: class DataLists { List<ListTile> lists = [ ListTile( leading: Text('Tile Leading 1'), title: Text('Tile Title 1'), subtitle: Text('Tile Subtitle 1'), trail

好吧,我想我有点受不了颤振生成器了

我创建了一个简单的应用程序,只是为了让我的问题更简单:

我有一个数据类:

    class DataLists {
  List<ListTile> lists = [
    ListTile(
      leading: Text('Tile Leading 1'),
      title: Text('Tile Title 1'),
      subtitle: Text('Tile Subtitle 1'),
      trailing: Text('Tile Trailing 1'),
    ),
    ListTile(
      leading: Text('Tile Leading 2'),
      title: Text('Tile Title 2'),
      subtitle: Text('Tile Subtitle 2'),
      trailing: Text('Tile Trailing 2'),
    ),
    ListTile(
      leading: Text('Tile Leading 3'),
      title: Text('Tile Title 3'),
      subtitle: Text('Tile Subtitle 3'),
      trailing: Text('Tile Trailing 3'),
    ),
    ListTile(
      leading: Text('Tile Leading 4'),
      title: Text('Tile Title 4'),
      subtitle: Text('Tile Subtitle 4'),
      trailing: Text('Tile Trailing 4'),
    ),
    ListTile(
      leading: Text('Tile Leading 5'),
      title: Text('Tile Title 5'),
      subtitle: Text('Tile Subtitle 5'),
      trailing: Text('Tile Trailing 5'),
    ),
  ];
}
类数据列表{
列表=[
列表砖(
前导:文本(“平铺前导1”),
标题:文本(“平铺标题1”),
字幕:文本(“平铺字幕1”),
尾部:文本(“平铺尾部1”),
),
列表砖(
前导:文本(“平铺前导2”),
标题:文本(“瓷砖标题2”),
字幕:文本(“平铺字幕2”),
尾随:文本(“磁贴尾随2”),
),
列表砖(
前导:文本(“平铺前导3”),
标题:文本(“瓷砖标题3”),
字幕:文本(“平铺字幕3”),
尾随:文本(“磁贴尾随3”),
),
列表砖(
前导:文本(“平铺前导4”),
标题:文本(“瓷砖标题4”),
字幕:文本(“平铺字幕4”),
尾随:文本(“平铺尾随4”),
),
列表砖(
前导:文本(“平铺前导5”),
标题:文本(“瓷砖标题5”),
字幕:文本(“平铺字幕5”),
尾随:文本(“平铺尾随5”),
),
];
}
和主dart文件:

import 'package:flutter/material.dart';
import 'package:learning/data.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: TestTile(),
    );
  }
}

class TestTile extends StatefulWidget {
  @override
  _TestTileState createState() => _TestTileState();
}

class _TestTileState extends State<TestTile> {
  DataLists dataLists = DataLists();
  TextEditingController leadingController = TextEditingController();
  TextEditingController titleController = TextEditingController();
  TextEditingController subtitleController = TextEditingController();
  TextEditingController trailingController = TextEditingController();
  Future<String> createDialog(BuildContext context) {
    return showDialog(context: context, builder: (context) {
      return SimpleDialog(
        title: Text('Input data: '),
        children: [
          TextField(
            controller: leadingController,
          ),
          TextField(
            controller: titleController,
          ),
          TextField(
            controller: subtitleController,
          ),
          TextField(
            controller: trailingController,
          ),
          MaterialButton(
            child: Text('Submit'),
            onPressed: () {
              Navigator.of(context).pop(leadingController.text);
              setState(() {
                List<ListTile> tempList = dataLists.lists;
                if (titleController.text.isNotEmpty && leadingController.text.isNotEmpty && subtitleController.text.isNotEmpty && trailingController.text.isNotEmpty) {
                  tempList.add(
                    ListTile(
                      leading: Text(leadingController.text),
                      title: Text(titleController.text),
                      subtitle: Text(subtitleController.text),
                      trailing: Text(trailingController.text),
                    ),
                  );
                  dataLists.lists = tempList;
                } else {
                  print('Null values');
                }
                leadingController.clear();
                titleController.clear();
                subtitleController.clear();
                trailingController.clear();
              });
            },
          ),
        ],
      );
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Test Tile'),
      ),
      body: Container(
        child: SafeArea(
          child: ListView(
            children: <ListTile>[
              for (ListTile e in dataLists.lists)
                e
            ],
          ),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          createDialog(context);
          setState(() {

          });
        },
        child: Icon(Icons.add),
        backgroundColor: Colors.blue,
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
导入“package:learning/data.dart”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
主页:TestTile(),
);
}
}
类TestTile扩展了StatefulWidget{
@凌驾
_TestTileState createState()=>\u TestTileState();
}
类_TestTileState扩展状态{
数据列表数据列表=数据列表();
TextEditingController-leadingController=TextEditingController();
TextEditingController标题控制器=TextEditingController();
TextEditingController=TextEditingController();
TextEditingController跟踪控制器=TextEditingController();
Future createDialog(构建上下文){
返回showDialog(上下文:上下文,生成器:(上下文){
返回SimpleDialog(
标题:文本('输入数据:'),
儿童:[
文本字段(
控制员:领导控制员,
),
文本字段(
控制器:标题控制器,
),
文本字段(
控制器:控制器,
),
文本字段(
控制员:拖车控制员,
),
材料按钮(
子项:文本('Submit'),
已按下:(){
Navigator.of(context.pop)(leadingController.text);
设置状态(){
List templast=dataLists.lists;
if(titleController.text.isNotEmpty&&leadingController.text.isNotEmpty&&subtitleController.text.isNotEmpty&&trailingController.text.isNotEmpty){
圣殿骑士(
列表砖(
前导:文本(leadingController.Text),
标题:Text(titleController.Text),
字幕:文本(subtitle controller.Text),
trailing:Text(trailingController.Text),
),
);
dataLists.lists=模板列表;
}否则{
打印(“空值”);
}
leadingController.clear();
titleController.clear();
subtitle controller.clear();
trailingController.clear();
});
},
),
],
);
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“测试图块”),
),
主体:容器(
儿童:安全区(
子:ListView(
儿童:[
for(dataLists.lists中的ListTile e)
E
],
),
),
),
浮动操作按钮:浮动操作按钮(
已按下:(){
创建对话框(上下文);
设置状态(){
});
},
子:图标(Icons.add),
背景颜色:Colors.blue,
),
);
}
}
问题是:我不能以其他方式让它工作。有人可以将我的实现更改为ListView.builder吗?我有点卡住了:( 主要目标:

想法: 点击按钮->表单显示->按下提交按钮后,列表会立即更新 稍后我将添加一个删除功能,只是学习文档,仅此而已

是否有人可以查看我的代码,如果没有人介意,可以尝试使用ListView.builder重写相同的想法

我已经尝试了好几次,但无法从表单中正确获取属性,并且使用builder更新listtile,需要帮助吗


干杯!

试试这个,它可能会解决你的问题

ListView(
   children: [
        for (ListTile e in dataLists.lists)
          Card(child: e)
     ],
  ),
或者使用
ListView.builder()


进一步参考:

试试这个,它可能会解决您的问题

ListView(
   children: [
        for (ListTile e in dataLists.lists)
          Card(child: e)
     ],
  ),
或者使用
ListView.builder()

进一步参考:

需要一个静态高度,因此请跟踪该高度。现在,来回答问题,您希望使用
ListView.builder
。您可以通过此

Container(
  height: give_your_height,
  child: ListView.builder(
    shrinkWrap: true,
    itemCount: dataLists.lists.length,
    itemBuilder: (context, index) {
      return dataLists.lists[index];
    }
  )
)
需要一个静态高度,因此请跟踪该高度。现在,来回答问题,您希望使用
ListView.builder
。您可以通过此

Container(
  height: give_your_height,
  child: ListView.builder(
    shrinkWrap: true,
    itemCount: dataLists.lists.length,
    itemBuilder: (context, index) {
      return dataLists.lists[index];
    }
  )
)

没问题@Alex你也可以标记答案。这将帮助其他人根据搜索者决定哪一个是最好的,在这种情况下,是你:)是的,谢谢!我也想给你的答案打分,但没有足够的rep=/没关系@Alex你会成功的。谢谢:)没问题@Alex你也可以标出答案。这将帮助其他人决定哪一个是最可取的根据探索者,在这种情况下,是你:)是的,谢谢!我也想给你的答案打分,但没有足够的rep=/没关系@Alex你会成功的。谢谢:)