Да, вы можете передавать данные между экранами в обоих направлениях. Когда вы возвращаетесь назад, отправьте data
you wi sh, чтобы отправить это со второго экрана
RaisedButton(
onPressed: () {
// The Nope button returns "data" as the result.
Navigator.pop(context, 'data');
},
child: Text('Nope!'),
);
и получите результат на вашем первом экране, как этот
final result = await Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondScreen()),
);
источник
Что касается другой проблемы, когда пользователь может go вернуться к предыдущему экрану, нажав кнопку назад, вы можете перенести второй экран с виджетом WillPopScope
и предоставить onWillPop
обратный вызов. Это отменит всплывающее окно второго экрана и выполнит обратный вызов, где вы можете определить значение, которое вы sh вернете со второго экрана.
@override
Widget build(BuildContext context) {
return WillPopScope(
child: Scaffold(), // or your widget
onWillPop: () {
return Future.delayed(Duration(microseconds: 0), () {
return Navigator.pop(context, "return-data");
});
},
);
}