Flutter键盘鼠标指示器插件keyboard_mouse_indicator的使用

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

Flutter键盘鼠标指示器插件keyboard_mouse_indicator的使用

键盘鼠标指示器

Keyboard Mouse Indicator 是一个漂亮的部件,用于显示鼠标和键盘事件。

特性

  • 全局监听器,不依赖焦点即可监听鼠标和键盘事件。
  • 显示事件的历史记录。
  • 可自定义显示的历史记录项目数量。
  • 显示当前按下的键(最小化键盘指示器)。
  • 完全可定制的鼠标指示器。
  • 可定制的键盘历史记录项目。
  • 显示每个单独和组合事件的数量。

开始使用

pubspec.yaml 文件中添加以下依赖:

dependencies:
  keyboard_mouse_indicator: <latest_version>

使用方法

使用 KeyboardMouseIndicator 小部件来显示指示器。

KeyboardMouseIndicator(
  controller: controller,
  alignment: Alignment.bottomLeft,
  showAsHistory: true,
);
属性 描述
controller 控制指示器的控制器。
alignment 指示器的对齐方式。这还会影响历史项文本的对齐方式。
showAsHistory 是否将事件显示为历史记录或当前按下的键。如果设置为 false,则显示当前按下的键。
mouseIndicator 用于显示鼠标指示器的小部件。
maxLength 显示的历史记录的最大长度。
fadeText 是否使历史记录项的文本渐隐以产生消失效果。
itemSpacing 历史记录项之间的间距。
showMouseIndicator 是否显示鼠标指示器。
keyLabelBuilder 构建键标签字符串的生成器。
itemBuilder 构建历史记录项小部件的生成器。

这将显示最多 5 个键盘和鼠标事件的历史记录。

自定义

显示更多历史记录

默认情况下,该部件只显示 5 个事件作为历史记录。可以通过设置 maxLength 属性来更改此值。

KeyboardMouseIndicator(
  alignment: Alignment.bottomLeft,
  showAsHistory: true,
  maxLength: 10, // 显示最近的 10 个事件
);

显示当前按下的键

默认情况下,该部件显示事件的历史记录。可以通过将 showAsHistory 属性设置为 false 来更改此行为。 它将显示当前按下的键。

KeyboardMouseIndicator(
  alignment: Alignment.bottomLeft,
  showAsHistory: false,
);

手动清除历史记录/按键

可以通过调用 KeyboardMouseControllerclear 方法来手动清除历史记录/按键。

  1. KeyboardMouseController 传递给 KeyboardMouseIndicator 小部件。
final controller = KeyboardMouseController();

KeyboardMouseIndicator(
  controller: controller,
  alignment: Alignment.bottomLeft,
  showAsHistory: true,
);
  1. 调用 KeyboardMouseControllerclear 方法来清除历史记录/按键。
controller.clear();

自定义鼠标指示器部件

可以通过传递 mouseIndicator 属性到 KeyboardMouseIndicator 小部件来定制鼠标指示器部件。

KeyboardMouseIndicator(
  controller: controller,
  alignment: Alignment.bottomLeft,
  showAsHistory: true,
  mouseIndicator: MouseIndicator(
    height: 72,
  ),
);

样式化鼠标指示器部件

可以通过传递 style 属性到 MouseIndicator 小部件来样式化鼠标指示器部件。MouseIndicatorStyle 有两种类型:MouseIndicatorStyle.filledMouseIndicatorStyle.outlined。默认情况下,它是 MouseIndicatorStyle.outlined

KeyboardMouseIndicator(
  controller: controller,
  alignment: Alignment.bottomLeft,
  showAsHistory: true,
  mouseIndicator: MouseIndicator(
    height: 72,
    style: MouseIndicatorStyle.outlined(
      borderColor: Colors.white,
      indicatorColor: Colors.white,
      backgroundColor: Colors.transparent,
      borderWidth: 4,
      showScrollButton: true,
      scrollButtonWidth: 48,
      buttonsHeightFactor: 0.5,
      borderRadius: BorderRadius.circular(8),
    ),
  ),
);
属性 描述
borderColor 鼠标指示器边框的颜色。默认为 ColorScheme.onSurface
indicatorColor 鼠标指示器指示器的颜色。默认为 borderColor
backgroundColor 鼠标指示器背景颜色。
borderWidth 鼠标指示器边框的宽度。
showScrollButton 一个布尔值,表示是否显示滚动按钮。
scrollButtonWidth 滚动按钮的宽度。用于调整滚动按钮的宽度。可以使用 scrollButtonWidthFactor 替换,以百分比形式提供宽度。
buttonsHeightFactor 鼠标按钮的高度百分比。用于调整鼠标按钮的高度。
scrollButtonWidthFactor 滚动按钮的宽度百分比。滚动按钮宽度可以以单个按钮的可用宽度百分比形式提供,就好像所有三个按钮都具有相同的宽度一样。可以替代 scrollButtonWidth 使用。
border 允许提供自定义边框。任何 OutlinedBorder 都可以在这里使用。如果提供了此属性,则 borderColorborderWidthborderRadius 必须不提供。

有关更多详细信息,请参阅 MouseIndicatorStyle 的文档。

同样,你可以使用 MouseIndicatorStyle.filled 来样式化鼠标指示器部件。

KeyboardMouseIndicator(
  controller: controller,
  alignment: Alignment.bottomLeft,
  showAsHistory: true,
  mouseIndicator: MouseIndicator(
    height: 72,
    style: MouseIndicatorStyle.filled(
      indicatorColor: Colors.white,
      backgroundColor: Colors.transparent,
      showScrollButton: true,
      scrollButtonWidth: 48,
      buttonsHeightFactor: 0.5,
      spacing: 12,
    ),
  ),
);
属性 描述
indicatorColor 鼠标指示器指示器的颜色。默认为 ColorScheme.onSurface
backgroundColor 鼠标指示器背景颜色。
showScrollButton 一个布尔值,表示是否显示滚动按钮。
scrollButtonWidth 滚动按钮的宽度。用于调整滚动按钮的宽度。可以使用 scrollButtonWidthFactor 替换,以百分比形式提供宽度。
buttonsHeightFactor 鼠标按钮的高度百分比。用于调整鼠标按钮的高度。
scrollButtonWidthFactor 滚动按钮的宽度百分比。滚动按钮宽度可以以单个按钮的可用宽度百分比形式提供,就好像所有三个按钮都具有相同的宽度一样。可以替代 scrollButtonWidth 使用。
spacing 鼠标按钮之间的间距。

自定义历史记录项的 UI

可以通过传递 itemBuilder 属性到 KeyboardMouseIndicator 小部件来定制历史记录项的 UI。

KeyboardMouseIndicator(
  controller: controller,
  alignment: Alignment.bottomLeft,
  showAsHistory: true,
  itemBuilder: (int index, KeyIndicatorEvent item) {
    // 返回您的自定义小部件
  },
);

KeyIndicatorEvent 描述了事件。它有以下属性:

属性 描述
mouseButton 按下的鼠标按钮。
keyboardKey 按下的键盘键。不包括修饰键。
modifierKey 按下的修饰键列表。包括 CTRL、ALT、SHIFT、META、OPTION 等。
count 按键/组合被按下的次数。

自定义键标签

可以通过传递 keyLabelBuilder 属性到 KeyboardMouseIndicator 小部件来定制键标签。

KeyboardMouseIndicator(
  controller: controller,
  alignment: Alignment.bottomLeft,
  showAsHistory: true,
  keyLabelBuilder: (LogicalKeyboardKey key) => key.debugName,
);

贡献

欢迎您为这个项目做出贡献!

在贡献和提出更改之前,请查看 贡献指南

支持

如果您喜欢这个包,请通过打星来表达您的喜爱。

或者您可以

Buy Me A Coffee

许可证

Copyright © 2023 Birju Vachhani

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

示例代码

以下是完整的示例代码:

import 'package:adaptive_theme/adaptive_theme.dart';
import 'package:flutter/material.dart';
import 'package:keyboard_mouse_indicator/keyboard_mouse_indicator.dart';

void main() => runApp(const MyApp());

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return AdaptiveTheme(
      light: ThemeData(
        useMaterial3: true,
        brightness: Brightness.light,
        colorSchemeSeed: Colors.blue,
      ),
      dark: ThemeData(
        useMaterial3: true,
        brightness: Brightness.dark,
        colorSchemeSeed: Colors.blue,
      ),
      initial: AdaptiveThemeMode.dark,
      builder: (theme, darkTheme) => MaterialApp(
        title: 'Flutter Demo',
        debugShowCheckedModeBanner: false,
        theme: theme,
        darkTheme: darkTheme,
        home: const MyHomePage(),
      ),
    );
  }
}

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

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late final KeyboardIndicatorController controller = KeyboardIndicatorController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.black,
      body: Focus(
        autofocus: true,
        onKey: (node, event) {
          return KeyEventResult.handled;
        },
        child: Stack(
          children: [
            Positioned(
              left: 32,
              bottom: 32,
              child: KeyboardMouseIndicator(
                controller: controller,
                alignment: Alignment.bottomLeft,
                maxLength: 10,
                mouseIndicator: const MouseIndicator(height: 72),
              ),
            ),
            Positioned(
              top: 16,
              right: 16,
              child: FilledButton(
                onPressed: () => controller.clear(),
                child: const Text('Clear'),
              ),
            ),
          ],
        ),
      ), // 这个尾随逗号使自动格式化更美观
    );
  }
}

更多关于Flutter键盘鼠标指示器插件keyboard_mouse_indicator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter键盘鼠标指示器插件keyboard_mouse_indicator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成和使用keyboard_mouse_indicator插件的示例代码。这个插件主要用于在Flutter应用中显示键盘和鼠标的指示器。

步骤 1: 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  keyboard_mouse_indicator: ^latest_version  # 请替换为最新版本号

步骤 2: 导入包

在你的Dart文件中导入该包。

import 'package:keyboard_mouse_indicator/keyboard_mouse_indicator.dart';

步骤 3: 使用插件

在你的MaterialAppCupertinoApp中包裹KeyboardMouseIndicator组件。以下是一个完整的示例:

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

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

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

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return KeyboardMouseIndicator(
      builder: (context, isKeyboardVisible, isMouseConnected) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Keyboard and Mouse Indicator Demo'),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Text(
                  'Keyboard Visible: $isKeyboardVisible',
                  style: TextStyle(fontSize: 24),
                ),
                SizedBox(height: 20),
                Text(
                  'Mouse Connected: $isMouseConnected',
                  style: TextStyle(fontSize: 24),
                ),
              ],
            ),
          ),
        );
      },
    );
  }
}

解释

  1. 添加依赖:在pubspec.yaml中添加keyboard_mouse_indicator依赖。
  2. 导入包:在Dart文件中导入keyboard_mouse_indicator包。
  3. 使用插件
    • 使用KeyboardMouseIndicator组件包裹你的主应用内容。
    • builder参数接收一个函数,该函数返回你的UI组件,并接受两个布尔值参数:isKeyboardVisibleisMouseConnected,分别表示键盘是否可见和鼠标是否连接。

运行应用

确保你已经安装了所有依赖,然后运行你的Flutter应用。你应该会看到一个简单的界面,显示键盘是否可见以及鼠标是否连接的信息。

flutter pub get
flutter run

这样,你就成功地在Flutter应用中集成了keyboard_mouse_indicator插件,并能够根据键盘和鼠标的状态动态显示信息。

回到顶部