Flutter可视化监控插件hisma_visual_monitor的使用
Flutter可视化监控插件hisma_visual_monitor的使用
简介
hisma_visual_monitor 是一个用于 Hisma(一种分层状态机实现)的可视化监控插件。它通过定义的监控 API 注册监控创建函数,并在状态机创建或其活动状态发生变化时调用这些监控器。
此监控器将状态机信息转换并发送到 visma 应用程序(visma),后者将其渲染到交互式的 Web 用户界面中。
功能
通过结合 visma 和实际的 Flutter 示例应用程序,可以直观地看到 hisma_visual_monitor 的效果。左侧面板中的状态机图会实时更新,无论触发状态变化的事件来自应用程序还是 visma 用户界面:

使用步骤
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 实例,可以指定 host 和 port 参数:
Machine.monitorCreators = [
  (machine) => VisualMonitor(
        machine,
        host: '192.168.1.2', // 替换为你的 visma 地址
        port: 1111,          // 替换为你的 visma 端口
      ),
];
自定义机器名称和域名
为了更好地组织状态机,可以通过设置 VisualMonitor.hostname 和 VisualMonitor.domain 来自定义它们的名称和域名:
VisualMonitor.hostname = 'testMachine1';
VisualMonitor.domain = 'groupA';
这允许你在 visma 中按层次结构组织状态机。例如,下图展示了 visma 界面如何根据主机名和域名对状态机进行分组:

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);
  }
}
注意事项
- MacOS 平台配置:如果在 macOS 桌面应用中使用 VisualMonitor,需要在项目的macos/Runner/DebugProfile.entitlements和macos/Runner/Release.entitlements文件中添加以下权限:<key>com.apple.security.network.client</key> <true/>
更多关于Flutter可视化监控插件hisma_visual_monitor的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于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),
  ),
); 
        
       
             
             
            

