我有两个页面,一个是列表视图,另一个是表单类型的页面。将sqflite与streambuilder一起用于crud操作时,一旦我输入了内容并从第二个屏幕列表视图中保存,就应该更新。
第一个屏幕:
列表视图将像这样从sqflite数据库返回。
Widget getDebtorsWidget() {
return StreamBuilder(
stream: debtorBloc.debtors,
builder: (BuildContext context, AsyncSnapshot<List<Debtor>> snapshot) {
return getDebtorCardWidget(snapshot);
},
);
}
-----------------------------------------------------------------------------
floatingActionButton: FloatingActionButton(
tooltip: 'Add an entry',
child: Icon(Icons.add),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => DebtorFormFullScreenDialog(),
fullscreenDialog: true,
));
//_showAddDebtorSheet(context);
},
),
void _showAddDebtorSheet(BuildContext context) {
......
}
第二个屏幕:
onPressed: () {
final newDebtor =
Debtor(name: _debtorNameFormController.value.text);
if (newDebtor.name.isNotEmpty) {
debtorBloc.addDebtor(newDebtor);
//dismisses the bottomsheet
Navigator.pop(context, false);
}
},
当立即在此列表视图中输入数据时,_showAddDebtorSheet()在同一屏幕上。但是,当我在第二个屏幕上执行操作时,即使我回到第一个屏幕,列表视图也不会更新。
注意:如果您需要其他信息,请通知我。
答案 0 :(得分:1)
您可以await
替换Navigator.of(context).push
(也可以从第二页Navigator.of(context).pop(value)
receive return value),然后在第一页上下文中setState(() {});
使其刷新。
在您的示例中,它看起来像:
onPressed: () async {
await Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => DebtorFormFullScreenDialog(),
fullscreenDialog: true,
)
);
setState(() {});
},