Flutter路由管理插件sunny_fluro的使用

(基于)最亮、最时髦、最酷的Flutter路由管理器。
最大的变化是引入了(可选的)类型化路由参数。你仍然可以使用URL进行解析和路由,但也可以通过复杂的类型化参数加载路由。
为了减少样板代码,类型化路由系统包含了一个代码生成器。
版本 1.6.0
需要 Flutter >= 1.12.0
和 Dart >= 2.6.0
。如果你使用的Flutter版本较旧,请使用版本 < 1.6.0
。
功能
- 简单的路由导航
- 函数处理器(将函数映射到处理器而不是路由)
- 通配符参数匹配
- 查询字符串参数解析
- 内置常见过渡效果
- 简单自定义过渡效果创建
版本兼容性
查看CHANGELOG以了解所有破坏性和非破坏性更改。
开始使用
你应该确保在你的Flutter项目中将路由器作为依赖项添加。
dependencies:
sunny_fluro: "^1.6.0"
如果你想直接引用git仓库,也可以这样做:
dependencies:
sunny_fluro:
git: git://github.com/SunnyApp/fluro.git
然后运行 flutter packages upgrade
或在IntelliJ中更新包。
示例项目
在 example
文件夹中有一个相当不错的示例项目。查看它。否则,继续阅读以快速上手。
设置
首先,你应该通过初始化一个新的 Router
对象来定义一个 Router
对象:
final router = Router();
对你来说,将路由器存储为全局/静态可能很方便,这样你可以在应用程序的其他部分访问路由器。
实例化路由器后,你需要定义你的路由和路由处理器:
var usersHandler = Handler(handlerFunc: (BuildContext context, Map<String, dynamic> params) {
return UsersScreen(params["id"][0]);
});
void defineRoutes(Router router) {
router.define("/users/:id", handler: usersHandler);
// 你还可以定义路由过渡效果
// router.define("users/:id", handler: usersHandler, transitionType: TransitionType.inFromLeft);
}
在上面的例子中,路由器会拦截像 /users/1234
这样的路由,并将应用程序路由到 UsersScreen
,并将值 1234
作为参数传递给该屏幕。
导航
你可以通过 MaterialApp.onGenerateRoute
参数使用 Router
,方法是通过 Router.generator
函数。为此,将函数引用传递给 onGenerate
参数,例如:onGenerateRoute: router.generator
。
然后你可以使用 Navigator.push
,并且Flutter的路由机制会为你匹配路由。
你还可以手动推送到路由。要做到这一点:
router.navigateTo(context, "/users/1234", transition: TransitionType.fadeIn);
示例代码
以下是完整的示例代码:
/*
* fluro
* Created by Yakka
* https://theyakka.com
*
* Copyright (c) 2019 Yakka, LLC. All rights reserved.
* See LICENSE for distribution and usage details.
*/
import 'package:flutter/material.dart';
import 'components/app/app_component.dart';
void main() {
runApp(AppComponent());
}
解释
-
导入必要的库:
import 'package:flutter/material.dart';
导入Flutter的基本库。
-
定义主应用组件:
void main() { runApp(AppComponent()); }
运行
AppComponent
作为应用程序的根组件。 -
运行应用程序:
runApp(AppComponent());
更多关于Flutter路由管理插件sunny_fluro的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter路由管理插件sunny_fluro的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
sunny_fluro
是一个基于 Fluro
的 Flutter 路由管理插件,它提供了更简洁的 API 和更强大的功能来管理 Flutter 应用中的路由。Fluro
本身是一个流行的 Flutter 路由库,而 sunny_fluro
在此基础上进行了封装和优化,使得路由管理更加方便。
1. 安装 sunny_fluro
首先,你需要在 pubspec.yaml
文件中添加 sunny_fluro
依赖:
dependencies:
flutter:
sdk: flutter
sunny_fluro: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化 sunny_fluro
在你的 Flutter 应用中,首先需要初始化 sunny_fluro
。通常,你可以在 main.dart
文件中进行初始化。
import 'package:flutter/material.dart';
import 'package:sunny_fluro/sunny_fluro.dart';
void main() {
// 初始化 SunnyFluro
SunnyFluro.initialize();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Fluro Example',
// 使用 SunnyFluro 的路由生成器
onGenerateRoute: SunnyFluro.router.generator,
initialRoute: '/',
);
}
}
3. 定义路由
接下来,你需要定义应用中的路由。你可以使用 SunnyFluro.define
方法来定义路由。
import 'package:flutter/material.dart';
import 'package:sunny_fluro/sunny_fluro.dart';
class HomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home Page'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 导航到详情页
SunnyFluro.navigateTo(context, '/detail', transition: TransitionType.fadeIn);
},
child: Text('Go to Detail'),
),
),
);
}
}
class DetailPage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Detail Page'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 返回上一页
Navigator.pop(context);
},
child: Text('Go Back'),
),
),
);
}
}
void defineRoutes() {
SunnyFluro.define(
'/',
handler: Handler(
handlerFunc: (BuildContext? context, Map<String, dynamic> params) {
return HomePage();
},
),
);
SunnyFluro.define(
'/detail',
handler: Handler(
handlerFunc: (BuildContext? context, Map<String, dynamic> params) {
return DetailPage();
},
),
);
}
void main() {
SunnyFluro.initialize();
defineRoutes(); // 定义路由
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Fluro Example',
onGenerateRoute: SunnyFluro.router.generator,
initialRoute: '/',
);
}
}
4. 导航到其他页面
你可以使用 SunnyFluro.navigateTo
方法来导航到其他页面。这个方法支持传递参数和自定义转场动画。
SunnyFluro.navigateTo(
context,
'/detail',
transition: TransitionType.fadeIn, // 自定义转场动画
routeSettings: RouteSettings(arguments: {'id': 123}), // 传递参数
);
5. 处理路由参数
在目标页面中,你可以通过 ModalRoute.of(context)!.settings.arguments
来获取传递的参数。
class DetailPage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
final Map<String, dynamic> args = ModalRoute.of(context)!.settings.arguments as Map<String, dynamic>;
final int id = args['id'];
return Scaffold(
appBar: AppBar(
title: Text('Detail Page - $id'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.pop(context);
},
child: Text('Go Back'),
),
),
);
}
}