[Flutter] Modal bottom sheet 내에서 Push, Pop의 화면 천이를 실현한다
showModalBottomSheet
하고, Bottom sheet내에서 Navigator.push
등해도 push처의 상세 화면이 모달내에서 표시되지 않기 때문입니다.모달 내에서 화면 전환을 실현
모달 내에서 화면 전환을 실현하는 포인트는 2점입니다.
1. 네비게이터 중첩
일반적으로 MaterialApp이 보유한 Navigator는 Root의 Navigator 역할을합니다. 게다가 모달용의 자전거 Navigator를 작성하는 것으로, 모달내의 화면 천이를 실현할 수 있습니다.
구체적인 코드는 아래와 같습니다.
Navigator에서 모달 페이지를 감싸고
onGenerateRoute
로 경로를 정의합니다.※ Navigator 클래스의 "Nesting Navigators"의 장을 참조
child: RaisedButton(
color: Colors.blue,
textColor: Colors.white,
onPressed: () => showModalBottomSheet(
context: context,
// 自前でモーダル用Navigatorを作成
builder: (context) => Navigator(
onGenerateRoute: (context) => MaterialPageRoute<ModalPage>(
builder: (context) => ModalPage(),
),
),
),
child: Text('Show modal'),
),
2. 화면을 닫을 때는 root측의 Navigator를 참조한다
1.의 대응을 하면 모달내에서의 화면 천이는 잘 됩니다만,
X
버튼등으로 모달을 닫을 때에 아래와 같은 거동이 되어, 잘 닫지 않습니다이것은 1.의 대응을 했을 때, Route가 중첩된 구조로 되어 있기 때문입니다. 중첩 된 아이의 Route 측에서
pop
그러므로 모달이 남아 있습니다.이것은
Navigator.of(context, rootNavigator: true)
에서 Root Navigator를 지정하여 해결할 수 있습니다.return Scaffold(
appBar: AppBar(
leading: IconButton(
// 閉じるときはネストしているModal内のRouteではなく、root側のNavigatorを指定する必要がある
onPressed: () => Navigator.of(context, rootNavigator: true).pop(),
icon: Icon(Icons.close)),
title: Text('Modal'),
),
완성
덤
만져서 움직일 수있는 데모를 DartPad에 넣어 두었으므로 활용하십시오.
h tps://다 RT 퍼d. 다 RT광g. 오 rg / 65 아파 그림 d 5016C4d5C4f20549c575 그림 55
Reference
이 문제에 관하여([Flutter] Modal bottom sheet 내에서 Push, Pop의 화면 천이를 실현한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hirothings/items/9601165efee48713cee8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)