Flutter 颤振:RouteAware仅触发didPush事件
你好,我是新来的,虽然我已经搜索过这个主题,但我不清楚。下面是代码: main.dart文件Flutter 颤振:RouteAware仅触发didPush事件,flutter,flutter-routes,Flutter,Flutter Routes,你好,我是新来的,虽然我已经搜索过这个主题,但我不清楚。下面是代码: main.dart文件 RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>(); void main() async { WidgetsFlutterBinding.ensureInitialized(); await DotEnv().load('.env'); final UserRepository use
RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>();
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await DotEnv().load('.env');
final UserRepository userRepository = new UserRepository();
runApp(BlocProvider(
create: (context) => AuthenticationBloc(userRepository)..add(AppStarted()),
child: App(
userRepository: userRepository
),
));
}
RouteObserver RouteObserver=RouteObserver();
void main()异步{
WidgetsFlutterBinding.ensureInitialized();
等待DotEnv().load('.env');
final UserRepository UserRepository=new UserRepository();
runApp(BlocProvider(
创建:(上下文)=>AuthenticationBloc(userRepository)…添加(AppStarted()),
儿童:应用程序(
userRepository:userRepository
),
));
}
profile_form.dart(位于另一个文件中,并从main.dart导入routeObserver)
class ProfileForm扩展StatefulWidget{
最终用户存储库_UserRepository;
最终用户\u用户;
剖面图(
{Key Key、@required UserRepository UserRepository、@required User})
:assert(userRepository!=null&&user!=null),
_userRepository=userRepository,
_用户=用户,
超级(键:键);
State createState()=>_ProfileFormState();
}
类_ProfileFormState使用RouteAware扩展状态{
UserRepository get _UserRepository=>widget.\u UserRepository;
用户获取_User=>widget.\u User;
@凌驾
void initState(){
super.initState();
}
@凌驾
void didChangeDependencies(){
subscribe(这是(上下文)的ModalRoute.of);
super.didChangeDependencies();
}
@凌驾
void didPush(){
打印('didPush FirstPage');
}
@凌驾
void didPopNext(){
打印('didPopNext FirstPage');
}
@凌驾
void didPop(){
打印(“didPop首页”);
}
@凌驾
void didphushnext(){
打印(“下一个第一页”);
}
@凌驾
无效处置(){
印刷品(“dis”);
routeObserver.unsubscribe(此);
super.dispose();
}
}
此表单是通过Navigator.pushreplacementname(上下文“/profile”);
虽然当我返回到另一个页面(再次从Nanigator或back按钮)并等待didPop()事件触发时,didPush()事件的触发器会触发,但不会触发。我错过了什么?我的主要问题是,我想在用户退出配置文件屏幕时,但在进入另一个屏幕的init之前保存更改
class ProfileForm extends StatefulWidget {
final UserRepository _userRepository;
final User _user;
ProfileForm(
{Key key, @required UserRepository userRepository, @required User user})
: assert(userRepository != null && user != null),
_userRepository = userRepository,
_user = user,
super(key: key);
State<ProfileForm> createState() => _ProfileFormState();
}
class _ProfileFormState extends State<ProfileForm> with RouteAware {
UserRepository get _userRepository => widget._userRepository;
User get _user => widget._user;
@override
void initState() {
super.initState();
}
@override
void didChangeDependencies() {
routeObserver.subscribe(this, ModalRoute.of(context));
super.didChangeDependencies();
}
@override
void didPush() {
print('didPush FirstPage');
}
@override
void didPopNext() {
print('didPopNext FirstPage');
}
@override
void didPop() {
print('didPop FirstPage');
}
@override
void didPushNext() {
print('didPushNext FirstPage');
}
@override
void dispose() {
print("dis");
routeObserver.unsubscribe(this);
super.dispose();
}
}