Flutter快速路由管理插件quick_router的使用

Flutter快速路由管理插件quick_router的使用

pub package Alt Text

一个用于Flutter的快速路由机制,用于处理紧急的深层链接。

开始使用

导入该包并创建尽可能多的QuickRoute小部件。它们可以嵌套,这样它们将在父级路由分析路径时开始分析。

安装

flutter pub add quick_router

使用

在这个例子中,onGenerateRoute被使用,但QuickRoute只需要一个path(URL),并且它将向下分析路径的段。

void main() {
  runApp(MaterialApp( 
    onGenerateRoute: (settings) {
        String url = settings.name; // URL作为基础...
        return QuickRoute(path: url, match:"/library", child:Column(children:[
            QuickRoute(match:"/horror", child:Text("Horror books")), // 将在/library/horror运行
            QuickRoute(match:"/drama", child:Text("Drama books")), // 将在/library/drama运行
        ]));
    }
  )); 
}

单个组件

QuickRoute是一个如果具有path则会作为主要路由的小部件。任何子QuickRoute将从父级路由匹配的路径段开始分析,并继续进行。

每个路由都会创建一个可以通过调用context.quickRouteContext?访问的上下文,并且会暴露一个获取参数的方法param

方法T param<T>(String paramKey)允许你将参数强制转换为特定类型。

获取URL参数

你可以通过构建上下文获取这些参数,如下所示:

  @override
  Widget build(BuildContext context) {
    // 如果URL是/some/url/:someKey/etc/:count
    // 并且实际URL是:/some/url/magic/etc/123
    var myParamValue = context.quickRouteContext?.param<String>("someKey"); // = magic
    var myParamValue2 = context.quickRouteContext?.param<int>("count"); // = 123
    return Text("child param: $myParamValue;");
  }

有三种类型的参数:

  1. URL段 这种形式如/some/:wildcard/path,在这种情况下wildcard将是一个参数,匹配斜杠之间的任何内容。
// 假设匹配模式是:/some/awesome/:wildcard/path
// 而路径是:/some/awesome/impressive/path
var myParamValue = context.quickRouteContext?.param<String>("wildcard"); // == "impressive"
  1. 查询字符串 查询字符串部分中的任何内容都将添加到带有?前缀的参数集合中。因此/some/url?nice=string&foo=bar将添加?nice?foo到参数中。
// 假设匹配模式是:/some/awesome/path
// 而路径是:/some/awesome/path?and=some&query=value
var myParamValue = context.quickRouteContext?.param<String>("?query"); // == "value"
  1. 哈希 与查询字符串相同,但适用于哈希值:/some/path#foo=bar&batman=forever将包含#foo#batman在参数中。
// 假设匹配模式是:/some/awesome/path
// 而路径是:/some/awesome/path#and=some&query=value
var myParamValue = context.quickRouteContext?.param<String>("#query"); // == "value"

更多关于Flutter快速路由管理插件quick_router的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter快速路由管理插件quick_router的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


quick_router 是一个用于 Flutter 应用的快速路由管理插件,它简化了路由配置和导航的过程。通过使用 quick_router,开发者可以更方便地管理应用中的页面跳转和路由逻辑。

安装

首先,你需要在 pubspec.yaml 文件中添加 quick_router 依赖:

dependencies:
  flutter:
    sdk: flutter
  quick_router: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

基本用法

  1. 创建路由表

    首先,你需要创建一个路由表,将路由名称映射到相应的页面组件。

    import 'package:flutter/material.dart';
    import 'package:quick_router/quick_router.dart';
    
    class HomePage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(title: Text('Home')),
          body: Center(
            child: ElevatedButton(
              onPressed: () {
                QuickRouter.of(context).push('/details');
              },
              child: Text('Go to Details'),
            ),
          ),
        );
      }
    }
    
    class DetailsPage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(title: Text('Details')),
          body: Center(
            child: ElevatedButton(
              onPressed: () {
                QuickRouter.of(context).pop();
              },
              child: Text('Go Back'),
            ),
          ),
        );
      }
    }
    
    final routes = {
      '/': (context) => HomePage(),
      '/details': (context) => DetailsPage(),
    };
    
  2. 配置路由

    MaterialApp 中使用 QuickRouter 来配置路由。

    import 'package:flutter/material.dart';
    import 'package:quick_router/quick_router.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'QuickRouter Demo',
          initialRoute: '/',
          onGenerateRoute: QuickRouter.generateRoute(routes),
        );
      }
    }
    
  3. 导航

    使用 QuickRouter.of(context) 来进行页面跳转。

    // 跳转到详情页
    QuickRouter.of(context).push('/details');
    
    // 返回上一页
    QuickRouter.of(context).pop();
    
    // 替换当前页面
    QuickRouter.of(context).replace('/newPage');
    
    // 跳转到新页面并清除所有历史记录
    QuickRouter.of(context).pushAndRemoveUntil('/newPage');
    

高级用法

  1. 传递参数

    你可以在跳转页面时传递参数,并在目标页面中获取这些参数。

    // 跳转时传递参数
    QuickRouter.of(context).push('/details', arguments: {'id': 123});
    
    // 在目标页面中获取参数
    class DetailsPage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        final args = QuickRouter.of(context).arguments as Map<String, dynamic>;
        final id = args['id'];
    
        return Scaffold(
          appBar: AppBar(title: Text('Details $id')),
          body: Center(
            child: ElevatedButton(
              onPressed: () {
                QuickRouter.of(context).pop();
              },
              child: Text('Go Back'),
            ),
          ),
        );
      }
    }
    
  2. 中间件

    quick_router 支持路由中间件,你可以在跳转前执行一些逻辑,例如检查用户是否登录。

    final routes = {
      '/': (context) => HomePage(),
      '/details': (context) => DetailsPage(),
    };
    
    final middleware = [
      (context, route) {
        if (route == '/details') {
          // 检查用户是否登录
          if (!isLoggedIn) {
            QuickRouter.of(context).push('/login');
            return false; // 阻止跳转
          }
        }
        return true; // 允许跳转
      }
    ];
    
    onGenerateRoute: QuickRouter.generateRoute(routes, middleware: middleware),
回到顶部