Возврат на главный экран (routing)
Есть приложение с таким вот роутингом:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'MATH',
initialRoute: '/',
routes: {
// When navigating to the "/" route, build the FirstScreen widget.
'/': (context) => MyCustomForm(),
// When navigating to the "/second" route, build the SecondScreen widget.
'/1': (context) => FirstRoute(),
'/2': (context) => SecondRoute(),
'/3': (context) => ThirdRoute(),
'/final': (context) => FinalScreen(),
},
);
}
}
переключение происходит таким образом
onPressed: ()
{
Navigator.pushNamed(context, "/" + page_id));
}
Как сделать чтобы с любой страницы при свайпе влево (назад) или с AppBar (стрелка назад) возврат был всегда на главную страницу( "/" )? Сейчас возврат идет на предыдущую так как они друг за другом открываются(/, 1, 2, 3, final)
Спасибо!
Ответы (1 шт):
Автор решения: MiT
→ Ссылка
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'MATH',
initialRoute: '/',
routes: {
'/': (context) => MyCustomForm(),
'/1': (context) => FirstRoute(),
'/2': (context) => SecondRoute(),
},
);
}
}
class MyCustomForm extends StatelessWidget {
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () {
Navigator.pushNamedAndRemoveUntil(
context, "/", (Route<dynamic> route) => false);
return Future.value(false);
},
child: Scaffold(
appBar: AppBar(
title: Text("MyCustomForm"),
),
body: Center(
child: RaisedButton(
onPressed: () => Navigator.pushNamed(context, "/" + 1.toString()),
child: Text('Go next!'),
),
),
),
);
}
}
class FirstRoute extends StatelessWidget {
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () {
Navigator.pushNamedAndRemoveUntil(
context, "/", (Route<dynamic> route) => false);
return Future.value(false);
},
child: Scaffold(
appBar: AppBar(
title: Text("FirstRoute"),
),
body: Center(
child: RaisedButton(
onPressed: () => Navigator.pushNamed(context, "/" + 2.toString()),
child: Text('Go next 2!'),
),
),
),
);
}
}
class SecondRoute extends StatelessWidget {
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () {
Navigator.pushNamedAndRemoveUntil(
context, "/", (Route<dynamic> route) => false);
return Future.value(false);
},
child: Scaffold(
appBar: AppBar(
title: Text("SecondRoute"),
),
body: Center(
child: RaisedButton(
onPressed: () => Navigator.pushNamedAndRemoveUntil(
context, "/", (Route<dynamic> route) => false),
child: Text('Go back!'),
),
),
),
);
}
}