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

2023-12-13

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

非常感谢任何帮助。


您可以使用共享偏好设置

启动应用程序时,从共享首选项中获取值(例如: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);
                },
              ),
            ],
          );
        },
      );
    }
  }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Flutter 中的应用程序启动时显示弹出窗口 的相关文章

随机推荐

  • php Imagick::levelImage 用法

    我已经很努力了 但无法使这个方法正常工作 使用格式为 Imagick levelImage float blackPoint float gamma float whitePoint int channel Imagick CHANNEL
  • 如何在 DirectionsRenderer 打开 Bicycling 层后将其关闭

    In Google Maps API 中有关图层的文档 规定如下 Bicycling 图层对象将自行车道图层和 或特定于自行车的叠加层渲染到公共图层中 当请求骑行模式行驶方向时 默认情况下会在 DirectionsRenderer 中返回该
  • 使用 jQuery 即时创建

    我想在基于 AJAX 响应的盒子中动态构建 s 即如果responseText是3 我想构建3个选项
  • 本地化资源包中的枚举值

    我的 JSF 应用程序中的 i18n 枚举有问题 当我开始时 我有枚举 其中定义了文本 但现在 我在枚举中将密钥绑定到消息包 我的枚举示例之一 public enum OrderStatus implements CustomEnum PE
  • 定期将大数据 (json) 导入 Firebase

    我们面临的情况是 我们必须定期更新 firebase 中的大量数据 大约 5 个 Mio 记录 目前我们有一些大小约为 1 GB 的 json 文件 作为现有的第三方解决方案 here and here 存在一些可靠性问题 每个对象导入对象
  • 删除 XML 标签及其内容之间的任何内容

    我需要删除 XML 标记之间的任何内容 尤其是空格和换行符 例如 从以下位置删除空格和换行符 节点 gt n to get 节点 gt 这并不是为了手动解析 XML 而是在 XML 数据被工具解析之前准备好 更具体地说 我正在使用 Hpri
  • 不支持 URL 格式

    我正在使用 File OpenRead 方法读取文件 我给出这个路径 http localhost 10001 MyFiles folder abc png 我也尝试过这个 但没有运气 http localhost 10001 MyFile
  • 即使我删除了 Google 表单的所有脚本后,我仍然收到“Google Apps 脚本失败摘要:脚本”错误消息

    我最近尝试使用 GoogleForms 中的脚本将所有结果通过电子邮件发送到我的帐户 但它不起作用并不断向我发送错误电子邮件 所以我删除了所有脚本 为我创建的所有 GoogleForms 创建了新的电子表格 但我仍然收到这些错误电子邮件 看
  • 如何在 Matlab 中将 Kinect 原始深度信息转换为米?

    我在这里做了一些研究来理解这个主题 但没有取得好的结果 我正在使用 Kinect for Windows 和 Kinect SDK 1 7 我正在使用 matlab 来处理原始深度图信息 首先 我使用这种方法 https stackover
  • 匿名类可以完全不可变吗?

    在 Java Concurrency In Practice 一书中 有一个几乎不可变对象的示例 如果未正确发布 该对象将面临失败的风险 Taken from Java Concurrency In Practice p 51 Listin
  • 在 Angular JS 中传递值

    我是 Angular JS 的新手 我在index html 页面中创建了一个表单 当我在表单中填写详细信息并按提交时 它应该重定向到details html 页面 我可以在哪里显示表格上填写的详细信息 HTML div class for
  • Obj-C,当“self”未设置为“[(super or self) init...]”的结果时使用的实例变量

    我知道不久前我问过类似的问题 但我仍然有点不确定 同样的事情在很多地方都发生过 当 self 未设置为 super or self init 的结果时使用的实例变量 A id initWithCoder NSCoder decoder if
  • Eclemma 不提供报告导出选项

    我确信我犯了某种菜鸟错误 但我现在第一次使用 EclEmma 尽管检查了大量指南 但仍无法弄清楚如何导出我的覆盖率报告 作为参考 这是在 Windows 8 x64 上并使用 Eclipse Kepler 如果您需要更多信息 请告诉我 我可
  • Android平台上使用altbeacon库对Eddystone信标进行后台监控

    是否有后台监控Eddystone在android平台上使用altbeacon库的beacon可能吗 我怎样才能实现它 以下是我可以在应用程序启动时检测具有指定 UUID 的信标的代码 但我想在应用程序未运行时实现相同的目标 public c
  • 将 JAXB 和 JAXWS 组合起来以生成导入的 XML 模式

    使用 wsimport 时 如何为 WSDL 中导入的 XSD 指定 JAXB 绑定 我尝试了以下绑定 这会导致错误 xs element name isFoobar 的 XPath 计算导致空目标节点
  • 实现 ApplicationContextAware - ApplicationContext 为 NULL

    我正在编写一个 Tomcat 应用程序 它充当一些内部服务的代理 我已将 Spring 项目从混合 XML 和基于注释的配置切换为 Java 和基于注释的配置 在切换配置风格之前 该应用程序运行良好 现在我有两个问题 在我的两个过滤器中执行
  • 在没有 apache 虚拟主机的情况下安装 zend 框架

    我的网站位于 var www invent 我在 var www invent library 中有 zend framework 基本上我想要的是当我访问时http localhost invent就像我在 apache conf 文件中
  • 将第二个重复项中的值移动到第一个重复项中

    这篇文章是将最后一行的值分配给第一行 将最后一个值移动到第一个值 我想将第二个重复项中的值移至第一个重复项 并将其他值设置为 NaT ID OutBedTime DateOutBed 1 16 05 2018 0 17 16 05 2018
  • 关于 String.replaceAll() 和 String.replaceFirst() 方法的问题

    我需要对一段字符串执行简单的字符串替换操作 我遇到了以下问题 希望得到一些建议 在我得到的原始字符串中 我可以替换字符串 例如 div class more 到别的东西 但是 在同一个原始字符串中 如果我想替换一个很长的字符串 如下所示 这
  • 如何在 Flutter 中的应用程序启动时显示弹出窗口

    我想在 Flutter 中的应用程序加载 或者说每次用户打开应用程序时 添加一个弹出窗口 有人能帮我吗 我知道我必须使用 AlertDialog 小部件 但我找不到合适的条件来确定应用程序启动触发器 非常感谢任何帮助 您可以使用共享偏好设置