Flutter智能文本输入栏插件smart_textbar的使用

Flutter智能文本输入栏插件smart_textbar的使用

TextFields 是任何应用程序或网站中非常基础且重要的组成部分。虽然它可能不是UI中最闪亮的部分,但如果这些文本字段加载了必要的功能,可以显著提升用户体验。

smart_textbar

smart_textbar 是一个 Flutter 插件,它提供了一个终极的 Flutter 文本输入框,极大地减少了实现各种功能的需求。这些功能虽然相对复杂,但在现代应用和网站中已成为标准配置。

安装

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

dependencies:
  smart_textbar: <latest_version>

使用

下面是一个使用示例。详细的文档可以在 API 参考中找到:

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

import 'package:flutter/services.dart';
import 'package:smart_textbar/smart_textbar.dart';
import 'package:smart_textbar/textbar.dart';

import 'package:autotrie/autotrie.dart';
import 'package:permission_handler/permission_handler.dart';

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

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

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Ex(),
    );
  }
}

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

class _texttbar_exampleState extends State<texttbar_example> {
  [@override](/user/override)
  void initState() {
    super.initState();
  }

  void permission() async {
    var status = await Permission.microphone.status;

    if (status.isDenied) {
      await Permission.microphone.request();
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        height: MediaQuery.of(context).size.height,
        width: MediaQuery.of(context).size.width,
        child: Center(
          child: MyApp(),
        ),
      ),
    );
  }
}

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

class _ExState extends State<Ex> {
  String lang = 'hi-IN';

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('smart_textbar'),),
      body: Container(
        height: MediaQuery.of(context).size.height,
        width: MediaQuery.of(context).size.width,
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            TextBar(
              blindMode: true,
              voiceToTextMode: true,
              text_color: Colors.black,
              speaker_highlight_color: Colors.red,
              speaker_language: lang,
            ),
            SizedBox(height: 100,),

            Center(child: Text('speaker language: $lang', style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20,),)),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter智能文本输入栏插件smart_textbar的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter智能文本输入栏插件smart_textbar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


smart_textbar 是一个用于 Flutter 的智能文本输入栏插件,它提供了丰富的功能来增强文本输入体验。它支持诸如自动完成、表情符号推荐、@提及用户、标签推荐等功能。以下是如何在 Flutter 项目中使用 smart_textbar 插件的基本步骤。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  smart_textbar: ^1.0.0  # 请检查最新版本

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

2. 导入库

在你的 Dart 文件中导入 smart_textbar 库。

import 'package:smart_textbar/smart_textbar.dart';

3. 使用 SmartTextBar

你可以通过 SmartTextBar 组件来创建一个智能文本输入栏。以下是一个简单的示例:

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

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Smart TextBar Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            SmartTextBar(
              controller: _controller,
              onSubmitted: (String text) {
                print('Submitted: $text');
              },
              onChanged: (String text) {
                print('Changed: $text');
              },
              hintText: 'Type something...',
              enableSuggestions: true,
              suggestions: [
                SuggestionItem(
                  trigger: '@',
                  items: ['User1', 'User2', 'User3'],
                ),
                SuggestionItem(
                  trigger: '#',
                  items: ['Flutter', 'Dart', 'SmartTextBar'],
                ),
              ],
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                print('Text: ${_controller.text}');
              },
              child: Text('Submit'),
            ),
          ],
        ),
      ),
    );
  }
}

4. 配置项说明

  • controller: 用于控制文本输入栏的 TextEditingController
  • onSubmitted: 当用户提交文本时触发的回调函数。
  • onChanged: 当文本内容发生变化时触发的回调函数。
  • hintText: 输入栏的提示文本。
  • enableSuggestions: 是否启用智能建议功能。
  • suggestions: 自定义建议项,可以设置触发字符(如 @#)以及对应的建议列表。

5. 自定义建议

你可以通过 SuggestionItem 类来定义自定义建议。例如:

SuggestionItem(
  trigger: '@',
  items: ['User1', 'User2', 'User3'],
),

当用户在输入框中输入 @ 时,会显示 User1, User2, User3 等建议项。

6. 处理建议选择

你可以通过 onSuggestionSelected 回调来处理用户选择了某个建议项的事件。

SmartTextBar(
  controller: _controller,
  onSubmitted: (String text) {
    print('Submitted: $text');
  },
  onChanged: (String text) {
    print('Changed: $text');
  },
  hintText: 'Type something...',
  enableSuggestions: true,
  suggestions: [
    SuggestionItem(
      trigger: '@',
      items: ['User1', 'User2', 'User3'],
    ),
    SuggestionItem(
      trigger: '#',
      items: ['Flutter', 'Dart', 'SmartTextBar'],
    ),
  ],
  onSuggestionSelected: (String trigger, String selectedItem) {
    print('Selected: $selectedItem with trigger $trigger');
  },
),

7. 更多自定义

smart_textbar 还支持更多自定义选项,比如设置输入栏的样式、建议框的样式、键盘类型等。你可以查阅插件的官方文档以获取更多详细信息。

8. 运行应用

保存文件后,运行你的 Flutter 应用,你将看到一个带有智能建议功能的文本输入栏。

9. 处理复杂场景

如果你需要处理更复杂的场景,比如异步加载建议项、动态更新建议列表等,你可以结合 FutureBuilderStreamBuilder 来实现。

SmartTextBar(
  controller: _controller,
  onSubmitted: (String text) {
    print('Submitted: $text');
  },
  onChanged: (String text) {
    print('Changed: $text');
  },
  hintText: 'Type something...',
  enableSuggestions: true,
  suggestions: [
    SuggestionItem(
      trigger: '@',
      itemsFuture: fetchUsers(),  // 异步获取用户列表
    ),
  ],
  onSuggestionSelected: (String trigger, String selectedItem) {
    print('Selected: $selectedItem with trigger $trigger');
  },
),
回到顶部