Сделать диалоговое окно Flutter alerttdialog при открытии приложения

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

1 ответ

Решение

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

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

Вы можете использовать метод initState внутри State of 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.

Другие вопросы по тегам