작성
·
365
0
import 'package:flutter/material.dart';
import 'package:navigation/layout/main_layout.dart';
import 'package:navigation/screen/route_three_screen.dart';
class RouteTwoScreen extends StatelessWidget {
const RouteTwoScreen({super.key});
@override
Widget build(BuildContext context) {
final arguments = ModalRoute.of(context)!.settings.arguments;
return MainLayout(title: 'Route Two', children: [
Text(
'arguments: ${arguments}',
textAlign: TextAlign.center,
),
ElevatedButton(
onPressed: () {
// [HomeScreen(), RouteOne(), RouteTwo()] stack 구조!
Navigator.of(context).pop();
},
child: Text(
'Pop',
),
),
ElevatedButton(
onPressed: () {
Navigator.of(context).pushNamed('/three', arguments: 999);
},
child: Text('Push Named'),
),
ElevatedButton(
onPressed: () {
// Navigator.of(context).pushReplacement(
// MaterialPageRoute(
// builder: (_) => RouteThreeScreen(),
// ),
// );
Navigator.of(context).pushReplacementNamed('/three');
},
child: Text('Push Replacement'),
),
ElevatedButton(
onPressed: () {
// Navigator.of(context).pushAndRemoveUntil(
// MaterialPageRoute(builder: (_) => RouteThreeScreen()),
// (route) => route.settings.name == '/',
// );
Navigator.of(context).pushNamedAndRemoveUntil(
'/three',
(route) => route.settings.name == '/one',
);
},
child: Text('Push Named Replacement'),
),
]);
}
}
Navigator.of(context).pushNamedAndRemoveUntil(
'/three',
(route) => route.settings.name == '/one',
);
제가 이런식으로 '/'이 아닌 '/one'으로 바꾸어 보았는데, route_three에서 pop()하면 one으로 가는게 아니라 그냥 검은 화면이 보여요. '/'은 잘 작동하고 main파일에서도 정확히 '/one'으로 잘 등록해 놓았는데 왜 작동이 안되는 걸까요??
답변 1
0
안녕하세요!
아마도 /one 이라는 라우트가 라우트 스택에 없어서 그런 것 같습니다.
/one 페이지까지 다른 페이지들을 삭제하라는 함수이기때문에 /one 페이지가 존재하지 않았다면 모든 라우트를 다 삭제합니다.
감사합니다!