首页 > 解决方案 > Flutter 是否具有等效的 onOpen 或 onStart 触发器功能?

问题描述

目标:每次应用启动时,执行一次性功能(仅用于学习目的)。

某些应用程序具有运行一次性功能的触发器。Google App 脚本使用“onOpen”。Microsoft Power Apps 使用“onStart”。Excel 使用“Workbook_Open”。颤振是否已经内置了任何等效的触发器?

我的网络研究没有返回任何有用的信息,大多数搜索结果都是为了检测第一次应用程序启动以显示一次性启动画面。不希望检测到第一次应用程序启动。有使用持久性的解决方案(如 shared_preferences 甚至数据库),但我正在寻找一种不使用缓存或数据库的解决方案。

我有一些想法,比如使用全局变量。

Pseudocode: 

x = 0; // as global variable.

if(x = 0){ run one-time-function; x++; } // on start => run function once
else if(x > 0) { do nothing } // this prevents the one-time-function for running again

这是一个简单的例子来解释我的问题。每次应用启动时是否有更好的方法来触发功能?

我的问题听起来很傻,可能是因为我习惯于编写脚本,而不是编程。

标签: flutterdart

解决方案


我认为在'main'方法中调用'runApp'之前的一个起点是你想要找到的?

请参考下面代码中的“onStart”。

import 'package:flutter/material.dart';

void main() {
  print('onStart');
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> with WidgetsBindingObserver {
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.resumed) {
      print('onOpen');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: _buildBody(),
      floatingActionButton: FloatingActionButton(
        onPressed: () {},
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }

  Widget _buildBody() {
    return Container();
  }
}

推荐阅读