Navigator.pop не закрывает простой диалог во флаттереAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Navigator.pop не закрывает простой диалог во флаттере

Сообщение Anonymous »

Я создаю приложение для Android, используя Flutter. У меня проблема с программным закрытием простого диалога.

Теперь у меня есть страница с состоянием под названием ListVessel. Эта страница содержит listTile из массива других судов.

Ниже приведен код этой страницы.

Код: Выделить всё

class ListVessel extends StatefulWidget {
final Function() notifyParent;
ListVessel({Key key, @required this.notifyParent}) : super(key: key);

@override
_ListVesselState createState() => _ListVesselState();
}

class _ListVesselState extends State {
@override
Widget build(BuildContext context) {
return ListView.separated(
separatorBuilder: (context, index) => Divider(color: Colors.blueGrey),
itemCount: otherVessels.length,
itemBuilder: (context, index) {
return ListTile(
title: Text("Name: "+otherVessels[index]["shipName"]),
onTap: () {
showDialog (
context: context,
builder: (_){
return otherTap(idx:index);
}
);
}
);
},
);
}
}
}
Из приведенного выше кода можно коснуться каждой плитки (сосуда), и он вызывает методotherTap(). МетодotherTap() отображает простое диалоговое окно (всплывающее окно), содержащее подробную информацию о выбранном сосуде.

Ниже приведен код методаotherTap().

Код: Выделить всё

class otherTap extends StatefulWidget{
otherTap({Key key, @required this.idx}) : super(key: key);
final int idx;
@override
_otherTapState createState() => new _otherTapState();
}

class _otherTapState extends State{
@override
Widget build(BuildContext context){
_isDialogShowing = true;
return SimpleDialog(
title: Text(otherVessels[widget.idx]["shipName"]),
children: [
SimpleDialogOption(
child: Text('MMSI : ' + otherVessels[widget.idx]['MMSI']),
)
],
);
}
}
У меня есть глобальная логическая переменная (_isDialogShowing), чтобы отслеживать, отображается ли диалоговое окно.

Теперь я хочу, чтобы showdialog (всплывающее окно) отображалось закрыть через 5 секунд.

Я использую Navigator.pop(), чтобы закрыть диалоговое окно в функции MyApp. Я поместил его в функцию setstate().

Код: Выделить всё

void main() {
runApp(
MyApp(storage: CounterStorage()),
);
}

class MyApp extends StatefulWidget {
MyApp({Key key, @required this.storage}) : super(key: key);
final CounterStorage storage;
@override
State createState() => new _MyAppState();
}
class _MyAppState extends State {
final appTitle = 'Testing applicatin';

void _update(BuildContext context) async {
await Future.delayed(Duration(milliseconds: 5000));

setState(() {
if(_isDialogShowing){
_isDialogShowing = false;
Navigator.pop(context);
//Navigator.of(context).pop();
}
});
}

@override
Widget build(BuildContext context) {
_update(context);
return new WillPopScope(
onWillPop:  null,
child: new MaterialApp(
debugShowCheckedModeBanner: false,
title: appTitle,
home: MyHomePage(title: appTitle),
routes: {
Routes.home: (context) => MyHomePage(),
Routes.settings: (context) => SettingsPage(),
},
),
);
}
}
Однако приведенные выше методы navigator.pop не закрывают всплывающее окно.

Может ли кто-нибудь помочь?

Подробнее здесь: https://stackoverflow.com/questions/593 ... in-flutter
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»