Flutter多租户页面管理插件devaloop_tenant_page的使用

Flutter多租户页面管理插件devaloop_tenant_page的使用

在本示例中,我们将展示如何使用 devaloop_tenant_page 插件来创建一个多租户页面。该插件可以帮助开发者快速搭建一个具有多租户功能的应用界面。

首先,确保你已经在项目的 pubspec.yaml 文件中添加了 devaloop_tenant_pagedevaloop_group_item 依赖项:

dependencies:
  devaloop_tenant_page: ^x.x.x
  devaloop_group_item: ^x.x.x
  flutter:
    sdk: flutter

接下来,我们来看一下如何在项目中使用 TenantPage 组件。

示例代码

import 'package:devaloop_group_item/group_item.dart';
import 'package:devaloop_tenant_page/tenant_page.dart';
import 'package:flutter/material.dart';

// 定义Tenant类
class Tenant {
  final String id;
  final String name;
  final String detail;
  final String owner;
  final List<Staff> staff;

  Tenant({
    required this.id,
    required this.name,
    required this.detail,
    required this.owner,
    this.staff = const [],
  });
}

// 定义Staff类
class Staff {
  final String name;
  final String username;
  final int id;

  Staff({
    required this.name,
    required this.username,
    required this.id,
  });
}

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: TenantPage(
        // 设置页面标题
        title: '快速收银员',
        subtitle: '快速收银员',
        tenantCategoryName: '店铺',
        // 添加租户的回调函数
        addTenant: (tenant) {},
        // 获取租户列表的异步函数
        tenants: () async {
          await Future.delayed(const Duration(seconds: 5));
          return [
            Tenant(
              id: '001',
              name: '现代繁荣商店',
              detail: '厨房用具及家居用品店',
              owner: 'user@gmail.com',
              staff: [
                Staff(
                  name: 'Budi',
                  username: 'budi@gmail.com',
                  id: 1001,
                ),
              ],
            ),
            Tenant(
              id: '001',
              name: '永续商店',
              detail: '电器商店',
              owner: 'user2@gmail.com',
            ),
            Tenant(
              id: '001',
              name: '繁荣商店',
              detail: '五金工具店',
              owner: 'user@gmail.com',
            ),
          ];
        },
        // 当前登录用户的用户名和详情
        userName: 'user@gmail.com',
        userDetail: 'Google 账号',
        // 登出时的回调函数
        onLoggingOut: () {},
        // 租户所有者访问菜单
        ownerAccessMenu: (tenant) => [
          GroupContent(
            title: '报表',
            subtitle: '报表',
            leading: const Icon(Icons.summarize),
          ),
          GroupContent(
            title: '添加收银员',
            subtitle: '添加收银员',
            leading: const Icon(Icons.people),
          ),
        ],
        // 租户的通用菜单
        menu: (tenant) => [
          GroupItem(
            title: '交易',
            contents: [
              GroupContent(
                title: '销售',
                subtitle: '销售',
                leading: const Icon(Icons.sell),
              ),
            ],
          ),
          GroupItem(
            title: '库存',
            contents: [
              GroupContent(
                title: '库存',
                subtitle: '库存',
                leading: const Icon(Icons.warehouse),
              ),
            ],
          ),
        ],
        // 更新租户信息的回调函数
        updateTenant: (Tenant tenant) {},
        // 删除租户的回调函数
        removeTenant: (Tenant tenant) {},
      ),
    );
  }
}

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

1 回复

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


devaloop_tenant_page 是一个用于 Flutter 应用的多租户页面管理插件。它允许你在同一个应用中为不同的租户(如不同的用户、公司或组织)提供不同的页面布局和配置。这样可以实现高度可定制的用户体验,同时保持代码的简洁和可维护性。

以下是使用 devaloop_tenant_page 插件的基本步骤和示例:

1. 添加依赖

首先,在你的 pubspec.yaml 文件中添加 devaloop_tenant_page 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  devaloop_tenant_page: ^1.0.0  # 请根据实际情况填写最新版本

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

2. 初始化插件

在你的 Flutter 应用启动时,初始化 devaloop_tenant_page 插件。通常在 main.dart 文件中进行初始化。

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化多租户页面管理插件
  await TenantPageManager.initialize(
    tenantConfigurations: {
      'tenant1': TenantConfiguration(
        homePage: Tenant1HomePage(),
        routes: {
          '/tenant1/settings': (context) => Tenant1SettingsPage(),
        },
      ),
      'tenant2': TenantConfiguration(
        homePage: Tenant2HomePage(),
        routes: {
          '/tenant2/settings': (context) => Tenant2SettingsPage(),
        },
      ),
    },
    defaultTenant: 'tenant1',  // 默认租户
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Multi-Tenant App',
      home: TenantPageManager.getHomePage(),
      onGenerateRoute: TenantPageManager.generateRoute,
    );
  }
}

3. 定义租户页面

为每个租户定义不同的页面。例如:

class Tenant1HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Tenant 1 Home')),
      body: Center(child: Text('Welcome to Tenant 1 Home Page')),
    );
  }
}

class Tenant1SettingsPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Tenant 1 Settings')),
      body: Center(child: Text('Tenant 1 Settings Page')),
    );
  }
}

class Tenant2HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Tenant 2 Home')),
      body: Center(child: Text('Welcome to Tenant 2 Home Page')),
    );
  }
}

class Tenant2SettingsPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Tenant 2 Settings')),
      body: Center(child: Text('Tenant 2 Settings Page')),
    );
  }
}

4. 切换租户

在应用中,你可以根据用户的选择或其他条件动态切换租户:

void switchTenant(String tenantId) {
  TenantPageManager.switchTenant(tenantId);
}

5. 获取当前租户信息

你也可以获取当前的租户信息:

String currentTenantId = TenantPageManager.currentTenantId;
回到顶部