Flutter自动补全插件flutter_autocompleter的使用

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

Flutter自动补全插件flutter_autocompleter的使用

功能

  • 支持TextField、CupertinoTextField、TextFormField甚至自定义文本字段小部件
  • 可定制列表项、内边距、外边距和装饰
  • 可定制加载、空状态和错误状态的内容
  • 在建议回调前后安装钩子
  • 设置监听文本更改时的防抖持续时间
  • 自动翻转当列表超出视口时

示例

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

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

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final TextEditingController _textEditingController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text("示例"),
        ),
        body: Autocompleter<String>(
          debounce: 300, // 防抖持续时间(毫秒)
          flip: true, // 是否自动翻转
          controller: _textEditingController, // 文本控制器
          callback: (q) async {
            var data = ['apple', 'banana', 'cat', 'dog', 'app', '1234'];
            return Future.value(
                data.where((element) => element.contains(q)).toList());
          },
          errorBuilder: (_) {
            return const Padding(
              padding: EdgeInsets.all(16.0),
              child: Text('发生错误'),
            );
          },
          itemBuilder: (_, s) {
            return Padding(
              padding: const EdgeInsets.all(16.0),
              child: Text(s),
            );
          },
          loadingBuilder: (_) => const Center(
                child: Padding(
                  padding: EdgeInsets.all(16.0),
                  child: SizedBox(
                      width: 24,
                      height: 24,
                      child: CircularProgressIndicator(
                        strokeWidth: 2,
                      )),
                ),
              ),
          onTap: (s) {
            setState(() {
              _textEditingController.text = s;
              _textEditingController.selection = TextSelection.fromPosition(
                  TextPosition(offset: _textEditingController.text.length));
            });
            Navigator.of(context).push(MaterialPageRoute(
                builder: (_) => Scaffold(
                      body: Center(child: Text(s)),
                    )));
          },
          decorationBuilder: (direction) => BoxDecoration(
                  color: Colors.white,
                  borderRadius: BorderRadius.vertical(
                    top: direction == VerticalDirection.up
                        ? const Radius.circular(16.0)
                        : Radius.zero,
                    bottom: direction == VerticalDirection.down
                        ? const Radius.circular(16.0)
                        : Radius.zero,
                  ),
                  boxShadow: const [
                    BoxShadow(blurRadius: 3.0, color: Colors.black12)
                  ]),
          child: TextField(
            controller: _textEditingController,
          ),
          direction: VerticalDirection.down // 列表方向
        ),
      ),
    );
  }
}

上述代码展示了一个使用flutter_autocompleter插件的基本示例。在这个示例中,我们创建了一个具有自动补全功能的文本输入框。当用户在文本框中输入内容时,插件会根据输入的内容动态显示匹配的选项。

主要参数解释

  • debounce: 控制输入框的防抖持续时间,防止频繁触发查询。
  • flip: 当列表超出口界时是否自动翻转。
  • controller: 文本控制器,用于管理文本框的内容。
  • callback: 返回一个包含建议数据的Future,用于生成补全建议。
  • errorBuilder: 当发生错误时,用于显示错误提示的Widget。
  • itemBuilder: 用于构建每个补全建议项的Widget。
  • loadingBuilder: 用于显示加载状态的Widget。
  • onTap: 当用户选择某个建议项时触发的回调函数。
  • decorationBuilder: 用于设置补全列表的装饰。
  • child: 显示在文本框中的Widget。
  • direction: 补全列表的方向。

通过这些配置,您可以轻松地为您的Flutter应用添加强大的自动补全功能。


更多关于Flutter自动补全插件flutter_autocompleter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自动补全插件flutter_autocompleter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter中使用flutter_autocompleter插件的示例代码。这个插件用于实现文本输入的自动补全功能。

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

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

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

以下是一个简单的示例,展示如何在Flutter应用中使用flutter_autocompleter

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

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

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

class AutocompleteDemo extends StatefulWidget {
  @override
  _AutocompleteDemoState createState() => _AutocompleteDemoState();
}

class _AutocompleteDemoState extends State<AutocompleteDemo> {
  final List<String> suggestions = [
    'Apple',
    'Banana',
    'Cherry',
    'Date',
    'Elderberry',
    'Fig',
    'Grape',
    'Honeydew',
    'Kiwi',
    'Lemon'
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Autocomplete Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: AutoCompleteTextField<String>(
          suggestions: suggestions,
          decoration: InputDecoration(
            labelText: 'Type to autocomplete',
            border: OutlineInputBorder(),
          ),
          itemBuilder: (context, suggestion) {
            return ListTile(
              leading: Icon(Icons.label),
              title: Text(suggestion),
            );
          },
          onSubmit: (suggestion) {
            print('You selected: $suggestion');
          },
        ),
      ),
    );
  }
}

代码解释

  1. 依赖导入:确保在pubspec.yaml中添加了flutter_autocompleter依赖。
  2. 主应用入口MyApp类作为应用的根组件。
  3. 自动补全演示页面AutocompleteDemo是一个有状态的组件,用于展示自动补全功能。
  4. 建议列表suggestions列表包含所有可能的自动补全建议。
  5. 构建UI
    • 使用ScaffoldAppBar创建基本的页面结构。
    • 使用Padding为内容提供内边距。
    • 使用AutoCompleteTextField组件实现自动补全功能:
      • suggestions属性提供建议列表。
      • decoration属性用于自定义输入框的样式。
      • itemBuilder属性用于构建每个建议项的UI。
      • onSubmit属性在用户选择建议时触发,这里简单地将选择的结果打印到控制台。

这个示例展示了如何使用flutter_autocompleter插件在Flutter应用中实现基本的自动补全功能。你可以根据实际需求进一步自定义和扩展这个示例。

回到顶部