Flutter聊天输入界面插件v_chat_input_ui的使用

Flutter聊天输入界面插件v_chat_input_ui的使用

欢迎来到V Chat SDK Input UI & Recorder插件,这是一个独立组件,为您的聊天应用提供用户友好的输入界面和语音录制功能。此插件是V Chat SDK生态系统的一部分,但也可以单独使用。

特性

  • 国际化(i18n):此插件支持多种语言,使您可以满足全球多样化的用户群体。
  • 主题定制:您可以轻松地自定义聊天输入和录音的外观,以匹配您的应用程序的主题。
  • 语音录制:允许用户无缝发送语音消息。

安装

要开始使用V Chat SDK Input UI & Recorder插件,请使用您喜欢的包管理器进行安装。

使用

要将此插件集成到您的应用程序中,请实现VMessageInputWidget,如下面的示例代码所示:

VMessageInputWidget(
  onSubmitText: controller.onSubmitText, // 提交文本时调用的方法
  autofocus: VPlatforms.isWebRunOnMobile || VPlatforms.isMobile ? false : true, // 是否自动聚焦输入框
  language: VInputLanguage(), // 输入语言设置
  focusNode: controller.focusNode, // 焦点节点
  onAttachIconPress: () {}, // 附加图标被点击时调用的方法
  onSubmitMedia: (files) => controller.onSubmitMedia(context, files), // 提交媒体文件时调用的方法
  onSubmitVoice: (data) { // 提交语音消息时调用的方法
    controller.onSubmitVoice(VMessageVoiceData.fromMap(data.toMap()));
  },
  onSubmitFiles: controller.onSubmitFiles, // 提交文件时调用的方法
  onSubmitLocation: (data) { // 提交位置信息时调用的方法
    controller.onSubmitLocation(VLocationMessageData.fromMap(data.toMap()));
  },
  onTypingChange: (typing) { // 用户是否正在输入时调用的方法
    controller.onTypingChange(VRoomTypingEnum.values.byName(typing.name));
  },
  googleMapsLangKey: VAppConstants.sdkLanguage, // Google地图的语言键
  maxMediaSize: controller.vMessageConfig.maxMediaSize, // 最大媒体文件大小
  onMentionSearch: (query) => controller.onMentionRequireSearch(context, query), // 提到搜索时调用的方法
  maxRecordTime: controller.vMessageConfig.maxRecordTime, // 最大录制时间
  googleMapsApiKey: controller.vMessageConfig.googleMapsApiKey, // Google地图API密钥
  replyWidget: VReplyWidget( // 回复组件
    onReplyCancel: controller.onReplyCancel,
    onReplySubmit: controller.onReplySubmit,
  ),
);

您可以根据需求自定义此小部件。

对于主题定制,您可以覆盖主题扩展:

ThemeData(
  // 您的主题数据配置...
).copyWith(extensions: [VInputTheme.light()]);

文档

有关如何使用此插件的更多详细信息,请参阅我们的文档。它包括详细的指南、示例和教程,以充分利用V Chat SDK生态系统。

支持

如果您遇到任何问题、有功能请求或一般性咨询,请访问我们的问题页面获取信息并报告问题。


请注意:始终确保您使用的是V Chat SDK及其插件的最新版本,以便访问最新的功能和改进。


V Chat SDK Input UI & Recorder插件由V Chat团队自豪地开发和维护。


示例代码

以下是一个完整的示例代码,展示了如何在您的Flutter应用中使用VMessageInputWidget

import 'package:flutter/material.dart';
import 'package:v_chat_input_ui/v_chat_input_ui.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(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const Text('你已经按了按钮这么多次:'),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: '增加',
        child: const Icon(Icons.add),
      ),
      bottomNavigationBar: Container(
        height: 70, // 设置输入框的高度
        child: VMessageInputWidget(
          onSubmitText: (text) {
            print('提交文本: $text');
          },
          onSubmitVoice: (data) {
            print('提交语音: $data');
          },
          onSubmitMedia: (files) {
            print('提交媒体文件: $files');
          },
          onSubmitLocation: (location) {
            print('提交位置: $location');
          },
          onTypingChange: (typing) {
            print('用户是否正在输入: $typing');
          },
        ),
      ),
    );
  }
}

更多关于Flutter聊天输入界面插件v_chat_input_ui的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter聊天输入界面插件v_chat_input_ui的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成并使用v_chat_input_ui插件来创建一个聊天输入界面的代码案例。v_chat_input_ui是一个Flutter插件,用于构建聊天应用的输入界面,通常包括文本框、表情选择、附件上传等功能。

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

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

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

接下来,我们来看一个如何使用v_chat_input_ui的简单示例。

主页面代码 (main.dart)

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

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

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

class ChatScreen extends StatefulWidget {
  @override
  _ChatScreenState createState() => _ChatScreenState();
}

class _ChatScreenState extends State<ChatScreen> {
  final TextEditingController _textController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Chat Screen'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            // 聊天消息列表(这里只是一个占位符)
            Expanded(
              child: ListView.builder(
                itemCount: 10, // 假设有10条消息
                itemBuilder: (context, index) {
                  return ListTile(
                    title: Text('Message $index'),
                  );
                },
              ),
            ),
            // 聊天输入界面
            VChatInputUI(
              controller: _textController,
              onSend: (String message) {
                // 处理发送消息的逻辑
                print('Sending message: $message');
                // 清空文本框
                _textController.clear();

                // 可以在这里添加新消息到消息列表
                // 例如使用setState来更新UI
                // setState(() {
                //   // 更新消息列表状态
                // });
              },
              onAttachmentPressed: () {
                // 处理附件上传的逻辑
                print('Attachment pressed');
              },
              onEmojiPressed: () {
                // 处理表情选择的逻辑
                print('Emoji pressed');
              },
            ),
          ],
        ),
      ),
    );
  }
}

解释

  1. 依赖项添加

    • pubspec.yaml中添加v_chat_input_ui依赖项。
  2. 主页面结构

    • MyApp是一个简单的MaterialApp,设置了应用的主题和主页。
    • ChatScreen是主页面的StatefulWidget,包含聊天消息列表和聊天输入界面。
  3. 聊天输入界面

    • 使用VChatInputUI组件来创建聊天输入界面。
    • controller参数用于控制文本框的文本。
    • onSend回调在点击发送按钮时被调用,用于处理发送消息的逻辑。
    • onAttachmentPressedonEmojiPressed回调分别处理附件上传和表情选择的逻辑。

这个示例只是一个简单的演示,实际应用中你可能需要根据具体需求进行更多的定制和扩展,比如将消息列表的状态管理改为更复杂的逻辑,添加网络请求以发送和接收消息等。

回到顶部