GoRouter를 Riverpod Provider로 감싸는 패턴. "라우팅"과 "상태관리"를 잇는 다리. (일반 개념)
final routerProvider = Provider((ref) {
return GoRouter(...);
});
GoRouter를 그냥 만들지 않고 Riverpod Provider로 한 겹 감싼 것. 왜 이렇게 할까?
Provider로 감싸면 안에서 ref를 쓸 수 있다. 그래서 로그인 여부 같은 전역 상태를 읽어 화면 이동을 판단할 수 있다.
final routerProvider = Provider((ref) {
return GoRouter(
redirect: (context, state) {
final loggedIn = ref.read(authProvider); // 다른 상자 읽기
if (!loggedIn) return "/login"; // 로그인 안 했으면 로그인으로
return null;
},
routes: [...],
);
});
앱 최상단에서 이렇게 연결한다:
MaterialApp.router(
routerConfig: ref.watch(routerProvider),
)
ref.watch로 구독하므로, 라우터가 의존하는 상태(로그인 등)가 바뀌면 라우터도 다시 만들어져 화면 구성이 자동 갱신된다. 예: 로그아웃하면 자동으로 로그인 화면으로.
관련: "플러터 라우팅 (go_router) 개념", "Riverpod 개념" 페이지.