RouteObserveMixin은 Flutter 유틸리티 믹스인으로, didPush, didPop, didPushNext 및 didPopNext와 같은 라우트 수명 주기 이벤트를 간소화합니다. 위젯이 라우트를 수동으로 관리하거나 전역 관찰자를 사용하지 않고도 네비게이션 변경에 반응할 수 있게 해줍니다. 네비게이션 흐름과 연결된 상태 관리 및 UI 업데이트에 이상적이며, 여러 플랫폼에서 복잡한 라우팅 시나리오의 상호작용을 간편하게 만듭니다.
사용 사례
내비게이션 상태 변경 처리
경로 전환 시 UI 업데이트
푸시/팝 이벤트 동안 상태 관리
경로 변경과 데이터 동기화
사용자 지정 탐색 동작 구현
주요 기능
기존 위젯과의 간편한 통합
자동 수명 주기 이벤트 콜백
모든 주요 플러터 플랫폼을 지원합니다
최소한의 보일러플레이트 코드
네비게이션 로직의 명확한 분리
적합한 대상
복잡한 탐색 흐름을 사용하는 개발자
경로 인식을 갖춘 상태 관리
크로스 플랫폼 플러터 앱
네비게이션 컨텍스트가 필요한 위젯
고려 사항
위젯 클래스에서 믹스인 사용이 필요합니다
경로 수명 주기 이벤트에만 제한됨
전체 네비게이션 관리를 대체하지 않습니다
상태를 가진 위젯과 함께 사용하는 것이 가장 좋습니다
간단한 탐색 시나리오에 적합하지 않습니다
원본 README
연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.
route_observer_mixin
RouteObserveMixin provides easy access to didPush/didPop/didPushNext/didPopNext.
Usage
1. Wrap MaterialApp with RouteObserverProvider.
voidmain() {
runApp(
MultiProvider(
providers: [
// 1. Wrap MaterialApp with RouteObserverProvider.RouteObserverProvider(),
ChangeNotifierProvider(create: (context) => Logger())
],
child: constApp(),
),
);
// Of course, this is also ok.// I demonstrated that [MultiProvider] can be used for RouteObserverProvider👍/*
runApp(
RouteObserverProvider(
child: App(),
),
);
*/
}
2. Pass RouteObserverProvider.of(context) to navigatorObservers.
3. Add with RouteAware, RouteObserverMixin to State and override RouteAware methods.
classAPageextendsStatefulWidget{
constAPage({Key key}) : super(key: key);
@override_APageStatecreateState() => _APageState();
}
// 3. Add `with RouteAware, RouteObserverMixin` to State and override RouteAware methods.class_APageStateextendsState<APage> withRouteAware, RouteObserverMixin{
@overrideWidgetbuild(BuildContext context) {
returnScaffold(
appBar: AppBar(
title: constText('A Page'),
),
body: Center(
child: RaisedButton(
onPressed: () {
Navigator.of(context).push<void>(
MaterialPageRoute(
builder: (context) => constBPage(),
),
);
},
child: constText('B Page'),
),
),
);
}
/// Called when the top route has been popped off, and the current route/// shows up.@overridevoiddidPopNext() { }
/// Called when the current route has been pushed.@overridevoiddidPush() { }
/// Called when the current route has been popped off.@overridevoiddidPop() { }
/// Called when a new route has been pushed, and the current route is no/// longer visible.@overridevoiddidPushNext() { }
}