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

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

1.定义路由路径常量 aiyifan电影 xxxx 电影aiyifan xxxvideo 伴游 楼凤信息

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

2.创建路由处理器(页面映射) 爱壹帆免费版 免费在线影院 楼凤阁

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 华人影视 xxx 小宝影院 爱一帆 爱壹帆在线 电影爱壹帆

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.页面传参 爱壹帆影视 xxxxx 爱一帆电影 aiyifan 探花

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

6.返回上一页 小寶影院电影 iyf 会所 楼凤阁

GoRouter.of(context).pop();

7.通过 redirect 来实现登录验证 aiyifan xxxxxx 爱壹帆 电影小宝影院 iyf 小宝影院在线视频

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

8.页面跳转动画(渐变、滑动、缩放) 小宝影院 爱壹帆国际版 爱壹帆 xnxx ifun iyf 小宝影院在线视频 约炮 楼凤阁 伴游 楼凤阁

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 人为本文章充电 还没有介绍自己 关注