应用程序打开时制作一个 Flutter 警报对话框
Make a Flutter alertdialog when the app open
所以我希望我的 Flutter 应用程序在应用程序打开时立即生成一个警告对话框,并在我摇动手机时使其崩溃我该如何实现?
我不会给你确切的解决方案,但我会尽力指导你。
showDialog 函数可让您打开模式对话框。
您可以使用 initState method inside State of StatefulWidget 在启动时调用 showDialog(当您的页面是第一次构建时)。
有一个 plugin 用于检测 phone 抖动。
当你检测到抖动时,你应该检查对话框是否打开(可能存储一些标志),如果打开,调用 Navigator.of(context).pop();
关闭它。
UPD:好的,解决方案来了:
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
ShakeDetector detector;
bool dialogOpened = true;
@override
void initState() {
WidgetsBinding.instance.addPostFrameCallback((_) {
showDialog(
context: context,
builder: (cxt) => AlertDialog(content: Text('shake to close')),
).then((_) => dialogOpened = false);
});
detector = ShakeDetector.autoStart(
onPhoneShake: () {
if (dialogOpened) {
Navigator.of(context).pop();
}
detector?.stopListening();
detector = null;
}
);
super.initState();
}
@override
void dispose() {
detector?.stopListening();
super.dispose();
}
@override
Widget build(BuildContext context) {...}
}
同时将 shake_event: ^0.0.4
添加到 pubspec.yaml.
中的依赖项
所以我希望我的 Flutter 应用程序在应用程序打开时立即生成一个警告对话框,并在我摇动手机时使其崩溃我该如何实现?
我不会给你确切的解决方案,但我会尽力指导你。
showDialog 函数可让您打开模式对话框。
您可以使用 initState method inside State of StatefulWidget 在启动时调用 showDialog(当您的页面是第一次构建时)。
有一个 plugin 用于检测 phone 抖动。
当你检测到抖动时,你应该检查对话框是否打开(可能存储一些标志),如果打开,调用 Navigator.of(context).pop();
关闭它。
UPD:好的,解决方案来了:
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
ShakeDetector detector;
bool dialogOpened = true;
@override
void initState() {
WidgetsBinding.instance.addPostFrameCallback((_) {
showDialog(
context: context,
builder: (cxt) => AlertDialog(content: Text('shake to close')),
).then((_) => dialogOpened = false);
});
detector = ShakeDetector.autoStart(
onPhoneShake: () {
if (dialogOpened) {
Navigator.of(context).pop();
}
detector?.stopListening();
detector = null;
}
);
super.initState();
}
@override
void dispose() {
detector?.stopListening();
super.dispose();
}
@override
Widget build(BuildContext context) {...}
}
同时将 shake_event: ^0.0.4
添加到 pubspec.yaml.