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你会成功的。谢谢:)