Flutter 颤振:导航弹出时未调用构建
我已经使用提供者库有一段时间了,试图掌握它。 我最近遇到了一个导航问题 在我的应用程序中,我有一个“订单”,其中包含在我的提供商状态(appState)中持有的产品。订单在菜单视图中建立。然后,我使用以下代码进入“产品审查”屏幕:Flutter 颤振:导航弹出时未调用构建,flutter,dart,flutter-provider,Flutter,Dart,Flutter Provider,我已经使用提供者库有一段时间了,试图掌握它。 我最近遇到了一个导航问题 在我的应用程序中,我有一个“订单”,其中包含在我的提供商状态(appState)中持有的产品。订单在菜单视图中建立。然后,我使用以下代码进入“产品审查”屏幕: Navigator.push( 上下文 PageRouteBuilder( transitionDuration:transitionDuration==null ?持续时间( 毫秒:appState.settings .StandardPageNavigationD
Navigator.push(
上下文
PageRouteBuilder(
transitionDuration:transitionDuration==null
?持续时间(
毫秒:appState.settings
.StandardPageNavigationDuration)//标准应用程序Duration
:过渡期,
页面生成器:(uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu(
孩子:视图,
值:appState,
),
),
用户可以在订单审查屏幕中修改产品数量。例如,如果编辑了数量,则订单(在应用程序状态下保留)将更新
问题
我遇到的问题是,当用户从订单审查中单击返回时,菜单屏幕上的构建功能似乎没有被触发,因此它不会更新(尽管订单中已删除项目,但仍显示旧价格)
我不确定解决这个问题的最佳方法是什么,你有什么建议吗?一个简单而有效的解决方案是在使用pop时调用setState(我假设这是你回到第一页所做的) 这看起来像这样:
Navigator.push(
context,
PageRouteBuilder(
transitionDuration: transitionDuration == null
? Duration(
milliseconds:
appState.settings.standardPageNavigatoinDuration) // standard app durration
: transitionDuration,
pageBuilder: (_, __, ___) => Provider<TrinoAppState>.value(
child: view,
value: appState,
),
),
).whenComplete(() => setState((){})),
实际上,您只是弹出当前视图,底部视图将位于其下方。快速修复方法是使用Navigator.push/pushNamed()而不是弹出,因为它将调用initState方法..这适用于导航到视图。我的问题是手机上按了后退按钮,所以我现在不导航。对于我来说,按下后退按钮时会调用。请尝试我的示例进行确认。在我的项目中尝试了这一点,效果很好!非常感谢。
import 'dart:math';
import 'package:flutter/material.dart';
main() {
runApp(MaterialApp(home: MyApp()));
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('First page'),
),
floatingActionButton: FloatingActionButton(
backgroundColor: Colors.red,
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondRoute()),
).whenComplete(() => print('POP'));
},
),
);
}
}
class SecondRoute extends StatefulWidget {
@override
_SecondRouteState createState() => _SecondRouteState();
}
class _SecondRouteState extends State<SecondRoute> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Second page'),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
Navigator.pop(context);
},
),
);
}
}