Flutter Vuzix设备交互插件vuzix_flutter_plugin的使用

Flutter Vuzix设备交互插件vuzix_flutter_plugin的使用

Vuzix z100

Vuzix z100插件。

以下是一个完整的示例Demo,展示了如何使用vuzix_flutter_plugin插件与Vuzix设备进行交互。

示例代码

import 'dart:convert';

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

import 'package:flutter/services.dart';
import 'package:vuzix_flutter_plugin/vuzix_flutter_plugin.dart';

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

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  Map<String, dynamic> _vuzixStatus = {};
  String _sendNotificationResult = '';
  String _sendTextResult = '';
  String _sendImageResult = '';
  String _sendImageWithTextResult = '';
  String _initScrollLayoutResult = '';
  String _scrollTextResult = '';
  String _clearImageResult = '';
  final _vuzixFlutterPlugin = VuzixFlutterPlugin();
  TextEditingController notificationTextFieldController = TextEditingController();
  TextEditingController textTextFieldController = TextEditingController();
  TextEditingController imageUrlTextFieldController = TextEditingController();

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();
  }

  // 平台消息是异步的,因此我们在异步方法中初始化。
  Future<void> initPlatformState() async {
    String vuzixStatus;
    // 平台消息可能会失败,因此我们使用try/catch处理PlatformException。
    // 我们还处理消息可能返回null的情况。
    try {
      vuzixStatus =
          await _vuzixFlutterPlugin.checkVuzixStatus() ?? 'Unknown status';
    } on PlatformException {
      vuzixStatus = 'Failed to check Vuzix status.';
    }

    // 如果在异步平台消息还在飞行时小部件从树中移除,我们想丢弃回复而不是调用setState来更新我们的非存在的外观。
    if (!mounted) return;

    setState(() {
      try {
        _vuzixStatus = jsonDecode(vuzixStatus);
      } catch (ex) {
        debugPrint("error: ${ex.toString()}");
      }
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        resizeToAvoidBottomInset: false,
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Column(
            children: [
              const SizedBox(
                height: 20,
              ),
              // Notification
              Padding(
                padding: const EdgeInsets.only(left: 30.0, right: 30.0),
                child: TextField(
                  controller: notificationTextFieldController,
                  decoration: const InputDecoration(
                      fillColor: Colors.white,
                      hintText: "Enter your message to notify here"),
                ),
              ),
              TextButton(
                onPressed: () async {
                  initPlatformState();
                  try {
                    _sendNotificationResult = await _vuzixFlutterPlugin
                            .sendNotification(notificationTextFieldController.text) ??
                        'Unknown result';
                    setState(() {});
                  } on PlatformException {
                    _sendNotificationResult =
                        'Failed to get notification result.';
                  }
                },
                style: TextButton.styleFrom(
                    foregroundColor: const Color(0xffFAFBFF),
                    backgroundColor: Colors.blue),
                child: const Text("Send Notification"),
              ),
              const SizedBox(
                height: 20,
              ),
              if (_sendNotificationResult != "")
                const Text('Send Notification Result:'),
              if (_sendNotificationResult != "")
                Text('$_sendNotificationResult\n'),

              // Text
              Padding(
                padding: const EdgeInsets.only(left: 30.0, right: 30.0),
                child: TextField(
                  controller: textTextFieldController,
                  decoration: const InputDecoration(
                      fillColor: Colors.white,
                      hintText: "Enter your text to display here"),
                ),
              ),
              TextButton(
                onPressed: () async {
                  initPlatformState();
                  try {
                    _sendTextResult = await _vuzixFlutterPlugin
                        .sendText(textTextFieldController.text) ??
                        'Unknown result';
                    setState(() {});
                  } on PlatformException {
                    _sendTextResult =
                    'Failed to get send text result.';
                  }
                },
                style: TextButton.styleFrom(
                    foregroundColor: const Color(0xffFAFBFF),
                    backgroundColor: Colors.blue),
                child: const Text("Send Text"),
              ),
              const SizedBox(
                height: 20,
              ),
              if (_sendTextResult != "")
                const Text('Send Text Result:'),
              if (_sendTextResult != "")
                Text('$_sendTextResult\n'),

              // Image
              Padding(
                padding: const EdgeInsets.only(left: 30.0, right: 30.0),
                child: TextField(
                  controller: imageUrlTextFieldController,
                  decoration: const InputDecoration(
                      fillColor: Colors.white,
                      hintText: "Enter your image url to send here"),
                ),
              ),
              TextButton(
                onPressed: () async {
                  initPlatformState();
                  debugPrint("_vuzixStatus: ${_vuzixStatus.toString()}");
                  try {
                    _sendImageResult = await _vuzixFlutterPlugin
                        .sendImage(imageUrlTextFieldController.text) ??
                        'Unknown result';
                    setState(() {});
                  } on PlatformException {
                    _sendImageResult =
                    'Failed to get send image result.';
                  }
                },
                style: TextButton.styleFrom(
                    foregroundColor: const Color(0xffFAFBFF),
                    backgroundColor: Colors.blue),
                child: const Text("Send Image"),
              ),
              const SizedBox(
                height: 20,
              ),
              if (_sendImageResult != "")
                const Text('Send Image Result:'),
              if (_sendImageResult != "")
                Text('$_sendImageResult\n'),

              // Image with Text
              TextButton(
                onPressed: () async {
                  initPlatformState();
                  debugPrint("_vuzixStatus: ${_vuzixStatus.toString()}");
                  try {
                    _sendImageWithTextResult = await _vuzixFlutterPlugin
                        .sendImageWithText(imageUrlTextFieldController.text, textTextFieldController.text) ??
                        'Unknown result';
                    setState(() {});
                  } on PlatformException {
                    _sendImageWithTextResult =
                    'Failed to get send image with text result.';
                  }
                },
                style: TextButton.styleFrom(
                    foregroundColor: const Color(0xffFAFBFF),
                    backgroundColor: Colors.blue),
                child: const Text("Send Image with Text"),
              ),
              const SizedBox(
                height: 20,
              ),
              if (_sendImageWithTextResult != "")
                const Text('Send Image with Text Result:'),
              if (_sendImageWithTextResult != "")
                Text('$_sendImageWithTextResult\n'),

              // Scroll test
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: [
                  // Init Scroll Layout
                  TextButton(
                    onPressed: () async {
                      initPlatformState();
                      debugPrint("_vuzixStatus: ${_vuzixStatus.toString()}");
                      try {
                        _initScrollLayoutResult = await _vuzixFlutterPlugin
                            .initScrollLayout(textTextFieldController.text) ??
                            'Unknown result';
                        setState(() {});
                      } on PlatformException {
                        _initScrollLayoutResult =
                        'Failed to init scroll layout result.';
                      }
                    },
                    style: TextButton.styleFrom(
                        foregroundColor: const Color(0xffFAFBFF),
                        backgroundColor: Colors.blue),
                    child: const Text("Init Scroll Layout"),
                  ),
                  // Scroll Down
                  TextButton(
                    onPressed: () async {
                      initPlatformState();
                      debugPrint("_vuzixStatus: ${_vuzixStatus.toString()}");
                      try {
                        _initScrollLayoutResult = await _vuzixFlutterPlugin
                            .scrollDown() ??
                            'Unknown result';
                        setState(() {});
                      } on PlatformException {
                        _initScrollLayoutResult =
                        'Failed to get scroll text result.';
                      }
                    },
                    style: TextButton.styleFrom(
                        foregroundColor: const Color(0xffFAFBFF),
                        backgroundColor: Colors.blue),
                    child: const Text("Scroll Text Layout"),
                  ),
                  const SizedBox(
                    height: 20,
                  ),
                ],
              ),
              const SizedBox(
                height: 20,
              ),
              if (_initScrollLayoutResult != "")
                const Text('Init Scroll Layout Result:'),
              if (_initScrollLayoutResult != "")
                Text('$_initScrollLayoutResult\n'),
              if (_scrollTextResult != "")
                const Text('Scroll Text Result:'),
              if (_scrollTextResult != "")
                Text('$_scrollTextResult\n'),


              // Clear
              TextButton(
                onPressed: () async {
                  initPlatformState();
                  try {
                    _clearImageResult = await _vuzixFlutterPlugin
                        .clearCanvas() ??
                        'Unknown result';
                    setState(() {});
                  } on PlatformException {
                    _clearImageResult =
                    'Failed to get clear canvas result.';
                  }
                },
                style: TextButton.styleFrom(
                    foregroundColor: const Color(0xffFAFBFF),
                    backgroundColor: Colors.blue),
                child: const Text("Clear"),
              ),
              const SizedBox(
                height: 20,
              ),
              if (_clearImageResult != "")
                const Text('Clear Result:'),
              if (_clearImageResult != "")
                Text('$_clearImageResult\n'),
            ],
          ),
        ),
      ),
      theme: ThemeData(scaffoldBackgroundColor: const Color(0xFFEFEFEF)),
    );
  }
}

更多关于Flutter Vuzix设备交互插件vuzix_flutter_plugin的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Vuzix设备交互插件vuzix_flutter_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


vuzix_flutter_plugin 是一个用于在 Flutter 应用中与 Vuzix 设备进行交互的插件。通过这个插件,开发者可以访问 Vuzix 设备的硬件功能,如按钮事件、显示控制等。

以下是如何使用 vuzix_flutter_plugin 的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  vuzix_flutter_plugin: ^版本号

请确保使用最新的版本号,你可以在 pub.dev 上查找最新的版本。

2. 导入插件

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

import 'package:vuzix_flutter_plugin/vuzix_flutter_plugin.dart';

3. 初始化插件

在使用插件之前,确保初始化它:

void main() {
  VuzixFlutterPlugin.initialize();
  runApp(MyApp());
}

4. 监听按钮事件

你可以通过插件监听 Vuzix 设备上的按钮事件。例如,监听按下和释放事件:

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _buttonStatus = 'No button pressed';

  @override
  void initState() {
    super.initState();
    VuzixFlutterPlugin.onButtonPressed.listen((event) {
      setState(() {
        _buttonStatus = 'Button pressed: $event';
      });
    });

    VuzixFlutterPlugin.onButtonReleased.listen((event) {
      setState(() {
        _buttonStatus = 'Button released: $event';
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Vuzix Button Example'),
        ),
        body: Center(
          child: Text(_buttonStatus),
        ),
      ),
    );
  }
}

5. 控制显示

你还可以使用插件来控制 Vuzix 设备的显示。例如,设置显示亮度:

void setBrightness(int brightness) async {
  await VuzixFlutterPlugin.setBrightness(brightness);
}
回到顶部