每当我的 Flutter 应用程序
中的页面发生变化时,我都想运行一个函数。
理想情况下,我不想在每个页面的 initState
中调用此函数,因为有时人们会忘记在新页面中添加调用。
将其视为中间件
- 基本上在页面加载之前,一些代码需要运行。
更新代码以供审核
import 'package:flutter/material.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:myapp/pages/login_page.dart';
import 'package:myapp/pages/dashboard_page.dart';
import 'package:myapp/styles/constants.dart';
import 'package:myapp/services/auth_service.dart';
Future<void> main() async {
// create a auth service instance
AuthService authService = AuthService(secureStorage: FlutterSecureStorage());
bool isLoggedIn = await authService.isUserLoggedIn();
// run the app
runApp(MyApp(
isLoggedIn: isLoggedIn,
));
}
class MyApp extends StatefulWidget {
final bool isLoggedIn;
MyApp({this.isLoggedIn});
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> with RouteAware {
final RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>();
@override
void didChangeDependencies() {
super.didChangeDependencies();
routeObserver.subscribe(this, ModalRoute.of(context));
}
@override
void dispose() {
routeObserver.unsubscribe(this);
super.dispose();
}
@override
void didPush() {
print('didPush');
}
@override
void didPopNext() {
print('didPopNext');
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'App NAME',
theme: ThemeData(
primarySwatch: Colors.green,
primaryColor: kPrimeColour,
),
home: widget.isLoggedIn == true ? DashboardPage() : LoginPage(),
navigatorObservers: [routeObserver],
);
}
}
最佳答案
可以使用实现方法didChangeDependencies这个函数在initState之后调用,
flutter 文档:
Subclasses rarely override this method because the framework always calls build after a dependency changes. Some subclasses do override this method because they need to do some expensive work (e.g., network fetches) when their dependencies change, and that work would be too expensive to do for every build.
@override
void didChangeDependencies() {
super.didChangeDependencies();
// set your stuff here
}
关于events - Flutter - 每次页面更改时运行一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57307050/