events - Flutter - 每次页面更改时运行一个函数

标签 events flutter broadcasting

每当我的 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.

Link

    @override
    void didChangeDependencies() {
      super.didChangeDependencies();
      // set your stuff here 
      }

关于events - Flutter - 每次页面更改时运行一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57307050/

相关文章:

jQuery - 从传递给事件的另一个对象中访问对象属性

flutter - 如何在Flutter中的Tabbarwiew中使Web View 可滚动

flutter - 参数类型 'bool' 无法分配给参数类型 'voidcallback()'

flutter - 无法为Android的audio_service 0.8.0 flutter添加自定义队列

Laravel 事件广播不适用于推送器

ios - codenameone 多播 udp 的 IOS 权利

javascript - 在滚动时在 javascript (window.open) 中打开一个窗口而不会被弹出窗口阻止程序阻止

c# - 这个用于连接和声明事件的 C# 代码的 VB.NET 等价物是什么?

android - 网络摄像头直播android

javascript - jquery自定义事件困惑