您好,我是 Flutter 的新手,虽然我已经搜索过这个主题,但我不清楚。所以这里是代码:
main.dart 文件
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
),
));
}
profile_form.dart(在另一个文件上,从 main.dart 导入 routeObserver)
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();
}
}
这个表单是通过 Navigator.pushReplacementNamed(context, '/profile'); 输入的。虽然当我返回另一个页面(再次从 Nanigator 或后退按钮)并等待 didPop() 事件触发时触发了 didPush() 事件,但它不会触发。我在这里想念什么?我的主要问题是我想在用户退出配置文件屏幕但在进入另一个屏幕的初始化之前保存更改。