问题描述
我有一个PageView.builder
返回页面。每个都有一个标题和一个标签。
我还有一个EditPage
,可让用户编辑标题。
编辑后的标题通过MysqL数据库上的PHP更新。
我可以使单个页面自动更新为新标题吗?
还是在每次更新标题时都必须完全重建PageView?
这是PageView.builder
代码;
class StageBuilder extends StatelessWidget {
final List<SpeakContent> speakcrafts;
StageBuilder(this.speakcrafts);
@override
Widget build(context) {
return PageView.builder(
itemCount: speakcrafts.length,itemBuilder: (context,int currentIndex) {
return createViewItem(speakcrafts[currentIndex],context);
},);
}
Widget createViewItem(SpeakContent speakcraft,BuildContext context) {
return Column(
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[
Text(
speakcraft.title,),],Row(
mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[
Text(
speakcraft.tagname,);
}
}
Future<String> titleUpdate({String opid,String title}) async {
String upDateUrl;
upDateUrl = "http://example.com?title=" + title;
final response = await get(upDateUrl);
if (response.statusCode == 200) {
print(response.body);
return response.body;
} else
throw Exception('We were not able to successfully update the title');
}
解决方法
ListView的语法为:
List test = new List<GlobalKey<FormState>>(speakCreafts.length);
。
您的createViewItem如下:
return Form(
key: test[currentIndex],child: createViewItem(speakcrafts[currentIndex],context),);
},
是的,items是您拥有的createViewItems的数量。
要重建页面,您必须使用相同的引用调用相同的setState:
test[index].currentState.setState(() {});
感谢@Meggy! XD
,尽管不完全是我想要的,但最终,我决定允许用户通过应用程序栏返回到更新的页面;我发送的参数仅用一个已编辑的页面重建了一个新页面。
appBar: AppBar(
title: Text(
"Back to edited page",style: TextStyle(
fontSize: 14,color: Colors.blueGrey,),leading: new IconButton(
icon: new Icon(
Icons.arrow_back,color: Colors.white,onPressed: () {
Navigator.push(
context,PageTransition(
type: PageTransitionType.downToUp,child: HomePage(stagetype: 'edit',currentaudioid: widget.opid,));
},