Android 如何在AlertDialog消失后仍保留列表值
我在有状态小部件类中创建了一个列表,当用户选择卡片时,该列表将填充一些值。我的应用程序中的按钮上有一个showDialog功能,每次单击该功能时,都会向用户显示一个表单。 问题是,当用户单击Ok按钮从表单返回后,将重新创建有状态类并清除我列表中的所有值(再次调用ActivityOpleCard类)。。。如何在从showDialog表单返回后保持列表的值Android 如何在AlertDialog消失后仍保留列表值,android,flutter,dart,Android,Flutter,Dart,我在有状态小部件类中创建了一个列表,当用户选择卡片时,该列表将填充一些值。我的应用程序中的按钮上有一个showDialog功能,每次单击该功能时,都会向用户显示一个表单。 问题是,当用户单击Ok按钮从表单返回后,将重新创建有状态类并清除我列表中的所有值(再次调用ActivityOpleCard类)。。。如何在从showDialog表单返回后保持列表的值 class ActivityPeopleCard extends StatefulWidget{ Activity activity;
class ActivityPeopleCard extends StatefulWidget{
Activity activity;
List<double> _cost ;
ActivityPeopleCard({this.activity});
@override
_ActivityPeopleCardState createState() => _ActivityPeopleCardState();
}
class _ActivityPeopleCardState extends State<ActivityPeopleCard> {
int _peopleIndex = -1;
List<int> _peopleIndexes = new List();
List<int> _longPressed = new List();
@override
Widget build(BuildContext context) {
return Container(
height: height/2.6,
child:new GridView.builder(
itemCount: widget.activity.peopleInvolved.length,
gridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3),
itemBuilder: (BuildContext context, int index) {
return new GestureDetector(
behavior: HitTestBehavior.translucent,
onTap: ()=> setState(() => {
}
),
child: _buildWidget(index, context)
);
},
),
);
}
_buildWidget(int index, BuildContext context){
bool isSelected = _peopleIndexes.contains(index)?true:false;
return new Card(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30)),
elevation: 5.0,
child: Stack(
children:<Widget>[
new Container(
height: height/4,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
width:height/15,
height: height/15,
decoration: new BoxDecoration(
borderRadius: BorderRadius.circular(height/20),
border: Border.all(color: Colors.white, width:2),
),
child: ClipRRect(
borderRadius: BorderRadius.circular(height/15),
child: Image.asset(widget.activity.peopleInvolved[index].imagePath, fit: BoxFit.fill)),//CircleAvatar(
),
Center(child: Text(widget.activity.peopleInvolved[index].name))
],
),
),
shareTag(index, isSelected, context)
])
);
}
shareTag(index, isSelected, BuildContext context){
return GestureDetector(
onLongPress: ()=>{
enterPrice(index, context),
},
child: Visibility(
visible: isSelected ? true:false,
child: new Container(
height: height/2,
decoration: new BoxDecoration(
borderRadius: BorderRadius.circular(height/20),
color: Colors.red.shade500.withOpacity(0.7),
),
child: Center(child: SizedBox(
width: width/4,
height: height/15,
child:Center(child: AutoSizeText("\$${ActivityPeopleCard._cost[index]}", style:TextStyle(fontWeight: FontWeight.bold,color: Colors.white,fontFamily: 'Oxygen',fontSize: height/25),
maxLines: 1,minFontSize: 5,textAlign: TextAlign.center,),
),
))),
)
);
}
enterPrice(int index, BuildContext context){
//print("Long Pressed");
showDialog(
context: context,
builder: (context) {
return AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(25)
),
backgroundColor: Colors.white,
content: Form(
//key: _formKey,
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
new TextFormField(
initialValue: ActivityPeopleCard._cost[index].toString(),
keyboardType: TextInputType.number,
cursorColor: secondColor,
style: TextStyle(letterSpacing: 1,),
autofocus: true,
decoration: new InputDecoration(
focusedBorder: new OutlineInputBorder(
borderRadius: new BorderRadius.circular(15.0),
borderSide: new BorderSide(
color: secondColor
)),
labelStyle: TextStyle(
color: firstColor
//decorationColor: Colors.yellow
),
prefixIcon: Icon(Icons.attach_money, color: firstColor,),
labelText: "Cost",
border: new OutlineInputBorder(
borderRadius: new BorderRadius.circular(15.0),
borderSide: new BorderSide(
color: Colors.black87
),
),
),
),
],
),
),
);
});
}
}
类ActivityPeopleCard扩展StatefulWidget{
活动;
列出成本;
ActivityPeopleCard({this.activity});
@凌驾
_ActivityPeopleCardState createState()=>_ActivityPeopleCardState();
}
类_ActivityPeopleCardState扩展状态{
int_peopleIndex=-1;
列表_peopleIndexes=新列表();
列表_longPressed=新列表();
@凌驾
小部件构建(构建上下文){
返回容器(
高度:高度/2.6,
子项:新建GridView.builder(
itemCount:widget.activity.peopleInvolved.length,
gridDelegate:新SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount:3),
itemBuilder:(构建上下文,int索引){
返回新的手势检测器(
行为:HitTestBehavior.transparent,
onTap:()=>setState(()=>{
}
),
子项:_buildWidget(索引、上下文)
);
},
),
);
}
_buildWidget(int索引、BuildContext上下文){
bool isSelected=\u peopleIndexes.contains(index)?true:false;
归还新卡(
形状:RoundedRectangleBorder(borderRadius:borderRadius.circular(30)),
标高:5.0,
子:堆栈(
儿童:[
新容器(
高度:高度/4,
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
容器(
宽度:高度/15,
身高:身高/15,
装饰:新盒子装饰(
边界半径:边界半径。圆形(高度/20),
边框:边框。全部(颜色:Colors.white,宽度:2),
),
孩子:ClipRRect(
边界半径:边界半径。圆形(高度/15),
子项:Image.asset(widget.activity.peopleIncident[index].imagePath,fit:BoxFit.fill)),//CircleAvatar(
),
中心(子项:文本(widget.activity.peopleincluded[index].name))
],
),
),
shareTag(索引、isSelected、上下文)
])
);
}
shareTag(索引、isSelected、构建上下文){
返回手势检测器(
onLongPress:()=>{
企业价格(指数、上下文),
},
孩子:可见度(
可见:isSelected?真:假,
子容器:新容器(
高度:高度/2,
装饰:新盒子装饰(
边界半径:边界半径。圆形(高度/20),
颜色:颜色。红色。阴影500。不透明度(0.7),
),
子对象:中心(子对象:大小框(
宽度:宽度/4,
身高:身高/15,
child:Center(child:AutoSizeText(\$${ActivityOpleCard.\u成本[索引]}),样式:TextStyle(fontWeight:fontWeight.bold,颜色:Colors.white,fontFamily:'Oxygen',fontSize:height/25),
maxLines:1,minFontSize:5,textAlign:textAlign.center,),
),
))),
)
);
}
enterPrice(int索引、BuildContext上下文){
//打印(“长压”);
显示对话框(
上下文:上下文,
生成器:(上下文){
返回警报对话框(
形状:圆形矩形边框(
边界半径:边界半径。圆形(25)
),
背景颜色:Colors.white,
内容:表格(
//键:_formKey,
子:列(
mainAxisSize:mainAxisSize.min,
儿童:[
新TextFormField(
初始值:ActivityOpleCard.\u成本[索引].toString(),
键盘类型:TextInputType.number,
cursorColor:secondColor,
样式:TextStyle(字母间距:1,),
自动对焦:对,
装饰:新的输入装饰(
聚焦顺序:新大纲输入边框(
边界半径:新边界半径。圆形(15.0),
borderSide:新的borderSide(
颜色:第二种颜色
)),
标签样式:文本样式(
颜色:firstColor
//装饰颜色:颜色。黄色
),
前缀:图标(Icons.attach_money,颜色:firstColor,),
标签文字:“成本”,
边框:新大纲输入边框(
边界半径:新边界半径。圆形(15.0),
borderSide:新的borderSide(
颜色:颜色
),
),
),
class ActivityPeopleCard extends StatefulWidget {
Activity activity;
List<double> _cost;
ActivityPeopleCard({this.activity});
@override
_ActivityPeopleCardState createState() => _ActivityPeopleCardState();
}
class _ActivityPeopleCardState extends State<ActivityPeopleCard> {
int _peopleIndex = -1;
List<int> _peopleIndexes = new List();
List<int> _longPressed = new List();
var _vlContainer;
@override
void initState() {
super.initState();
_vlContainer = myListContainer();
}
@override
Widget build(BuildContext context) {
return _vlContainer;
}
myListContainer() {
return Container(
height: height / 2.6,
child: new GridView.builder(
itemCount: widget.activity.peopleInvolved.length,
gridDelegate:
new SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3),
itemBuilder: (BuildContext context, int index) {
return new GestureDetector(
behavior: HitTestBehavior.translucent,
onTap: () => setState(() => {}),
child: _buildWidget(index, context));
},
),
);
}
_buildWidget(int index, BuildContext context) {
bool isSelected = _peopleIndexes.contains(index) ? true : false;
return new Card(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30)),
elevation: 5.0,
child: Stack(children: <Widget>[
new Container(
height: height / 4,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
width: height / 15,
height: height / 15,
decoration: new BoxDecoration(
borderRadius: BorderRadius.circular(height / 20),
border: Border.all(color: Colors.white, width: 2),
),
child: ClipRRect(
borderRadius: BorderRadius.circular(height / 15),
child: Image.asset(
widget.activity.peopleInvolved[index].imagePath,
fit: BoxFit.fill)), //CircleAvatar(
),
Center(child: Text(widget.activity.peopleInvolved[index].name))
],
),
),
shareTag(index, isSelected, context)
]));
}
shareTag(index, isSelected, BuildContext context) {
return GestureDetector(
onLongPress: () => {
enterPrice(index, context),
},
child: Visibility(
visible: isSelected ? true : false,
child: new Container(
height: height / 2,
decoration: new BoxDecoration(
borderRadius: BorderRadius.circular(height / 20),
color: Colors.red.shade500.withOpacity(0.7),
),
child: Center(
child: SizedBox(
width: width / 4,
height: height / 15,
child: Center(
child: AutoSizeText(
"\$${ActivityPeopleCard._cost[index]}",
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.white,
fontFamily: 'Oxygen',
fontSize: height / 25),
maxLines: 1,
minFontSize: 5,
textAlign: TextAlign.center,
),
),
))),
));
}
enterPrice(int index, BuildContext context) {
//print("Long Pressed");
showDialog(
context: context,
builder: (context) {
return AlertDialog(
shape:
RoundedRectangleBorder(borderRadius: BorderRadius.circular(25)),
backgroundColor: Colors.white,
content: Form(
//key: _formKey,
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
new TextFormField(
initialValue: ActivityPeopleCard._cost[index].toString(),
keyboardType: TextInputType.number,
cursorColor: secondColor,
style: TextStyle(
letterSpacing: 1,
),
autofocus: true,
decoration: new InputDecoration(
focusedBorder: new OutlineInputBorder(
borderRadius: new BorderRadius.circular(15.0),
borderSide: new BorderSide(color: secondColor)),
labelStyle: TextStyle(color: firstColor
//decorationColor: Colors.yellow
),
prefixIcon: Icon(
Icons.attach_money,
color: firstColor,
),
labelText: "Cost",
border: new OutlineInputBorder(
borderRadius: new BorderRadius.circular(15.0),
borderSide: new BorderSide(color: Colors.black87),
),
),
),
],
),
),
);
});
}
}