flutter - 如何在 Flutter 中的应用启动时显示弹出窗口
问题描述
我想在 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);
},
),
],
);
},
);
}
}
推荐阅读
- java - 将 JSONObject 映射到 Java 对象
- regex - 在 Azure DevOps 中将提交消息设为必填项
- java - 修改的空心星形图案 - 输出网格图案
- python - python相当于c# where T : new()
- spring - Spring Boot + Hibernate - 插入查询变慢
- c++ - 在 C++ 中读取字符串的字符时出错
- here-api - 如何在地图中显示优化的路线(航点序列)?这里技术
- java - Spring Boot 中的多个数据源 - jdbcTemplate 为空
- node.js - 为什么在函数内部声明的常量不能访问 Node Js 中的函数外部?
- java - 无法发送发布请求