use*_*745 4 events broadcasting flutter
我想在每次页面更改时运行一个函数Flutter application。
理想情况下,我不想在initState每个页面中调用此函数,因为有时人们可能会忘记在新页面中添加调用。
将其视为middleware- 基本上在页面加载之前等,需要运行一些代码。
更新代码以供审核
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],
);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
你可以使用initState之后调用这个函数的实现方法didChangeDependency,
扑动文档:
子类很少重写此方法,因为框架总是在依赖项更改后调用构建。一些子类确实会重写此方法,因为当它们的依赖项发生变化时,它们需要执行一些昂贵的工作(例如,网络获取),而对于每个构建来说,这些工作都太昂贵了。
@override
void didChangeDependencies() {
super.didChangeDependencies();
// set your stuff here
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12488 次 |
| 最近记录: |