728x90

 

1. 화면 등록

import 'dart:convert';

import 'package:culture_app/detail_screen.dart';
import 'package:culture_app/home_screen.dart';
import 'package:culture_app/model/festival_model.dart';
import 'package:culture_app/onboarding_screen.dart';
import 'package:go_router/go_router.dart' show GoRoute, GoRouter;

final router = GoRouter(
  routes: [
    GoRoute(
      path: '/',
      builder: (context, state) => const OnboardingScreen(),
    ),
    GoRoute(
      path: '/home',
      builder: (context, state) =>
          const HomeScreen(title: 'Flutter Demo Home Page'),
    ),
    GoRoute(
      path: '/detail',
      builder: (context, state) {
      	// state에는 extra로 보낸 데이터가 이동된다
        FestivalModel festivalModel =
            FestivalModel.fromJson(state.extra as Map<String, dynamic>);
        return DetailScreen(
          festivalModel: festivalModel,
        );
      },
    ),
    GoRoute(
      path: '/users/:userId',
      builder: (context, state) => const UserScreen(id: state.pathParameters['userId']),
    ),
  ],
);

router에 데이터를 넘기는 것이 아니라, 특정 프로바이더를 추가로 생성한 후에 해당 프로바이더에 데이터를 갱신하는 방법도 있을 것 같다. 

 

2. 화면 이동

context.push(
  '/detail',
  extra: festivalModel.toJson(),
);

context.go(Uri(path: '/users/123', queryParameters: {'filter': 'abc'}).toString());

 

3. redirect

redirect: (BuildContext context, GoRouterState state) {
  if (AuthState.of(context).isSignedIn) {
    return '/signin';
  } else {
    return null;
  }   
},

 

4. SubRoute

 

5. context.go vs context.push

go : 현재 화면 삭제하고 이동

push : 쌓기

pop : 현재 화면 없애고 이동

 

+ Recent posts