Flatter showDialog не работает на простом тесте - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь трепетать, и у меня возникают проблемы с работой простого шоу-диалога. Я попробовал провести простой тест с помощью одной кнопки:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Welcome to Flutter Test',
      home: Scaffold(
        appBar: AppBar(
          backgroundColor: Colors.teal,
          title: Text('Flutter'),
        ),
        body: Center(
          child: ListView(
            padding: EdgeInsets.all(8),
            children: <Widget>[
              Container(
                child: RaisedButton(
                  child: Text('My Button'),
                  onPressed: () => {
                    showDialog(
                      context: context,
                      barrierDismissible: false,
                      builder: (context) {
                        return AlertDialog(
                          title: Text('Test'),
                          content: Text('Dialog content'),
                        );
                      },
                    ),
                  },
                  color: Colors.cyan,
                  textColor: Colors.white,
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

Я ожидаю, что при нажатии кнопки появится предупреждение. Что мне не хватает? Я также попробовал это с showdialog в отдельном вызове пользовательской функции, тот же результат.

1 Ответ

0 голосов
/ 11 марта 2020

Вам необходимо использовать метод showDialog, предоставленный Flutter, как показано на примере здесь . Проверьте мой пример ниже с вашей кнопкой, но используя метод showDialog:

class DialogIssue extends StatefulWidget {
  @override
  _DialogIssueState createState() => _DialogIssueState();
}

class _DialogIssueState extends State<DialogIssue> {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: RaisedButton(
        child: Text('My Button'),
        onPressed: () => _confirmDialog(),
        color: Colors.cyan,
        textColor: Colors.white,
      ),
    );
  }

  Future<void> _confirmDialog() async {
    switch (await showDialog<bool>(
        context: context,
        builder: (BuildContext context) {
          return SimpleDialog(
            title: const Text('True or false'),
            children: <Widget>[
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: <Widget>[
                  SimpleDialogOption(
                    onPressed: () { Navigator.pop(context, true); },
                    child: const Text('Confirm',
                      style: TextStyle(fontWeight: FontWeight.bold),
                    ),
                  ),
                  SimpleDialogOption(
                    onPressed: () { Navigator.pop(context, false); },
                    child: const Text('Cancel'),
                  ),
                ],
              ),
            ],
          );
        }
    )){
      case true:
        print('Confirmed');
        break;

      case false:
        print('Canceled');
        break;

      default:
        print('Canceled');
    }
  }
}
...