flutter - 如何在 Flutter 中的应用程序启动时显示弹出窗口

标签 flutter

我想在 Flutter 中的应用程序加载时(或者说每次用户打开应用程序时)添加一个弹出窗口。有人能帮我吗?我知道我必须使用 AlertDialog 小部件,但我找不到合适的条件来确定应用程序启动触发器。

非常感谢任何帮助。

最佳答案

您可以使用Shared Preferences

启动应用程序时,从共享首选项中获取值(例如:isFirstLoaded)。如果 isFirstLoaded == true 则显示对话框。

当对话框关闭时,设置 isFirstLoaded = false 并保存到共享首选项。

下面是一个示例(请注意,该示例不会处理点击返回键时的关闭事件)。

将shared_preferences添加到您的pubspec.yaml

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() {
  runApp(MyStatelessApp());
}

class MyStatelessApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Stateless Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: StatelessWidgetDemo(),
    );
  }
}

class StatelessWidgetDemo extends StatelessWidget {
  final keyIsFirstLoaded = 'is_first_loaded';

  @override
  Widget build(BuildContext context) {
    Future.delayed(Duration.zero, () => showDialogIfFirstLoaded(context));
    return SafeArea(
        child: Scaffold(
            appBar: AppBar(
              title: Text('Flutter Stateless Demo'),
            ),
            body: Center(
              child: Text('Hello'),
            )));
  }

  showDialogIfFirstLoaded(BuildContext context) async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    bool isFirstLoaded = prefs.getBool(keyIsFirstLoaded);
    if (isFirstLoaded == null) {
      showDialog(
        context: context,
        builder: (BuildContext context) {
          // return object of type Dialog
          return AlertDialog(
            title: new Text("Title"),
            content: new Text("This is one time dialog"),
            actions: <Widget>[
              // usually buttons at the bottom of the dialog
              new FlatButton(
                child: new Text("Dismiss"),
                onPressed: () {
                  // Close the dialog
                  Navigator.of(context).pop();
                  prefs.setBool(keyIsFirstLoaded, false);
                },
              ),
            ],
          );
        },
      );
    }
  }

关于flutter - 如何在 Flutter 中的应用程序启动时显示弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62536438/

相关文章:

firebase - 在 Flutter 中禁用 Firestore 上的缓存

Flutter 在登录时显示微调器

firebase - ListView 和快照 - 错误 - 状态错误 : field does not exist within the DocumentSnapshotPlatform

api - 类型 'String' 不是 get 方法 flutter 中类型 'Null' 的子类型

flutter - 显示键盘时,所有东西都被向上推,我收到一个错误

Flutter GridView 有时会显示填充,尽管将其设置为 EdgeInsets.zero

flutter - (Flutter) 如果没有互联网连接,如何启动静态 html 页面而不是 URL?

android - flutter 中的 Google_sign_in 插件出错

flutter - 如何使用 onFieldSubmitted 单独验证 TextFormField

flutter - 如何查看特定版本的 Flutter API 网站?