Сделать Flutter alertstdialog, когда приложение открыто - PullRequest
0 голосов
/ 09 ноября 2019

Итак, я хочу, чтобы мое приложение Flutter создавало alerttdialog, как только оно открывается, и заставляет его рушиться, когда я встряхиваю мобильный телефон. Как я могу это сделать?

1 Ответ

0 голосов
/ 09 ноября 2019

Я не дам вам точное решение, но я постараюсь помочь вам.

Функция showDialog позволяет открыть модальное диалоговое окно.

Вы можете использовать initState метод внутри State из StatefulWidget для вызова showDialog при запуске (когда ваша страница создается впервые),

Есть плагин для обнаружения дрожания телефона.

Когда вы обнаруживаете сотрясение, вы должны проверить, открыто ли диалоговое окно (возможно, сохранен какой-либо флаг), и, если оно открыто, вызовите 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 .

...