Flutter通用路由管理插件universal_router的使用

发布于 1周前 作者 zlyuanteng 来自 Flutter

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

1 回复

更多关于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 进行导航

你可以在应用程序的 MaterialAppCupertinoApp 中使用 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.pushNamedUniversalRouter 提供的方法来导航到其他页面。

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')),
    );
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!