Я работаю над проектом Flutter, где мне нужна возможность показывать пользователю диалог, независимо от того, где он находится в приложении. В настоящее время я выполняю функцию showDialog () в виджете корневого уровня, который запускается main ().
Этот виджет реализует WidgetsBindingObserver, так что я могу слушать, когда приложение перемещается из фона на передний план через функцию didChangeAppLifecycleState (). Каждый раз, когда это происходит, я обращаюсь к поставщику услуг, и в зависимости от результатов мне нужно показать диалоговое окно.
Пользователи будут переходить на какой-то другой маршрут в любое время, когда это произойдет, и именно здесь я, похоже, столкнулся с проблемой. Ниже приведена урезанная функция, которая выполняет вызов API и последующую попытку showDialog (). Но ничего не происходит. Я попытался обернуть его в 2-секундный таймер, думая, что, может быть, проблема в том, что приложение просто возвращается на передний план, но это не имело значения.
void _fetchSuperAwesomeStuff() {
final apiCaller = new SuperAwesomeStuffAPI();
apiCaller.fetchSuperAwesomeStuff().then((List<SuperAwesomeStuff> superAwesomeStuffs) {
if (superAwesomeStuffs != null && superAwesomeStuffs.length > 0) {
SuperAwesomeStuff superAwesomeStuff = superAwesomeStuffs[0];
// .... DOING STUFF WITH THIS SUPER AWESOME STUFF .... //
// NEED TO SHOW A DIALOG.
showDialog(
context: context,
builder: (_) => new AlertDialog(
title: Text('Test Title'),
actions: <Widget>[
new FlatButton(
onPressed: () {
Navigator.pop(context);
},
child: new Text('Close'),
),
],
),
);
}
});
}
Любая помощь с этим будет принята с благодарностью, спасибо!