问题描述
我正在使用提供程序将输入字段的值存储在表单中。在save()方法上,TextFields在FormInputProvider上调用一个方法,该方法将更新包含更新后的输入值的变量inputAnn。
_inputAnn正在侦听提供程序的变量inputAnn。
当我调用函数_upDateAnnouncementProvider时,我正在将Announcement _inputAnn添加到包含表单输入信息的Announcements列表中。但是_inputAnn的值不会由inputAnn提供程序更新。
我尝试过因此插入异步函数: _upDateAnnouncementProvider函数外部的2条打印消息已更新,但async函数内部的打印消息仍旧。
有人可以帮忙吗?如有必要,我可以提供更多代码。
谢谢。
Widget build(BuildContext context) {
var _inputAnn = Provider.of<FormInputProvider>(context).inputAnn;
print('FORM SCREEN BUILD BEFORE : images: ${_inputAnn.images.first}');
Future<void> _upDateAnnouncementProvider() async {
Future.delayed(Duration.zero).then((value) {
Provider.of<Announcements>(context,listen: false).addItem(_inputAnn);
print('INSIDE UPDATE PROVIDER: images: ${_inputAnn.images.first}');
});
}
print('FORM SCREEN BUILD: images: ${_inputAnn.images.first}');
loadHomeTypeList();
return Scaffold(
appBar: AppBar(
title: Text('Aggiungi Annuncio'),),body: Padding(
padding: EdgeInsets.all(16.0),child: FormBody(
scrollController: _scrollController,formKey: _formKey,getFormFields: () => _getFormFields(context,_inputAnn),saveForm: _saveForm,updateProvider: _upDateAnnouncementProvider,);
}
解决方法
通过将Provider对象传递给内部版本的函数,代码现在可以正常工作。
void _upDateAnnouncementProvider(FormInputProvider _inputAnnData) {
Provider.of<Announcements>(context,listen: false)
.addItem(_inputAnnData.inputAnn);
print(
'INSIDE UPDATE PROVIDER: images: ${_inputAnnData.inputAnn.images.first}');
}
@override
Widget build(BuildContext context) {
final _inputAnnData = Provider.of<FormInputProvider>(context);
var _inputAnn = _inputAnnData.inputAnn;
print('FORM SCREEN BUILD: images: ${_inputAnn.images.first}');
loadHomeTypeList();
return Scaffold(
appBar: AppBar(
title: Text('Aggiungi Annuncio'),),body: Padding(
padding: EdgeInsets.all(16.0),child: FormBody(
scrollController: _scrollController,formKey: _formKey,getFormFields: () => _getFormFields(context,_inputAnn),saveForm: _saveForm,updateProvider: () => _upDateAnnouncementProvider(_inputAnnData),);
}