Я хочу добавить функцию, когда showModalBottomSheet закрыт или когда барьер коснулся функции запуска (маршрутизация на главную страницу), но как?
Я хочу запустить это, когда барьер постучал / модальный закрылся
Navigator.pushNamedAndRemoveUntil(context, '/mainMenuPage', (route) => false);
Модальный код
showModalBottomSheet(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(
top: Radius.circular(25.0),
),
),
backgroundColor: Colors.white,
context: context,
builder: (context) => Widget(...),
);
}
но он возвращает <асинхронную приостановку> в консоли отладки
showModalBottomSheet(
context: context,
builder: (context){
return Text("example");
}
).then((value) => {
Navigator.of(context).push(MaterialPageRoute(builder: (context) => const Page2()))
});
Вы можете попробовать так.
Попробуйте приведенный ниже код, надеюсь, он вам поможет.
Ваш виджет с нижним листом:
Center(
child: ElevatedButton(
child: const Text('showModalBottomSheet'),
onPressed: () {
showModalBottomSheet<void>(
context: context,
builder: (BuildContext context) {
return Container(
height: 200,
color: Colors.amber,
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
const Text('Modal BottomSheet'),
],
), //MyWidget()
),
);
},
).then(
(value) => Navigator.push(
context,
MaterialPageRoute(
builder: (context) => MyWidget(),
),
),
);
},
),
),
Другой класс:
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
color: Colors.white,
child: Center(
child: Text(
'Hello, World!',
style: Theme.of(context).textTheme.headline4,
),
),
);
}
}
.then()
-> Это означает, что следующие инструкции будут выполнены. Но это позволяет выполнять код после завершения асинхронного метода.
Вы можете использовать
.then
наshowModalBottomSheet
и делать то, что хотите, после того, как он закроется.