Flutter路由注解插件yyy_route_annotation的使用
Flutter路由注解插件yyy_route_annotation的使用
yyy_route_annotation
插件提供了一个通过注解快速生成路由映射的功能。当你收到通知或深度链接时,可以使用URL跳转到相应的页面。
使用
添加依赖包到dependencies
在项目的pubspec.yaml
文件中添加依赖包:
environment:
sdk: '>=2.12.0 <3.0.0'
dependencies:
yyy_route_annotation: ^0.0.2
dev_dependencies:
build_runner: ^2.0.0
下载依赖包:
flutter packages get
添加注解
首先导入yyy_route_annotation
库:
import 'package:yyy_route_annotation/route_serializable.dart';
然后使用注解来标记页面和主函数:
// 标记一个页面
[@RoutePage](/user/RoutePage)()
class TestPage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Container();
}
}
// 标记主函数
[@RouteMain](/user/RouteMain)()
void main() {
runApp(MyApp());
}
运行构建命令生成路由映射:
flutter packages pub run build_runner build
配置MaterialApp
在你的MaterialApp
配置中,使用生成的路由映射:
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
routes: allRoutes, // 使用生成的路由映射
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
跳转页面
使用RouteManager
来根据URL跳转页面:
RouteManager.push(context, "yyy://page/one_page?param_one=xx&two=xx");
URL参数使用下划线(_
),而Dart类参数使用驼峰命名法(CamelCase
)。
完整示例代码
以下是一个完整的示例代码,展示了如何使用yyy_route_annotation
插件来管理路由:
import 'package:flutter/material.dart';
import 'package:yyy_route_annotation/yyy_route_annotation.dart';
import 'main.all.dart';
// 标记一个页面
[@RoutePage](/user/RoutePage)()
class TestPage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Container(); // 页面内容可以根据需要修改
}
}
// 标记主函数
[@RouteMain](/user/RouteMain)()
void main() {
runApp(Home());
}
// 主应用
class Home extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: "RouteTest",
routes: allRoutes, // 使用生成的路由映射
);
}
}
更多关于Flutter路由注解插件yyy_route_annotation的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter路由注解插件yyy_route_annotation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
yyy_route_annotation
是一个用于 Flutter 的路由注解插件,它可以帮助开发者通过注解的方式简化路由的配置和管理。以下是如何使用 yyy_route_annotation
的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 yyy_route_annotation
和 yyy_route_generator
的依赖。
dependencies:
flutter:
sdk: flutter
yyy_route_annotation: ^1.0.0
dev_dependencies:
build_runner: ^2.1.0
yyy_route_generator: ^1.0.0
2. 创建路由页面
在 Flutter 中创建页面时,使用 @YyyRoute
注解来标记该页面。
import 'package:flutter/material.dart';
import 'package:yyy_route_annotation/yyy_route_annotation.dart';
@YyyRoute("/home")
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home Page'),
),
body: Center(
child: Text('Welcome to the Home Page!'),
),
);
}
}
@YyyRoute("/profile")
class ProfilePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Profile Page'),
),
body: Center(
child: Text('This is your Profile Page!'),
),
);
}
}
3. 生成路由代码
使用 build_runner
生成路由代码。在终端中运行以下命令:
flutter pub run build_runner build
这将生成一个包含路由配置的 .g.dart
文件。
4. 配置路由
在 main.dart
文件中,使用生成的路由配置来设置 MaterialApp
的路由。
import 'package:flutter/material.dart';
import 'package:yyy_route_generator/yyy_route_generator.dart';
import 'router.gr.dart'; // 生成的路由文件
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
onGenerateRoute: YyyRouteGenerator().onGenerateRoute,
initialRoute: '/home',
);
}
}
5. 导航到路由页面
你可以使用 Navigator.pushNamed
或 Navigator.pushNamed
来导航到指定的路由页面。
Navigator.pushNamed(context, '/profile');
6. 处理参数传递
如果你的路由页面需要传递参数,可以在路由注解中指定参数类型,并在页面中接收参数。
@YyyRoute("/details")
class DetailsPage extends StatelessWidget {
final String id;
DetailsPage({required this.id});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Details Page'),
),
body: Center(
child: Text('Details for item $id'),
),
);
}
}
在导航时传递参数:
Navigator.pushNamed(context, '/details', arguments: {'id': '123'});