Flutter键盘弹出时滚动视图插件flutter_keyboard_scroll的使用

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

Flutter键盘弹出时滚动视图插件flutter_keyboard_scroll的使用

flutter_keyboard_scroll 是一个用于监听键盘弹出的插件。它可以帮助你在键盘弹出时自动调整视图,使输入框不会被键盘遮挡。

开始使用

首先,你需要在你的项目中引入 flutter_keyboard_scroll 插件。你可以在 pubspec.yaml 文件中添加依赖项:

dependencies:
  flutter_keyboard_scroll: ^1.0.0

然后运行 flutter pub get 来安装插件。

基本用法

你可以使用 KeyboardObserver 来监听键盘的状态,并根据键盘是否弹出来执行相应的操作。例如,当键盘弹出时隐藏当前焦点:

KeyboardObserver(
  hideListener: (double former, double newer, time) {
    FocusScope.of(context).requestFocus(FocusNode());
  },
  child: Column(
    children: [
      _buildScreenShow(),
      _buildTextField(),
    ],
  ),
);

使用键盘滚动控制器

首先,创建一个 KeyboardScrollController 实例:

final KeyboardScrollController _keyboardScrollController = KeyboardScrollController();

接着,添加文本字段包装器:

_keyboardScrollController.addTextFieldWrapper(
  TextFieldWrapper.fromKey(focusNode: _focusNode, focusKey: _globalKey),
);

最后,在你的 ListView 中使用 KeyboardScroll

KeyboardScroll(
  controller: _keyboardScrollController,
  child: ListView(
    padding: EdgeInsets.fromLTRB(
      0,
      0,
      0,
      MediaQuery.of(context).padding.bottom,
    ),
    children: [
      // 添加你的列表项
    ],
  ),
)

完整示例代码

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

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
  final TextEditingController _textEditingController = TextEditingController();
  final FocusNode _focusNode = FocusNode();

  final KeyboardScrollController _keyboardScrollController = KeyboardScrollController();

  [@override](/user/override)
  void initState() {
    super.initState();
    _keyboardScrollController.addTextFieldWrapper(
      TextFieldWrapper.fromKey(focusNode: _focusNode, focusKey: GlobalKey()),
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('flutter_keyboard_scroll 示例'),
      ),
      body: KeyboardObserver(
        hideListener: (double former, double newer, time) {
          FocusScope.of(context).requestFocus(FocusNode());
        },
        child: KeyboardScroll(
          controller: _keyboardScrollController,
          child: Padding(
            padding: const EdgeInsets.all(16.0),
            child: Form(
              key: _formKey,
              child: Column(
                children: <Widget>[
                  TextFormField(
                    controller: _textEditingController,
                    focusNode: _focusNode,
                    decoration: const InputDecoration(
                      labelText: '请输入',
                    ),
                    validator: (value) {
                      if (value == null || value.isEmpty) {
                        return '请输入内容';
                      }
                      return null;
                    },
                  ),
                  const SizedBox(height: 20),
                  ElevatedButton(
                    onPressed: () {
                      if (_formKey.currentState!.validate()) {
                        // 处理表单提交
                      }
                    },
                    child: const Text('提交'),
                  ),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter键盘弹出时滚动视图插件flutter_keyboard_scroll的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter键盘弹出时滚动视图插件flutter_keyboard_scroll的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用 flutter_keyboard_scroll 插件来处理 Flutter 应用中键盘弹出时滚动视图的具体代码示例。这个插件能够确保在输入框被键盘遮挡时,视图能够自动滚动以显示输入框。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_keyboard_scroll: ^x.y.z  # 替换为最新版本号

然后,运行 flutter pub get 来安装依赖。

接下来,是一个完整的 Flutter 应用示例,展示了如何使用 flutter_keyboard_scroll

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Keyboard Scroll Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: KeyboardScrollWidget(
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: <Widget>[
                Text('This is a demo of flutter_keyboard_scroll plugin.', style: TextStyle(fontSize: 20)),
                SizedBox(height: 20),
                TextField(
                  decoration: InputDecoration(labelText: 'Field 1'),
                ),
                SizedBox(height: 20),
                TextField(
                  decoration: InputDecoration(labelText: 'Field 2'),
                ),
                SizedBox(height: 20),
                // 添加更多文本字段以测试滚动效果
                for (int i = 3; i <= 20; i++)
                  Padding(
                    padding: const EdgeInsets.only(bottom: 20.0),
                    child: TextField(
                      decoration: InputDecoration(labelText: 'Field $i'),
                    ),
                  ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们使用了 KeyboardScrollWidget 包装了一个包含多个 TextFieldColumn。当键盘弹出时,flutter_keyboard_scroll 插件会自动处理滚动,确保当前激活的 TextField 不会被键盘遮挡。

解释

  1. flutter_keyboard_scroll 依赖:首先确保在你的项目中添加了该依赖。
  2. KeyboardScrollWidget:这是一个包装器,用于确保在键盘弹出时,视图可以滚动。
  3. ColumnTextField:我们创建了一个包含多个文本字段的列,以便测试滚动效果。

这个示例提供了一个简单但完整的方式来展示如何使用 flutter_keyboard_scroll 插件来处理键盘弹出时的滚动问题。你可以根据需要调整布局和字段数量。

回到顶部