인프런 커뮤니티 질문&답변

zla_db님의 프로필 이미지
zla_db

작성한 질문수

[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

알고있으면 좋은 Push 메소드들

pushNamedAndRemoveUntil관련 질문있어용

작성

·

360

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 페이지가 존재하지 않았다면 모든 라우트를 다 삭제합니다.

감사합니다!

zla_db님의 프로필 이미지
zla_db

작성한 질문수

질문하기