Flutter 颤振:从appbar调用listview生成器内部的方法
我有一个listview构建器,在主页中有一个列表,当按下列表中的一个项目时,第二个页面将打开该列表的详细信息。详细信息基本上是每张卡上的另一张卡列表。我有一个计数器,从零值开始,当用户按下每张卡时,计数器值将增加 现在,我面临的问题是,当用户返回主页,然后再次单击同一项转到第二页时,他们将找到计数器值,因为它们是(即不是零),尽管我没有包括任何存储这些值的机制(即没有sharedpreferance等等) 除非关闭并再次打开应用程序,否则计数器的这些值不会回到零 我试图通过在第二页的listview.builder中添加一个方法来解决这个问题,在用户返回主屏幕后,将每张卡的计数器值更改为零。为此,我正在从appbar调用该方法,但我得到了此错误“错误:没有为类型“\u DetailState”定义方法“moveToLastScreen”。。如何解决这个问题 这是我的代码:Flutter 颤振:从appbar调用listview生成器内部的方法,flutter,dart,Flutter,Dart,我有一个listview构建器,在主页中有一个列表,当按下列表中的一个项目时,第二个页面将打开该列表的详细信息。详细信息基本上是每张卡上的另一张卡列表。我有一个计数器,从零值开始,当用户按下每张卡时,计数器值将增加 现在,我面临的问题是,当用户返回主页,然后再次单击同一项转到第二页时,他们将找到计数器值,因为它们是(即不是零),尽管我没有包括任何存储这些值的机制(即没有sharedpreferance等等) 除非关闭并再次打开应用程序,否则计数器的这些值不会回到零 我试图通过在第二页的listv
return Scaffold(
appBar: AppBar(
leading: IconButton(
icon: Icon(Icons.arrow_back_ios),
onPressed: () {
setState(() {
moveToLastScreen();
});
},
),
),
body: ListView.builder(
itemCount: widget.cities.attractions.length,
itemBuilder: (BuildContext context, int index) {
void moveToLastScreen() {
setState(() {
widget.cities.attractions[index].localrank = 0;
});
}
return InkWell(
onTap: () {
setState(() {
widget.cities.attractions[index].localrank++;
});
},
child: Card(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text(widget.cities.attractions[index].name),
Center(
child: Text(
'${widget.cities.attractions[index].localrank}')),
],
),
)),
);
},
),
);
返回脚手架(
appBar:appBar(
领先:IconButton(
图标:图标(图标、箭头、背面),
已按下:(){
设置状态(){
移动到最后屏幕();
});
},
),
),
正文:ListView.builder(
itemCount:widget.cities.attractions.length,
itemBuilder:(构建上下文,int索引){
void moveToLastScreen(){
设置状态(){
widget.cities.attractions[index].localrank=0;
});
}
回墨槽(
onTap:(){
设置状态(){
widget.cities.attractions[index].localrank++;
});
},
孩子:卡片(
孩子:填充(
填充:常数边集全部(8.0),
孩子:排(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
儿童:[
文本(widget.cities.attractions[index].name),
居中(
子:文本(
“${widget.cities.attractions[index.localrank}”),
],
),
)),
);
},
),
);
请告诉我是否还有其他方法,在用户返回主页后,强制应用程序将这些值重置为零。如果我理解正确,请在按下“上一步”按钮时将widget.cities.attractions中的所有localranks设置为零 我的第一个建议是使用WillPopScope小部件在按下back键时做您想做的事情,而不是使用appbar中的back按钮,但更重要的是,如果在那里定义了moveToLastScreen方法,则无法访问它。您必须在Widget类中定义它。 您可以使用forEach访问每个景点,然后将localrank设置为零
Future<bool> moveToLastScreen() async {
setState(() {
widget.cities.attractions.forEach((attraction) => attraction.localrank = 0);
});
Navigator.of(context).pop();
return true;
}
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () => moveToLastScreen(),
child: Scaffold(...),
);
}
Future moveToLastScreen()异步{
设置状态(){
widget.cities.attractions.forEach((attraction)=>attraction.localrank=0);
});
Navigator.of(context.pop();
返回true;
}
@凌驾
小部件构建(构建上下文){
返回式示波器(
onWillPop:()=>moveToLastScreen(),
儿童:脚手架(…),
);
}
太好了,我想怎么用就怎么用。谢谢Khashayar的回答,谢谢。