Flutter Fluro 路由框架在 OpenHarmony 中的深度应用
·
Flutter Fluro 路由框架在 OpenHarmony 中的深度应用
欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net
一、引言
路由管理是 Flutter 应用开发中的核心模块。fluro 是一个功能强大的路由管理库,提供了灵活的路由配置和导航能力。本文将详细介绍如何在 Flutter-OH 项目中使用 fluro 进行路由管理,并探讨鸿蒙化适配的关键要点。
二、Fluro 概述
Fluro 是一个轻量级的 Flutter 路由管理库,具有以下特性:
- 灵活的路由配置:支持静态路由和动态路由
- 参数传递:支持复杂参数的传递
- 路由拦截:支持路由守卫功能
- 过渡动画:支持自定义页面过渡动画
三、项目集成
3.1 添加依赖
dependencies:
flutter:
sdk: flutter
fluro: ^2.0.5
3.2 初始化路由
import 'package:fluro/fluro.dart';
class AppRouter {
static final FluroRouter router = FluroRouter();
static void configureRoutes() {
router.define(
'/',
handler: Handler(
handlerFunc: (context, params) => const HomePage(),
),
);
router.define(
'/detail/:id',
handler: Handler(
handlerFunc: (context, params) {
final id = params['id']?.first;
return DetailPage(id: id ?? '');
},
),
);
router.define(
'/login',
handler: Handler(
handlerFunc: (context, params) => const LoginPage(),
),
transitionType: TransitionType.fadeIn,
);
}
}
3.3 配置应用
void main() {
AppRouter.configureRoutes();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
Widget build(BuildContext context) {
return MaterialApp(
title: 'Fluro Demo',
onGenerateRoute: AppRouter.router.generator,
home: const HomePage(),
);
}
}
四、核心用法
4.1 基础导航
// 导航到首页
AppRouter.router.navigateTo(context, '/');
// 导航到详情页并传递参数
AppRouter.router.navigateTo(context, '/detail/123');
// 导航到登录页
AppRouter.router.navigateTo(
context,
'/login',
transition: TransitionType.cupertino,
);
4.2 接收参数
class DetailPage extends StatelessWidget {
final String id;
const DetailPage({super.key, required this.id});
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Detail')),
body: Center(
child: Text('Item ID: $id'),
),
);
}
}
4.3 路由拦截
class AuthMiddleware extends Middleware {
Future<MiddlewareResult> handleRequest(
RequestContext request,
MiddlewareHandler handler,
) async {
// 检查用户是否登录
bool isLoggedIn = await checkLoginStatus();
if (isLoggedIn) {
return handler.next(request);
} else {
// 未登录则跳转到登录页
request.redirect('/login', replace: true);
return MiddlewareResult.redirect;
}
}
Future<bool> checkLoginStatus() async {
// 检查登录状态逻辑
return false;
}
}
// 在路由配置中使用中间件
router.define(
'/profile',
handler: Handler(
handlerFunc: (context, params) => const ProfilePage(),
),
middleware: [AuthMiddleware()],
);
五、高级功能
5.1 复杂参数传递
// 传递复杂参数
final params = {
'user': jsonEncode(User(id: '1', name: 'John').toJson()),
};
AppRouter.router.navigateTo(
context,
'/profile?${Uri(queryParameters: params).query}',
);
// 接收复杂参数
class ProfilePage extends StatelessWidget {
const ProfilePage({super.key});
Widget build(BuildContext context) {
final params = ModalRoute.of(context)?.settings.arguments as Map?;
final userJson = params?['user'];
final user = User.fromJson(jsonDecode(userJson));
return Scaffold(
appBar: AppBar(title: const Text('Profile')),
body: Center(
child: Text('User: ${user.name}'),
),
);
}
}
5.2 自定义过渡动画
router.define(
'/custom',
handler: Handler(
handlerFunc: (context, params) => const CustomPage(),
),
transitionType: TransitionType.custom,
transitionBuilder: (context, animation, secondaryAnimation, child) {
return ScaleTransition(
scale: animation,
child: child,
);
},
);
六、鸿蒙化适配要点
6.1 平台特定路由
router.define(
'/harmony-only',
handler: Handler(
handlerFunc: (context, params) {
if (Platform.isHarmony) {
return const HarmonySpecificPage();
}
return const FallbackPage();
},
),
);
6.2 生命周期集成
class RouterObserver extends NavigatorObserver {
void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) {
super.didPush(route, previousRoute);
// 页面进入统计
print('Page entered: ${route.settings.name}');
}
void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) {
super.didPop(route, previousRoute);
// 页面退出统计
print('Page exited: ${route.settings.name}');
}
}
// 在 MaterialApp 中配置
MaterialApp(
navigatorObservers: [RouterObserver()],
);
七、实战案例:完整的路由管理系统
class RouteManager {
static void goHome(BuildContext context) =>
AppRouter.router.navigateTo(context, '/');
static void goDetail(BuildContext context, String id) =>
AppRouter.router.navigateTo(context, '/detail/$id');
static void goLogin(BuildContext context) =>
AppRouter.router.navigateTo(context, '/login');
static void goProfile(BuildContext context) =>
AppRouter.router.navigateTo(context, '/profile');
static void goBack(BuildContext context) =>
AppRouter.router.pop(context);
}
八、性能优化建议
- 路由预加载:提前初始化常用页面
- 避免深层嵌套路由:保持路由层级简洁
- 使用常量路由名称:避免硬编码字符串
- 路由缓存:对于复杂页面使用 keepAlive
九、常见问题与解决方案
9.1 参数获取失败
问题:无法获取路由参数。
解决方案:确保参数在路由路径中正确定义,并使用 params['key']?.first 获取。
9.2 页面栈管理问题
问题:页面栈混乱,返回时出现异常。
解决方案:使用 replace: true 替换当前页面,或使用 clearStack: true 清空页面栈。
十、总结
Fluro 以其灵活的配置和强大的功能,成为 Flutter 路由管理的首选方案。在 OpenHarmony 平台上,Fluro 的跨平台特性使其能够无缝运行,为开发者提供高效的路由管理体验。
欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net
更多推荐

所有评论(0)