Flutter 当列表内容更改时重新生成小部件
我的列表中有用户可以删除的对象。如果列表为空,我希望显示一些文本,但我尝试使用Flutter 当列表内容更改时重新生成小部件,flutter,dart,Flutter,Dart,我的列表中有用户可以删除的对象。如果列表为空,我希望显示一些文本,但我尝试使用ListView.builder()来执行此操作,它多次显示文本,我希望只显示一次。列表中有什么属性可以听吗?import'package:flatter/material.dart'; import 'package:flutter/material.dart'; main() => runApp(MyApp()); class MyApp extends StatefulWidget { @over
ListView.builder()
来执行此操作,它多次显示文本,我希望只显示一次。列表中有什么属性可以听吗?import'package:flatter/material.dart';
import 'package:flutter/material.dart';
main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
List items =new List();
bool _isLoading =false;
@override
void initState() {
// TODO: implement initState
super.initState();
items = getDummyList();
setState(() {
_isLoading=false;
});
}
@override
Widget build(BuildContext context) {
return
MaterialApp(
home: Scaffold(
body: _isLoading
?Center(
child: CircularProgressIndicator())
:
items.length==0?Center(child: Text('No items in the list'),):
Container(
child: ListView.builder(
itemCount: items.length,
itemBuilder: (context, index) {
return Dismissible(
key: Key(items[index]),
onDismissed: (direction) {
setState(() {
items.removeAt(index);
});
},
child: Container(
height: 50.0,
decoration: BoxDecoration(border: Border.all(width: 1.0)),
padding: EdgeInsets.all(5.0),
child: Row(
children: <Widget>[
Text(
items[index],
style: TextStyle(
color: Colors.black,
fontSize: 20.0,
),
)
],
),
),
);
},
)),
),
);
}
List getDummyList(){
setState(() {
_isLoading=true;
});
List list = List.generate(5, (i) {
return "Item ${i +1 }";
});
return list;
}
}
main()=>runApp(MyApp());
类MyApp扩展了StatefulWidget{
@凌驾
_MyAppState createState()=>\u MyAppState();
}
类MyAppState扩展了状态{
列表项=新列表();
bool_isLoading=false;
@凌驾
void initState(){
//TODO:实现initState
super.initState();
items=getDummyList();
设置状态(){
_isLoading=false;
});
}
@凌驾
小部件构建(构建上下文){
返回
材料聚丙烯(
家:脚手架(
正文:_正在加载
?中心(
子项:CircularProgressIndicator())
:
items.length==0?中心(子项:Text(“列表中没有项目”),:
容器(
子项:ListView.builder(
itemCount:items.length,
itemBuilder:(上下文,索引){
可驳回的回报(
键:键(项[索引]),
onDismissed:(方向){
设置状态(){
项目移除(索引);
});
},
子:容器(
身高:50.0,
装饰:框装饰(边框:border.all(宽度:1.0)),
填充:所有边缘设置(5.0),
孩子:排(
儿童:[
正文(
项目[索引],
样式:TextStyle(
颜色:颜色,黑色,
字体大小:20.0,
),
)
],
),
),
);
},
)),
),
);
}
列表getDummyList(){
设置状态(){
_isLoading=true;
});
列表=列表生成(5,(i){
返回“Item${i+1}”;
});
退货清单;
}
}
看看这个例子,我为listview制作了一个Swippe Disclose示例,如果删除这些项目,它将显示文本
让我知道它是否有效
谢谢。您如何利用
itemCount
属性?