inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

pushNamedAndRemoveUntil관련 질문있어용

406

zla_db

작성한 질문수 10

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'으로 잘 등록해 놓았는데 왜 작동이 안되는 걸까요??

 

flutter 클론코딩

답변 1

0

코드팩토리

안녕하세요!

아마도 /one 이라는 라우트가 라우트 스택에 없어서 그런 것 같습니다.

/one 페이지까지 다른 페이지들을 삭제하라는 함수이기때문에 /one 페이지가 존재하지 않았다면 모든 라우트를 다 삭제합니다.

감사합니다!

198강 (){onTap(e);}의 이해 돕기

0

39

1

video_call 플러그인 설치후 에러 발생

0

47

1

SDK 안드로이드 설치 질문!

0

62

1

코드팩토리 디스코드 링크 다시 부탁드려요~

0

93

1

Webview를 이용해서 URL 상의 페이지 출력 불가

0

71

1

홈스크린 함수를 함축해서 main.dart에 옮기는 문제

0

56

1

플레이스토어

0

60

1

아고라 엔진 init 함수의 반환타입이 Future<void> 이것의 의미는 무엇인가요?

0

56

1

가이드라인 질문

0

59

0

emulator 에러 환경설정 뭐가 문제 일까요??

0

78

1

emulator 실행 오류

0

95

3

Column을 가로방향 최대 사이즈를 차지하도록 하는 방법에 관련

0

73

1

pubspec.yaml에서 font를 추가하면서 weight 값을 지정하는 것이 의미가 있는 것인지 문의

0

44

1

setState()를 호출하지 않으면 build가 실행 안되는 건가요?

0

54

1

video_call 플러그인 설치시 에러문제

0

67

1

children 안의 if 문에서 { } 못쓰는 이유?

0

51

1

이렇게 오류가 떠요

0

66

1

AppBar 사용했는데

0

63

2

[문제해결] '오늘도 출첵!' 의 171번 강의에서 중요한 문제를 발견했습니다

0

58

1

StatefulWidget 실습 에러가 발생합니다.[해결완료]

0

65

1

Video Player 프로젝트에 대한 추가 질문

0

54

0

Row위젯이나 column위젯의 위치는 누가 정하나요??

0

43

1

geolocator 오류때문에 개발진행이 불가능입니다

0

64

1

API 관련 이슈

0

89

2