首页 > 解决方案 > 如何在 Flutter 中的应用启动时显示弹出窗口

问题描述

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

非常感谢任何帮助。

标签: flutter

解决方案


您可以使用共享首选项

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


推荐阅读