Flutter功能扩展插件vyuh_feature_system的使用

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

Flutter功能扩展插件vyuh_feature_system的使用

Vyuh Feature System 🔧

vyuh_feature_system

vyuh_feature_system 是为Vyuh框架提供的系统特性包,提供了构建CMS驱动的Flutter应用所需的基本内容类型、动作、条件和服务。

特性 ✨

内容类型 📝

路由 🧭

  • 页面路由:具有多种布局的全屏页面

    • 默认页面布局(带app bar和body)
    • 标签页布局(用于分段内容)
    • 单项布局(用于集中内容)
    • 动态路由条件布局
  • 对话框路由:具有可自定义内容的模态对话框

    • 默认对话框布局
    • 自定义对话框布局
import 'package:vyuh_feature_system/vyuh_feature_system.dart' as system;

// 创建一个页面路由
system.Route(
  builder: (context) => MyPage(),
  type: system.RouteType.page,
);

// 创建一个对话框路由
system.Route(
  builder: (context) => MyDialog(),
  type: system.RouteType.dialog,
);

卡片 🎴

  • 默认卡片:带有标题、内容和操作的标准卡片布局
  • 列表项卡片:适用于列表视图的紧凑布局
  • 按钮卡片:具有触发操作的交互式卡片
  • 条件卡片:基于条件的动态布局
import 'package:vyuh_feature_system/vyuh_feature_system.dart' as system;

// 创建一个默认卡片
system.Card(
  title: '标题',
  content: '内容',
  actions: [
    system.Action(
      type: system.ActionType.navigate,
      payload: '/path/to/next/page',
    ),
  ],
);

组 📦

  • 轮播:水平滚动的项目组

    • 支持自动播放
    • 导航控制
    • 自定义过渡效果
  • 网格:响应式的网格布局

    • 可配置的列数
    • 响应断点
    • 自定义项目间距
  • 列表:项目的垂直列表

    • 可配置的间距
    • 支持分隔符
    • 自定义项目布局
import 'package:vyuh_feature_system/vyuh_feature_system.dart' as system;

// 创建一个轮播组件
system.Carousel(
  items: [
    system.Item(
      child: Text('Item 1'),
    ),
    system.Item(
      child: Text('Item 2'),
    ),
  ],
);

其他项目 🔧

  • 可移植文本:具有自定义标记的富文本内容

    • 操作调用标记
    • 具有自定义样式的链接标记
    • 自定义块样式
  • 空内容占位符

  • 未知内容占位符

  • 基于条件的内容

import 'package:vyuh_feature_system/vyuh_feature_system.dart' as system;

// 创建一个包含丰富文本的卡片
system.Card(
  title: '标题',
  content: system.PortableText(
    content: [
      {
        "type": "paragraph",
        "content": [
          {"type": "text", "value": "这是丰富的文本内容。"},
        ],
      },
    ],
  ),
);

每个内容类型都可以通过实现 LayoutConfiguration<T> 并在功能描述符中注册布局来扩展。

动作 🎯

该系统特性包提供了一些内置的动作,用于导航、UI控制和系统操作:

导航动作 🧭

  • NavigateAction:导航到新的路由,并可选地传递查询参数
  • NavigateBackAction:返回到历史记录中的上一个路由
  • NavigateReplaceAction:替换当前路由为一个新的路由
  • OpenUrlAction:在浏览器或应用中打开外部URL
import 'package:vyuh_feature_system/vyuh_feature_system.dart' as system;

// 使用NavigateAction导航到新页面
system.NavigateAction(
  path: '/new_page',
).execute(context);

UI动作 🎨

  • AlertAction:显示不同类型的消息(成功、错误、信息)的snackbar
  • DrawerAction:显示或隐藏导航抽屉
  • OpenInDialogAction:在模态对话框中显示内容
  • ToggleThemeAction:切换亮暗主题
import 'package:vyuh_feature_system/vyuh_feature_system.dart' as system;

// 使用AlertAction显示消息
system.AlertAction(
  message: '这是一条消息',
  type: system.AlertType.success,
).execute(context);

系统动作 ⚙️

  • DelayAction:在执行动作之间添加定时延迟
  • RouteRefreshAction:刷新当前路由的内容
  • RestartAction:重启整个应用程序
import 'package:vyuh_feature_system/vyuh_feature_system.dart' as system;

// 使用RestartAction重启应用
system.RestartAction().execute();

条件 🔄

  • 布尔:简单的布尔条件
  • 功能标志:基于条件切换功能
  • 屏幕尺寸:基于屏幕尺寸的响应式布局
  • 当前平台:特定于平台的内容
  • 主题模式:基于主题的内容
  • 用户认证:基于认证状态的内容
import 'package:vyuh_feature_system/vyuh_feature_system.dart' as system;

// 使用屏幕尺寸条件
if (system.BreakpointService().isMobile) {
  // 移动端布局
} else if (system.BreakpointService().isTablet) {
  // 平板布局
} else {
  // 桌面布局
}

内容修饰符

内容修饰符允许你在渲染之前对内容进行转换:

import 'package:vyuh_feature_system/vyuh_feature_system.dart' as system;

// 应用基于主题的修改
system.ThemeModifier(
  light: system.LightContent(),
  dark: system.DarkContent(),
);

API处理器

配置API内容处理:

import 'package:vyuh_feature_system/vyuh_feature_system.dart' as system;

final apiConfig = system.JsonPathApiConfiguration(
  baseUrl: 'https://api.example.com',
  paths: {
    'products': '\$.items[*]',
    'categories': '\$.categories[*]',
  },
);

服务 🛠️

断点服务

处理响应式布局:

import 'package:vyuh_feature_system/vyuh_feature_system.dart' as system;

final breakpointService = vyuh.di.get<system.BreakpointService>();

system.Observer(
  builder: (_) {
    if (breakpointService.isMobile) {
      return MobileLayout();
    }
    if (breakpointService.isTablet) {
      return TabletLayout();
    }
    return DesktopLayout();
  },
);

// 设置自定义断点
breakpointService.setBreakpoints(
  mobile: 480,
  tablet: 768,
  desktop: 1024,
);

主题服务

管理应用的主题和模式:

import 'package:vyuh_feature_system/vyuh_feature_system.dart' as system;

// 获取主题服务
final themeService = vyuh.di.get<system.ThemeService>();

// 切换主题
system.ToggleThemeAction().execute();

// 观察当前主题模式
system.Observer(
  builder: (_) {
    final mode = themeService.currentMode.value;
    return Text('当前主题: $mode');
  },
);

内容扩展

注册内容类型和生成器:

import 'package:vyuh_feature_system/vyuh_feature_system.dart' as system;

final feature = system.FeatureDescriptor(
  name: 'my_feature',
  extensions: [
    system.ContentExtensionDescriptor(
      contents: [
        // 你的内容描述符
      ],
      contentBuilders: [
        system.Route.contentBuilder,
        system.Card.contentBuilder,
        system.Group.contentBuilder,
      ],
      contentModifiers: [
        system.ThemeModifier.modifier,
      ],
    ),
  ],
);

系统路由

该系统特性包提供了内置路由:

错误路由

  • 路径: /__system_error__
  • 目的: 显示系统错误及其堆栈跟踪
  • 使用: 框架自动用于错误处理

导航路由

  • 路径: /__system_navigate__
  • 目的: 处理外部导航(URLs,深度链接)
  • 使用: 导航动作自动使用

这些路由在使用系统特性时会自动注册,为您的应用提供一致的错误处理和导航行为。

安装 📦

在您的 pubspec.yaml 文件中添加以下内容:

dependencies:
  vyuh_feature_system: any

更多关于Flutter功能扩展插件vyuh_feature_system的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter功能扩展插件vyuh_feature_system的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中集成和使用vyuh_feature_system插件的示例代码。假设vyuh_feature_system是一个用于功能扩展的Flutter插件,这里是一个基本的集成和使用指南。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  vyuh_feature_system: ^最新版本号

确保替换最新版本号为插件的当前最新版本。

2. 安装依赖

在命令行中运行以下命令来安装依赖:

flutter pub get

3. 导入插件

在你的Dart文件中导入插件:

import 'package:vyuh_feature_system/vyuh_feature_system.dart';

4. 初始化插件

在你的应用的主入口文件(通常是main.dart)中初始化插件:

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  VyuhFeatureSystem.instance.initialize(); // 假设插件有初始化方法
  runApp(MyApp());
}

5. 使用插件功能

假设vyuh_feature_system插件提供了一些功能,比如检查某个功能是否启用,或者启用/禁用某个功能。以下是如何使用这些功能的示例代码:

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

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  VyuhFeatureSystem.instance.initialize();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  bool isFeatureEnabled = false;

  @override
  void initState() {
    super.initState();
    // 检查某个功能是否启用
    VyuhFeatureSystem.instance.isFeatureEnabled('some_feature_name').then((result) {
      setState(() {
        isFeatureEnabled = result;
      });
    });
  }

  void toggleFeature() async {
    // 启用或禁用某个功能
    bool newStatus = await VyuhFeatureSystem.instance.toggleFeature('some_feature_name');
    setState(() {
      isFeatureEnabled = newStatus;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Feature Toggle Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Feature Status: ${isFeatureEnabled ? 'Enabled' : 'Disabled'}',
              style: TextStyle(fontSize: 24),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: toggleFeature,
              child: Text('Toggle Feature'),
            ),
          ],
        ),
      ),
    );
  }
}

注意事项

  1. 插件方法:上述代码中的initialize, isFeatureEnabled, 和 toggleFeature 是假设的方法。实际使用时,请参考vyuh_feature_system插件的官方文档了解正确的方法名和用法。

  2. 权限:如果插件需要某些权限(例如访问设备存储),请确保在AndroidManifest.xmlInfo.plist文件中正确声明这些权限。

  3. 错误处理:在实际应用中,应添加适当的错误处理逻辑,以处理插件调用失败的情况。

  4. 插件版本:确保你使用的是插件的最新稳定版本,以获取最新的功能和修复。

通过以上步骤,你应该能够在Flutter项目中成功集成并使用vyuh_feature_system插件。

回到顶部