Flutter键盘工具插件keyboard_utils_fork的使用

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

Flutter键盘工具插件 keyboard_utils_fork 的使用

keyboard_utils_fork 是一个用于检查键盘可见性和高度的Flutter插件。本文将详细介绍如何使用这个插件,并提供一个完整的示例demo。

安装

按照官方安装指南进行操作即可。

如何使用

1. 导入包

首先,在您的Dart文件中导入必要的包:

import 'package:keyboard_utils/keyboard_utils.dart';
import 'package:keyboard_utils/keyboard_listener.dart';

2. 创建KeyboardUtils实例

创建一个KeyboardUtils实例:

KeyboardUtils _keyboardUtils = KeyboardUtils();

3. 添加监听器

接下来,为KeyboardUtils添加监听器:

final int _idKeyboardListener = _keyboardUtils.add(
    listener: KeyboardListener(
        willHideKeyboard: () {
            // 键盘隐藏时执行的代码
            print('Keyboard hidden');
        }, 
        willShowKeyboard: (double keyboardHeight) {
            // 键盘显示时执行的代码
            print('Keyboard shown with height $keyboardHeight');
        }
    )
);

4. 处理资源释放

记得在适当的时候调用dispose方法来清理资源:

_keyboardUtils.unsubscribeListener(subscribingId: _idKeyboardListener);
if (_keyboardUtils.canCallDispose()) {
    _keyboardUtils.dispose();
}

5. 使用KeyboardAware Widget

除了直接使用监听器外,还可以使用KeyboardAware widget来获取当前键盘的状态:

import 'package:keyboard_utils/widgets.dart';

Widget buildSampleUsingKeyboardAwareWidget() {
    return Center(
      child: Column(
        children: <Widget>[
          TextField(),
          TextField(
            keyboardType: TextInputType.number,
          ),
          TextField(),
          SizedBox(
            height: 30,
          ),
          KeyboardAware(
            builder: (context, keyboardConfig) {
              return Text('Is keyboard open: ${keyboardConfig.isKeyboardOpen}\n'
                  'Height: ${keyboardConfig.keyboardHeight}');
            },
          ),
        ],
      ),
    );
}

6. 使用KeyboardConfigInheritedWidget

为了在整个widget树中共享KeyboardConfig,可以使用KeyboardConfigInheritedWidget

示例Demo

以下是一个完整的示例应用,展示了如何使用keyboard_utils_fork插件:

import 'package:flutter/material.dart';
import 'package:keyboard_utils/keyboard_utils.dart';
import 'package:keyboard_utils/keyboard_listener.dart';
import 'package:keyboard_utils/widgets.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MainPage(),
    );
  }
}

class MainPage extends StatefulWidget {
  const MainPage({Key? key}) : super(key: key);

  [@override](/user/override)
  _MainPageState createState() => _MainPageState();
}

class _MainPageState extends State<MainPage> {
  late KeyboardUtils _keyboardUtils;
  late int _idKeyboardListener;

  [@override](/user/override)
  void initState() {
    super.initState();
    _keyboardUtils = KeyboardUtils();
    _idKeyboardListener = _keyboardUtils.add(
      listener: KeyboardListener(
        willHideKeyboard: () {
          print('Keyboard hidden');
        },
        willShowKeyboard: (double keyboardHeight) {
          print('Keyboard shown with height $keyboardHeight');
        },
      ),
    );
  }

  [@override](/user/override)
  void dispose() {
    _keyboardUtils.unsubscribeListener(subscribingId: _idKeyboardListener);
    if (_keyboardUtils.canCallDispose()) {
      _keyboardUtils.dispose();
    }
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Keyboard Utils Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            TextField(),
            TextField(
              keyboardType: TextInputType.number,
            ),
            TextField(),
            SizedBox(height: 30),
            KeyboardAware(
              builder: (context, keyboardConfig) {
                return Text(
                    'Is keyboard open: ${keyboardConfig.isKeyboardOpen}\n'
                    'Height: ${keyboardConfig.keyboardHeight}');
              },
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter键盘工具插件keyboard_utils_fork的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter键盘工具插件keyboard_utils_fork的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用 keyboard_utils_fork Flutter 插件的代码示例。这个插件主要用于处理与键盘相关的一些实用功能,比如监听键盘弹出和隐藏事件、获取键盘高度等。

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

dependencies:
  flutter:
    sdk: flutter
  keyboard_utils_fork: ^最新版本号  # 请替换为实际的最新版本号

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

接下来,在你的 Flutter 应用中使用这个插件。以下是一个简单的示例,展示了如何监听键盘的弹出和隐藏事件,并获取键盘的高度。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Keyboard Utils Fork Example'),
        ),
        body: KeyboardListener(
          onChange: (bool isVisible, double keyboardHeight, double? screenHeight) {
            print('Keyboard visibility: $isVisible');
            print('Keyboard height: $keyboardHeight');
            print('Screen height: $screenHeight');
          },
          child: MyHomePage(),
        ),
      ),
    );
  }
}

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

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

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          TextField(
            controller: _controller,
            decoration: InputDecoration(
              labelText: 'Enter some text',
            ),
          ),
          SizedBox(height: 16),
          ElevatedButton(
            onPressed: () {
              // Example of manually showing/hiding keyboard (for demonstration purposes)
              // Note: In real-world apps, you usually don't need to do this manually.
              FocusScope.of(context).requestFocus(FocusNode()); // Hide keyboard
              // To show the keyboard programmatically, you would typically use FocusScope.of(context).requestFocus(<someFocusNode>);
              // on a TextField or TextFormField.
            },
            child: Text('Toggle Keyboard (Demo)'),
          ),
        ],
      ),
    );
  }

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

在这个示例中:

  1. 我们使用了 KeyboardListener 组件来监听键盘的弹出和隐藏事件。
  2. onChange 回调会在键盘状态改变时被调用,参数包括键盘是否可见 (isVisible)、键盘高度 (keyboardHeight) 和屏幕高度 (screenHeight)。
  3. 我们创建了一个简单的 TextField 和一个 ElevatedButton,用于演示(虽然按钮的实际操作只是简单地请求取消焦点,从而隐藏键盘,这里主要是为了展示如何使用 FocusScope)。

请注意,实际开发中,你通常不需要手动控制键盘的显示和隐藏,因为当用户与 TextFieldTextFormField 交互时,键盘会自动弹出或隐藏。

这个示例展示了如何使用 keyboard_utils_fork 插件来获取键盘的状态和高度,希望对你有所帮助。

回到顶部