Flutter输入处理插件inputter的使用

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

Flutter输入处理插件inputter的使用

桌面自动化工具包括窗口、键盘、鼠标操作。

pic

开始使用

目前该库仅支持Windows操作系统。

使用方法

有不同类型的管理器,它们具有特定的用途用于自动化或输入处理。

  • CursorManager() 用于鼠标操作,例如移动、输入、获取像素颜色。
  • KeyboardManager() 用于键盘操作,例如发送和重新映射按键。
  • WindowManager() 用于窗口操作,例如调整大小、移动、获取活动窗口。

请参阅 example 文件夹以获取灵感。

额外信息

目前正在构建一个网站 inputter.dev 和一种脚本语言来封装自动化库。

此库基本上是对Tim Sneath的win32 包装器的方便抽象,用于自动化目的。因此,非常感谢他和其他为该库做出贡献的人!


完整示例代码

import 'dart:ffi';

import 'package:inputter/inputter.dart';
import 'package:win32/win32.dart' as win32;

void main() {
  // 打开记事本
  win32.ShellExecute(0, win32.TEXT('open'), win32.TEXT('notepad.exe'), nullptr, nullptr, win32.SW_SHOW);
  
  // 等待500毫秒
  win32.Sleep(500);
  
  // 创建WindowManager实例
  var wm = WindowManager();
  
  // 获取名为"Notepad"的窗口
  var windowByTitle = wm.getWindowByTitle("Notepad");
  // 将窗口置于前台
  wm.putWindowToFront(windowByTitle as WindowsWindow);
  win32.Sleep(500);

  // 调整窗口大小到500x500
  wm.resizeWindow(windowByTitle, Rectangle.fromSize(500, 500));
  win32.Sleep(500);
  // 移动窗口到坐标(50, 50)
  wm.moveWindowXY(windowByTitle, 50, 50);

  // 创建KeyboardManager实例
  var keyboardManager = KeyboardManager();
  // 向记事本发送字符串 "Hello, from Notepad!"
  "Hello, from Notepad!".split("").forEach((element) {
    keyboardManager.sendInputString(element);
    win32.Sleep(100); // 每次输入后等待100毫秒
  });

  // 创建CursorManager实例
  var mouseManager = CursorManager();
  // 设置鼠标位置到(50, 60)
  mouseManager.setCursorPositionXY(50, 60);
  var i = 5;
  // 将鼠标向右移动465个像素
  while(i < 470) {
    mouseManager.pushCursorX(5);
    i += 5;
    win32.Sleep(1); // 每次移动后等待1毫秒
  }
  // 发送鼠标左键按下和释放事件
  mouseManager.sendInputs([MouseInput.leftDown, MouseInput.leftUp]);
  win32.Sleep(500);
  // 发送右箭头键
  keyboardManager.sendKey(VirtualKey.VK_RIGHT);
  win32.Sleep(500);
  // 发送回车键
  keyboardManager.sendKey(VirtualKey.VK_RETURN);
}

更多关于Flutter输入处理插件inputter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter输入处理插件inputter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用inputter插件来处理输入的基本示例。需要注意的是,inputter这个具体的插件名称并不是Flutter官方插件库中的一个知名插件,因此我将假设这是一个自定义插件或第三方插件,并且具有处理文本输入的功能。如果实际插件的使用细节有所不同,请根据具体文档进行调整。

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

dependencies:
  flutter:
    sdk: flutter
  inputter: ^x.y.z  # 替换为实际的版本号

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

接下来,我将展示一个如何使用这个假设的inputter插件来处理输入的简单示例。假设inputter插件提供了一个InputterTextField小部件,用于替换Flutter的TextField,并添加了一些额外的输入处理功能。

import 'package:flutter/material.dart';
import 'package:inputter/inputter.dart';  // 假设这是插件的导入路径

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Inputter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final TextEditingController _controller = TextEditingController();
  String? _inputValue;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Inputter Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            // 使用InputterTextField替换TextField
            InputterTextField(
              controller: _controller,
              decoration: InputDecoration(
                labelText: 'Enter text',
              ),
              // 假设InputterTextField有一个onInputChanged回调
              onInputChanged: (String value) {
                setState(() {
                  _inputValue = value;
                });
                // 在这里可以添加额外的输入处理逻辑
                print('Input changed to: $value');
              },
            ),
            SizedBox(height: 16),
            Text(
              'Current input: $_inputValue',
              style: TextStyle(fontSize: 18),
            ),
          ],
        ),
      ),
    );
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }
}

在这个示例中,我们做了以下几件事:

  1. 导入inputter插件。
  2. 创建一个简单的Flutter应用,其中包含一个自定义的InputterTextField小部件(假设这是插件提供的一个增强版的TextField)。
  3. 使用TextEditingController来控制输入字段的值。
  4. 监听onInputChanged回调来获取并处理用户输入的变化。

请注意,这个示例是基于假设的inputter插件的功能和API设计的。实际使用时,你需要查阅该插件的官方文档来获取正确的使用方法和API细节。如果inputter插件提供了不同的功能或API,你可能需要相应地调整代码。

回到顶部