Как закрыть SimpleDialog во флаттере после выбора опции - PullRequest
0 голосов
/ 16 мая 2019

Я добавил SimpleDialog с 2 вариантами, потерян и найден.Всякий раз, когда я делаю свой выбор и перенаправляюсь туда, куда я хочу, SimpleDialog не закрывается и остается на моем экране.

Переключатель: switch ( await showDialog( context: context, child: new SimpleDialog( title: new Text("Which category?"), children: <Widget>[ new SimpleDialogOption(child: new Text("Found"), onPressed: () { goToCreate(); }, ), new SimpleDialogOption(child: new Text("Lost"), onPressed: () { //Whatever }, ), ], ) ) ) )

Ислучаи: { case "Found": goToCreate(); break; case "Lost": //Whatever break; }

Ответы [ 2 ]

2 голосов
/ 16 мая 2019

Вы можете сделать это из диалогового окна, когда вы нажимаете Принять (или что-то еще):

Navigator.pop(context, true); // You could return any Dart type, like an enum

От абонента:

bool dialogReturnValue = await showDialog(...);
if (dialogReturnValue == true){
    // do something
}
0 голосов
/ 16 мая 2019

Из официальных документов: https://docs.flutter.io/flutter/material/SimpleDialog-class.html

Вам необходимо выполнить метод onPressed внутри параметров:

Navigator.pop(context, ===arguments===);

Полный пример:

SimpleDialog(
        title: const Text('Select assignment'),
        children: <Widget>[
          SimpleDialogOption(
            onPressed: () { Navigator.pop(context, Department.treasury); },
            child: const Text('Treasury department'),
          ),
          SimpleDialogOption(
            onPressed: () { Navigator.pop(context, Department.state); },
            child: const Text('State department'),
          ),
        ],
      );

РЕДАКТИРОВАТЬ:

switch (
    await showDialog(
        context: context,
        child: new SimpleDialog(
          title: new Text("Which category?"),
          children: <Widget>[
            new SimpleDialogOption(child: new Text("Found"),
              onPressed: () {
                Navigator.pop(context, 'Found'); //Close the SimpleDialog then=>
                goToCreate();
              },
            ),
            new SimpleDialogOption(child: new Text("Lost"),
              onPressed: () {
                Navigator.pop(context, 'Lost'); //For closing the SimpleDialog
                //After that do whatever you want
              },
            ),
          ],
        )
    )
  )
)

РЕДАКТИРОВАТЬ 2 (демонстрационное приложение):

import 'package:flutter/material.dart';

void main() {
  runApp(App());
}

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Test(),
    );
  }
}

class Test extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: RaisedButton(onPressed: () {
          _askedToLead(context);
        }),
      ),
    );
  }

  Future<void> _askedToLead(BuildContext context) async {
    switch (await showDialog<String>(
        context: context,
        builder: (BuildContext context) {
          return SimpleDialog(
            title: const Text('Select assignment'),
            children: <Widget>[
              SimpleDialogOption(
                onPressed: () {
                  Navigator.pop(context, 'Found');
                },
                child: const Text('FOUND'),
              ),
              SimpleDialogOption(
                onPressed: () {
                  Navigator.pop(context, 'Lost');
                },
                child: const Text('LOST'),
              ),
            ],
          );
        })) {
      case 'Found':
        print('FOUND!');
        break;
      case 'Lost':
        print('LOST!');
        break;
    }
  }
}
...