【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