ShowDialog использование детей устарело, как использовать его по-другому? - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь использовать showDialog следующим образом

showDialog(context: context,child:new Text("Hello Dialgo"));

Вышеописанное работает нормально, однако в нем говорится, что параметр child устарел, и альтернативный способ:

'Вместо использования аргумента child возвращайте потомок из закрытие предоставляется аргументу «строитель». Это гарантирует, что BuildContext ' 'подходит для виджетов, встроенных в диалог.'

Я не уверен, что это значит. Любой простой пример здесь будет оценен.

Ответы [ 3 ]

0 голосов
/ 03 мая 2018

дочерний устарел. Если вы посмотрите это свойство, вы можете это предупреждение.

Вместо использования аргумента "ребенок", верните дочерний элемент из замыкания, предоставленного аргументу "строитель". Это гарантирует, что BuildContext подходит для виджетов, встроенных в диалог.

Если вы хотите использовать builder , напишите только функцию, которая возвращает ваш виджет.

Пример использования в моей функции загрузчика

void showLoader(BuildContext context) {
  showDialog(context: context, builder: (BuildContext context) => new ProgressHUD(
    color: Colors.white,
    containerColor: Theme.of(context).primaryColor,
  ));
}

Использование

// Start to show loader
showLoader(context);
// Do a async job and wait it
await do();
// Hide the loader
Navigator.pop(context);
0 голосов
/ 25 мая 2018

Мы можем присвоить текстовый виджет переменной alert , например:

var alert = new Text("Hello dialog");

Поскольку child устарело:

showDialog(context: context, child: alert);

мы можем написать это так:

showDialog(context: context, builder: (_) => alert);

Если вы хотите создать более сложный диалог, вы можете переопределить alert следующим образом:

var alert = new AlertDialog(
    title: new Text('App'),
    content: new Text(message),
    actions: <Widget>[
      new FlatButton(onPressed: () {Navigator.pop(context);},
          child: new Text('OK'))
    ],
  );

и используйте его так же, как указано выше.

0 голосов
/ 03 мая 2018

Измени это

showDialog(
   context: context,
   builder: (_) => new Text("Hello Dialgo")
);

Если вам нужен контекст из диалогового окна, измените builder: (_) => на builder: (BuildContext context) =>

Поскольку Builder является обработчиком функций, нам необходимо создать функцию, которая принимает один аргумент (BuildContext) и возвращает виджет.

Синтаксис может быть:

(BuildContext context) => new Text('...');

или

(BuildContext context) {
    return new Text('...')
}

Они эквивалентны, хотя вторая может иметь более одной строки

См. Пример здесь: https://github.com/aqwert/flutter_auth_starter/blob/master/lib/core/dialogs/showError_dialog.dart

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...