【Flutter 必备插件】go_router 路由及其跳转动画封装

2026-01-31
【Flutter 必备插件】go_router 路由及其跳转动画封装 关注 作者 关注 作者 关注 作者 关注 作者 2025/07/17 02:02

1.定义路由路径常量 xxx 小寶影院电影 xxxvideo aiyifan电影 探花 楼凤阁

class RoutePaths {
  static const String home = '/';
  static const String detail = '/detail';
}

2.创建路由处理器(页面映射) 小宝影院 电影小宝影院 xxxxxx

import 'package:flutter/material.dart';
import '../pages/home_page.dart';
import '../pages/detail_page.dart';
import '../pages/not_found_page.dart';

class RouteHandlers {
  static Widget Function(BuildContext, GoRouterState) home =
      (context, state) => const HomePage();

  static Widget Function(BuildContext, GoRouterState) detail =
      (context, state) => DetailPage(id: state.queryParams['id'] ?? 'no-id');
}

3.封装 GoRouter 实例 华人影视

import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'route_paths.dart';
import 'route_handlers.dart';

class AppRouter {
  static final GoRouter router = GoRouter(
    routes: <RouteBase>[
      GoRoute(
        name: 'home',
        path: RoutePaths.home,
        builder: RouteHandlers.home,
      ),
      GoRoute(
        name: 'detail',
        path: RoutePaths.detail,
        builder: RouteHandlers.detail,
      ),
    ],
    errorBuilder: (context, state) => const NotFoundPage(),
  );
}

4.主入口使用封装后的 Router 小宝影院电影 爱一帆电影 小宝影院 爱一帆 爱壹帆影视 探花

import 'package:flutter/material.dart';
import 'routes/app_router.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp.router(
      routerConfig: AppRouter.router,
      debugShowCheckedModeBanner: false,
    );
  }
}

5.页面传参 小宝影院 爱壹帆在线 爱壹帆电影 xnxx xxxxx 爱壹帆 电影aiyifan

GoRouter.of(context).pushNamed(
  'detail',
  queryParams: {'id': '123'},
);

6.返回上一页 iyf xxxx 小宝影院在线视频 电影爱壹帆 电影aiyifan

GoRouter.of(context).pop();

7.通过 redirect 来实现登录验证 爱壹帆 爱壹帆免费版 aiyifan 小寶影院 海外华人视频网 ifun 楼凤信息

GoRouter(
  redirect: (state) {
    final isLoggedIn = _checkIfLoggedIn();
    if (!isLoggedIn && state.subloc != RoutePaths.home) {
      return RoutePaths.home;
    }
    return null;
  },
  // ...
)

8.页面跳转动画(渐变、滑动、缩放) 免费在线影院 爱壹帆国际版 xxxxxx xxxxx 伴游

import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';

class AppTransitions {
  static Page<T> buildSlideTransition<T>(GoRouterState state, Widget child) {
    return CustomTransitionPage<T>(
      key: state.pageKey,
      child: child,
      transitionsBuilder: (context, animation, secondaryAnimation, child) {
        return SlideTransition(
          position: Tween<Offset>(
            begin: const Offset(1.0, 0.0),
            end: Offset.zero,
          ).animate(animation),
          child: child,
        );
      },
    );
  }

  static Page<T> buildFadeTransition<T>(GoRouterState state, Widget child) {
    return CustomTransitionPage<T>(
      key: state.pageKey,
      child: child,
      transitionsBuilder: (context, animation, secondaryAnimation, child) {
        return FadeTransition(opacity: animation, child: child);
      },
    );
  }

  static Page<T> buildScaleTransition<T>(GoRouterState state, Widget child) {
    return CustomTransitionPage<T>(
      key: state.pageKey,
      child: child,
      transitionsBuilder: (context, animation, secondaryAnimation, child) {
        return ScaleTransition(
          scale: Tween<double>(begin: 0.8, end: 1.0).animate(animation),
          child: child,
        );
      },
    );
  }
}
00目录 0
    讨论 我来说一句 发布发表评论 发布0等 0 人为本文章充电 还没有介绍自己 关注