Flutter路由管理插件routly的使用

Flutter路由管理插件routly的使用

Routly是一个个人项目,旨在自我训练数据结构和算法。其主要目标是利用二叉树或树算法来高效地识别URL路径匹配。

示例

动态ID匹配

  • 路径模板: <code>/users/{id}</code>
  • 示例路径: <code>/users/thisIsID10</code>

严格整数ID匹配

  • 路径模板: <code>/users/{id:int}</code>
  • 示例路径: <code>/users/1323</code>

完整示例代码

以下是一个完整的示例代码,展示了如何在Flutter应用中使用routly进行路由管理:

import 'package:flutter/material.dart';
import 'package:routly/routly.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Routly Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      initialRoute: '/',
      onGenerateRoute: (settings) {
        return Router.generateRoute(settings);
      },
    );
  }
}

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home Page'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.pushNamed(context, '/users/thisIsID10');
          },
          child: Text('Go to User Page'),
        ),
      ),
    );
  }
}

class UserPage extends StatelessWidget {
  final String userId;

  UserPage({required this.userId});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('User Page'),
      ),
      body: Center(
        child: Text('User ID: $userId'),
      ),
    );
  }
}

// 配置路由
Router.register('/users/{id}', (context, params) => UserPage(userId: params['id']));

代码解释

  1. 导入必要的包:

    import 'package:flutter/material.dart';
    import 'package:routly/routly.dart';
    
  2. 定义主应用类:

    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Routly Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          initialRoute: '/',
          onGenerateRoute: (settings) {
            return Router.generateRoute(settings);
          },
        );
      }
    }
    
  3. 定义首页组件:

    class HomePage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Home Page'),
          ),
          body: Center(
            child: ElevatedButton(
              onPressed: () {
                Navigator.pushNamed(context, '/users/thisIsID10');
              },
              child: Text('Go to User Page'),
            ),
          ),
        );
      }
    }
    
  4. 定义用户页面组件:

    class UserPage extends StatelessWidget {
      final String userId;
    
      UserPage({required this.userId});
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('User Page'),
          ),
          body: Center(
            child: Text('User ID: $userId'),
          ),
        );
      }
    }
    
  5. 配置路由:

    Router.register('/users/{id}', (context, params) => UserPage(userId: params['id']));
    

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

1 回复

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


Routly 是一个用于 Flutter 的路由管理插件,它可以帮助开发者更轻松地管理和导航应用程序中的路由。Routly 提供了一种声明式的方式来定义路由,并且支持路由参数传递、嵌套路由、路由守卫等功能。

以下是使用 Routly 的基本步骤和示例:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 routly 依赖:

dependencies:
  flutter:
    sdk: flutter
  routly: ^0.1.0  # 请使用最新版本

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

2. 定义路由

Routly 中,你可以通过定义一个 RoutlyRouter 来管理路由。你可以使用 RoutlyRoute 来定义每个路由。

import 'package:flutter/material.dart';
import 'package:routly/routly.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Routly Example',
      home: RoutlyRouter(
        initialRoute: '/',
        routes: [
          RoutlyRoute(
            path: '/',
            builder: (context, params) => HomeScreen(),
          ),
          RoutlyRoute(
            path: '/details/:id',
            builder: (context, params) => DetailsScreen(id: params['id']),
          ),
        ],
      ),
    );
  }
}

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Routly.of(context).push('/details/123');
          },
          child: Text('Go to Details'),
        ),
      ),
    );
  }
}

class DetailsScreen extends StatelessWidget {
  final String id;

  DetailsScreen({required this.id});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Details $id'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Routly.of(context).pop();
          },
          child: Text('Go back'),
        ),
      ),
    );
  }
}

3. 路由导航

Routly 中,你可以使用 Routly.of(context).push('route') 来导航到指定的路由。你也可以使用 pop() 返回到上一个路由。

Routly.of(context).push('/details/123');
Routly.of(context).pop();

4. 路由参数

你可以通过定义路由路径中的参数来传递数据。例如,在路径 /details/:id 中,id 是一个参数。你可以在 builder 中通过 params 来访问这些参数。

RoutlyRoute(
  path: '/details/:id',
  builder: (context, params) => DetailsScreen(id: params['id']),
);

5. 嵌套路由

Routly 支持嵌套路由,你可以在一个路由中定义子路由。

RoutlyRoute(
  path: '/parent',
  builder: (context, params) => ParentScreen(),
  children: [
    RoutlyRoute(
      path: '/child',
      builder: (context, params) => ChildScreen(),
    ),
  ],
);

6. 路由守卫

你可以使用 beforeEnter 回调来实现路由守卫,例如检查用户是否已登录。

RoutlyRoute(
  path: '/protected',
  builder: (context, params) => ProtectedScreen(),
  beforeEnter: (context, params) async {
    if (!isLoggedIn) {
      Routly.of(context).push('/login');
      return false; // 阻止进入该路由
    }
    return true; // 允许进入该路由
  },
);
回到顶部