인프런 커뮤니티 질문&답변
pushNamedAndRemoveUntil관련 질문있어용
작성
·
402
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 페이지가 존재하지 않았다면 모든 라우트를 다 삭제합니다.
감사합니다!





