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

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

1.定义路由路径常量 aiyifan 小宝影院 iyf xxxxx aiyifan电影 外围 小姐

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

2.创建路由处理器(页面映射) 爱壹帆 爱一帆 小寶影院 xxxxx

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 实例 xxxxxx 小寶影院电影 华人影视 爱壹帆电影 aiyifan电影 xxx

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.页面传参 爱壹帆国际版 小宝影院 电影aiyifan 约炮 寻芳网

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

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

GoRouter.of(context).pop();

7.通过 redirect 来实现登录验证 电影爱壹帆 小宝影院电影 xnxx aiyifan电影 会所

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

8.页面跳转动画(渐变、滑动、缩放) 小宝影院 ifun 爱一帆电影 免费在线影院 爱壹帆免费版 海外华人视频网 电影aiyifan 寻芳阁 小姐

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