Flutter通用路由管理插件universal_router的使用
Flutter通用路由管理插件universal_router的使用
universal_router
pub package
该插件是 Navigator 2.0 的实现,并支持路由表概念。
特性
- 易于使用。
- 支持路由表概念。
- 可以设置多种参数。
安装
在你的 pubspec.yaml
文件中添加以下依赖:
dependencies:
universal_router: ^[最新版本]
使用
导入
import 'package:universal_router/route.dart';
简单示例
以下是一个简单的示例代码,展示如何使用 universal_router
来管理路由。
import 'package:flutter/material.dart';
import 'package:universal_router/route.dart';
void main() {
// 初始化路由实例
RouteInstance(
routePath: '',
title: 'Home',
pageBuilder: (_, __) async => const Home());
// 启动应用
runApp(MyApp());
}
// 主页组件
class Home extends StatelessWidget {
const Home({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return TextButton(
onPressed: () => {UniversalRouter.changePath('somewhere')}, // 切换到另一个页面
child: const Text('go to somewhere else'),
);
}
}
// 应用根组件
class MyApp extends StatelessWidget {
MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp.router(
routerDelegate: UniversalRouter.routerDelegate, // 路由委托
routeInformationProvider: UniversalRouter.routeInformationProvider, // 路由信息提供者
routeInformationParser: UniversalRouter.routerInformationParser, // 路由信息解析器
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
);
}
}
更多关于Flutter通用路由管理插件universal_router的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter通用路由管理插件universal_router的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
universal_router
是一个用于 Flutter 的通用路由管理插件,它提供了一种简单且灵活的方式来管理应用程序中的导航。通过 universal_router
,你可以轻松地定义路由、处理深层链接、传递参数等。
安装
首先,你需要在 pubspec.yaml
文件中添加 universal_router
依赖:
dependencies:
flutter:
sdk: flutter
universal_router: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
基本用法
1. 定义路由
你可以通过 UniversalRouter
类来定义路由。每个路由可以映射到一个页面或一个处理函数。
import 'package:flutter/material.dart';
import 'package:universal_router/universal_router.dart';
class HomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Home')),
body: Center(child: Text('Home Page')),
);
}
}
class AboutPage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('About')),
body: Center(child: Text('About Page')),
);
}
}
final router = UniversalRouter(
routes: {
'/': (context) => HomePage(),
'/about': (context) => AboutPage(),
},
);
2. 使用 UniversalRouter
进行导航
你可以在应用程序的 MaterialApp
或 CupertinoApp
中使用 UniversalRouter
来管理路由。
import 'package:flutter/material.dart';
import 'package:universal_router/universal_router.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Universal Router Example',
onGenerateRoute: router.generator,
initialRoute: '/',
);
}
}
3. 导航到其他页面
你可以使用 Navigator.pushNamed
或 UniversalRouter
提供的方法来导航到其他页面。
Navigator.pushNamed(context, '/about');
4. 传递参数
你可以通过路由传递参数,并在目标页面中获取这些参数。
final router = UniversalRouter(
routes: {
'/': (context) => HomePage(),
'/about': (context) {
final args = ModalRoute.of(context)!.settings.arguments as Map<String, dynamic>;
return AboutPage(args: args);
},
},
);
// 导航时传递参数
Navigator.pushNamed(context, '/about', arguments: {'name': 'Flutter'});
// 在 AboutPage 中获取参数
class AboutPage extends StatelessWidget {
final Map<String, dynamic> args;
AboutPage({required this.args});
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('About')),
body: Center(child: Text('About Page: ${args['name']}')),
);
}
}
处理深层链接
universal_router
还支持处理深层链接。你可以通过定义路由来处理特定的 URL 模式。
final router = UniversalRouter(
routes: {
'/': (context) => HomePage(),
'/about': (context) => AboutPage(),
'/user/:id': (context) {
final id = UniversalRouter.of(context).params['id'];
return UserPage(id: id);
},
},
);
// 导航到深层链接
Navigator.pushNamed(context, '/user/123');
// 在 UserPage 中获取参数
class UserPage extends StatelessWidget {
final String id;
UserPage({required this.id});
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('User $id')),
body: Center(child: Text('User Page: $id')),
);
}
}