我在服务器上运行一个REST API来创建对象。如果存在任何验证错误,则API会在响应中返回422以及错误消息。很简单。
我要做什么
向用户显示要填写的表单。当用户提交表单时,显示加载指示符,直到服务器返回响应。
如果服务器响应成功,则显示服务器上创建的对象的详细信息(现在基本上分配了一个ID)。在返回按钮上,不应显示该表单,而应显示启动表单的窗口小部件。
如果服务器响应错误,请显示一条消息,并为用户提供一种返回表单的方式,以重新提交具有更改的表单。理想情况下,如果可以在显示错误的小吃栏中自动显示表单(或像Web表单-表单顶部的错误),那将是很好的选择
约束-我想避免不得不重新创建Form小部件并在API错误的情况下重新使用堆栈中的小部件。
当前实施
我已经实现了一个带有Form小部件的小部件。提交时,当表单有效时,我将表单保存到本地模型对象中。然后使用服务对象将该对象的JSON表示形式发布到服务器。
服务对象返回该模型对象的Future,我将使用它创建下一个小部件(查看模型详细信息)并将其推入Navigator堆栈。此小部件将Future构造器与在构造函数中接收到的这个未来一起使用。
万一FutureBuilder出现错误,我会显示带有按钮的消息,从导航器中弹出堆栈,然后单击返回到“窗体”视图。
如果没有错误,则此视图显示对象详细信息。但是,应用程序栏中的后退箭头可返回到上一个“表单”小部件。
问题从这里开始:
如果在加载具有Future的视图时在导航器上使用pushReplacement,那么我将无法弹出以返回错误表单。如果我不这样做,那么即使成功也要返回表格。
目前唯一的方法似乎是在具有Form的小部件中也处理Future并仅在Future成功的情况下转到详细信息小部件,但这似乎不是一个干净的方法,因为Form小部件做的太多了东西。
是否有更好的替代方法或模式来实现此目的,以便在Future成功的情况下弹出窗体视图?