Flutter可视化监控插件hisma_visual_monitor的使用

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

Flutter可视化监控插件hisma_visual_monitor的使用

简介

hisma_visual_monitor 是一个用于 Hisma(一种分层状态机实现)的可视化监控插件。它通过定义的监控 API 注册监控创建函数,并在状态机创建或其活动状态发生变化时调用这些监控器。

此监控器将状态机信息转换并发送到 visma 应用程序(visma),后者将其渲染到交互式的 Web 用户界面中。


功能

通过结合 visma 和实际的 Flutter 示例应用程序,可以直观地看到 hisma_visual_monitor 的效果。左侧面板中的状态机图会实时更新,无论触发状态变化的事件来自应用程序还是 visma 用户界面:

fb_auth_hisma_example.gif


使用步骤

1. 创建状态机

首先,需要创建你想要监控的状态机。例如,这里我们创建了一个简单的灯光控制状态机。

import 'package:hisma/hisma.dart';
import 'package:hisma_visual_monitor/src/visual_monitor/client/visual_monitor.dart';

// 定义状态、事件和转移类型
enum S { on, off }
enum E { turnOn, turnOff }
enum T { toOn, toOff }

// 创建状态机
Machine<S, E, T> createLightMachine({
  List<Region<S, E, T, dynamic>>? regions,
}) =>
    Machine<S, E, T>(
      name: 'lightMachine',
      events: E.values,
      initialStateId: S.off,
      states: {
        S.off: State(
          etm: {
            E.turnOn: [T.toOn],
          },
          onEntry: Action(
            description: 'Turning off.',
            action: (machine, dynamic arg) async => print('OFF'),
          ),
        ),
        S.on: State(
          etm: {
            E.turnOff: [T.toOff],
          },
          regions: regions,
          onEntry: Action(
            description: 'Turning on.',
            action: (machine, dynamic arg) async => print('ON'),
          ),
        ),
      },
      transitions: {
        T.toOn: Transition(to: S.on),
        T.toOff: Transition(to: S.off),
      },
    );

// 初始化状态机实例
final lightMachine = createLightMachine();

2. 设置可视化监控器

在程序启动时,在 main 函数中设置可视化监控器。

void main() async {
  // 注册可视化监控器
  Machine.monitorCreators = [
    (machine) => VisualMonitor(machine),
  ];

  // 启动状态机
  await lightMachine.start();
  await play();
}

配置远程连接

如果你想连接到运行在不同端口或远程主机上的 visma 实例,可以指定 hostport 参数:

Machine.monitorCreators = [
  (machine) => VisualMonitor(
        machine,
        host: '192.168.1.2', // 替换为你的 visma 地址
        port: 1111,          // 替换为你的 visma 端口
      ),
];

自定义机器名称和域名

为了更好地组织状态机,可以通过设置 VisualMonitor.hostnameVisualMonitor.domain 来自定义它们的名称和域名:

VisualMonitor.hostname = 'testMachine1';
VisualMonitor.domain = 'groupA';

这允许你在 visma 中按层次结构组织状态机。例如,下图展示了 visma 界面如何根据主机名和域名对状态机进行分组:

hisma_visual_monitor_domain.png


3. 运行示例代码

以下是一个完整的示例代码,展示如何使用 hisma_visual_monitor

// ignore_for_file: avoid_print

import 'package:hisma/hisma.dart';
import 'package:hisma_visual_monitor/src/visual_monitor/client/visual_monitor.dart';

Future<void> main() async {
  // 注册可视化监控器
  Machine.monitorCreators = [
    (machine) => VisualMonitor(machine),
  ];

  // 启动状态机
  await lightMachine.start();
  await play();
}

// 定义状态、事件和转移类型
enum S { on, off }
enum E { turnOn, turnOff }
enum T { toOn, toOff }

// 创建状态机
Machine<S, E, T> createLightMachine({
  List<Region<S, E, T, dynamic>>? regions,
}) =>
    Machine<S, E, T>(
      name: 'lightMachine',
      events: E.values,
      initialStateId: S.off,
      states: {
        S.off: State(
          etm: {
            E.turnOn: [T.toOn],
          },
          onEntry: Action(
            description: 'Turning off.',
            action: (machine, dynamic arg) async => print('OFF'),
          ),
        ),
        S.on: State(
          etm: {
            E.turnOff: [T.toOff],
          },
          regions: regions,
          onEntry: Action(
            description: 'Turning on.',
            action: (machine, dynamic arg) async => print('ON'),
          ),
        ),
      },
      transitions: {
        T.toOn: Transition(to: S.on),
        T.toOff: Transition(to: S.off),
      },
    );

// 初始化状态机实例
final lightMachine = createLightMachine();

// 模拟事件触发
Future<void> play() async {
  while (true) {
    await Future<void>.delayed(const Duration(seconds: 1));
    await lightMachine.fire(E.turnOn);
    await Future<void>.delayed(const Duration(seconds: 1));
    await lightMachine.fire(E.turnOff);
  }
}

注意事项

  1. MacOS 平台配置:如果在 macOS 桌面应用中使用 VisualMonitor,需要在项目的 macos/Runner/DebugProfile.entitlementsmacos/Runner/Release.entitlements 文件中添加以下权限:
    <key>com.apple.security.network.client</key>
    <true/>

更多关于Flutter可视化监控插件hisma_visual_monitor的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter可视化监控插件hisma_visual_monitor的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


hisma_visual_monitor 是一个用于 Flutter 的可视化监控插件,主要用于监控和可视化状态机的状态变化。它可以帮助开发者更好地理解和调试状态机的行为。以下是如何使用 hisma_visual_monitor 的基本步骤:

1. 添加依赖

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

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

然后运行 flutter pub get 来获取依赖。

2. 创建状态机

hisma_visual_monitor 通常与 hisma 状态机库一起使用。首先,你需要创建一个状态机。以下是一个简单的状态机示例:

import 'package:hisma/hisma.dart';

enum States { stateA, stateB }
enum Events { event1, event2 }

final machine = StateMachine<States, Events, void>(
  events: Events.values,
  initialState: States.stateA,
  states: {
    States.stateA: State(
      onEntry: [Action(() => print('Entered State A'))],
      transitions: {
        Events.event1: Transition(to: States.stateB),
      },
    ),
    States.stateB: State(
      onEntry: [Action(() => print('Entered State B'))],
      transitions: {
        Events.event2: Transition(to: States.stateA),
      },
    ),
  },
);

3. 使用 hisma_visual_monitor

接下来,你可以在你的 Flutter 应用中使用 hisma_visual_monitor 来监控状态机的状态变化。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('HISMA Visual Monitor Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: () {
                  machine.fire(Events.event1);
                },
                child: Text('Trigger Event 1'),
              ),
              ElevatedButton(
                onPressed: () {
                  machine.fire(Events.event2);
                },
                child: Text('Trigger Event 2'),
              ),
              // 使用 HISMA Visual Monitor
              HISMAVisualMonitor(
                machine: machine,
              ),
            ],
          ),
        ),
      ),
    );
  }
}

4. 运行应用

运行你的 Flutter 应用,你将看到一个简单的界面,其中包含两个按钮用于触发状态机的事件。HISMAVisualMonitor 将显示状态机的当前状态以及状态变化的历史记录。

5. 监控状态变化

当你点击按钮触发事件时,HISMAVisualMonitor 将实时更新并显示状态机的状态变化。这有助于你更好地理解状态机的行为,并在调试时提供有用的信息。

6. 自定义监控器

你可以根据需要自定义 HISMAVisualMonitor 的外观和行为。例如,你可以设置不同的颜色、字体大小等。

HISMAVisualMonitor(
  machine: machine,
  style: HISMAVisualMonitorStyle(
    backgroundColor: Colors.grey[200],
    textStyle: TextStyle(color: Colors.blue, fontSize: 16),
  ),
);
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!