Flutter聊天文本处理插件chat_text_package的使用

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

Flutter聊天文本处理插件chat_text_package的使用

ChatText

ChatText

一个用于发送文本消息的Flutter包,具有“滚动到底部”按钮和实时未读消息数显示功能。

作者

Mohamed Abd Elgwad

安装

  1. 添加依赖:在pubspec.yaml文件中添加chat_text_package依赖:

    dependencies:
      chat_text_package: ^<latest-version>
    
  2. 导入包

    import 'package:chat_text_package/chat_text_package.dart';
    
  3. 添加ChatScreen组件

    ChatScreen(
      messages: messages,
      scrollController: scrollController,
      otherUserName: 'Mohamed Abd El.Gwad',
      textHint: 'Enter your message',
      otherUserImage: 'https://www.euroschoolindia.com/wp-content/uploads/2023/08/cartoons-for-kids.jpg',
      onSubmitMessage: (msg) {
        messages.insert(
          0,
          Message(
            id: 1,
            body: msg,
            fromLoggedUser: true,
            createdAt: '2024-12-11 03:45 PM'
          )
        );
        setState(() {});
      }
    )
    
  4. 添加消息列表与Message

    List<Message> messageList = [
      Message(
        id: 1,
        body: 'message',
        fromLoggedUser: false,
        createdAt: '2024-12-11 03:45 PM'
      ),
      Message(
        id: 2,
        body: 'message',
        fromLoggedUser: true,
        createdAt: '2024-12-11 03:45 PM'
      ),
    ];
    
  5. 添加ScrollController以支持分页和滚动到底部

    ScrollController scrollController = ScrollController();
    ChatScreen(
      scrollController: scrollController
    )
    
  6. 设置onSubmitMessage回调函数

    当点击发送按钮时调用此函数:

    onSubmitMessage: (String msg) {
      messages.insert(
        0,
        Message(
          id: 1,
          body: msg,
          fromLoggedUser: true,
          createdAt: '2024-12-11 03:45 PM'
        )
      );
      setState(() {});
    }
    
  7. 自定义App Bar

    如果需要默认的AppBar,则需提供otherUserNameotherUserImage参数。若要使用自定义AppBar,则不添加这两个参数。

    ChatScreen(
      otherUserName: 'Mohamed Abd El.Gwad',
      otherUserImage: 'https://www.euroschoolindia.com/wp-content/uploads/2023/08/cartoons-for-kids.jpg'
    )
    
  8. 显示未读消息数

    当有新消息到达且聊天记录向上滚动时,显示未读消息数:

    int unreadMsgRealTime = 0;
    ChatScreen(
      unreadMsgRealTime: unreadMsgRealTime
    )
    

主要贡献者

贡献者 联系方式
Mohamed abd elgwad WhatsApp
Ahmed fayek WhatsApp

示例代码

以下是一个完整的示例应用,展示了如何使用chat_text_package创建一个简单的聊天界面:

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

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

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

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      debugShowCheckedModeBanner: false,
      home: ChatScreenExample(),
    );
  }
}

class ChatScreenExample extends StatefulWidget {
  const ChatScreenExample({super.key});

  @override
  State<ChatScreenExample> createState() => _ChatScreenExampleState();
}

class _ChatScreenExampleState extends State<ChatScreenExample> {
  List<Message> messages = [
    // 简化了消息列表,避免重复
    Message(id: 1, body: 'Hello', fromLoggedUser: true, createdAt: '2024-12-11 03:45 PM'),
    Message(id: 2, body: 'Hi there!', fromLoggedUser: false, createdAt: '2024-12-11 03:46 PM'),
    // 添加更多消息...
  ];

  late ScrollController scrollController;

  @override
  void initState() {
    super.initState();
    scrollController = ScrollController();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Chat Screen Example'),
      ),
      body: SafeArea(
        child: Center(
          child: InkWell(
            onTap: () {
              Navigator.push(context, MaterialPageRoute(builder: (context) {
                return ChatScreen(
                  messages: messages,
                  scrollController: scrollController,
                  otherUserName: 'Mohamed Abd El.Gwad',
                  unreadMsgRealTime: 2,
                  textHint: 'Enter your message',
                  otherUserImage: 'https://i1.sndcdn.com/artworks-WLuQqAGQXmbnwKVO-SG8o2Q-t500x500.jpg',
                  onSubmitMessage: (msg) {
                    messages.insert(
                      0,
                      Message(
                        id: messages.length + 1,
                        body: msg,
                        fromLoggedUser: true,
                        createdAt: DateTime.now().toString()
                      )
                    );
                    setState(() {});
                  },
                );
              }));
            },
            child: const Text('Navigate to chat screen'),
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个包含聊天屏幕的应用程序。点击“Navigate to chat screen”文本后,将导航到一个带有预定义消息列表的聊天界面,并允许用户发送新消息。


更多关于Flutter聊天文本处理插件chat_text_package的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter聊天文本处理插件chat_text_package的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中集成和使用chat_text_package(假设这是一个处理聊天文本的插件)的代码示例。请注意,由于chat_text_package是一个假设的插件,具体的方法名和类可能需要根据实际插件的文档进行调整。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  chat_text_package: ^x.y.z  # 替换为实际的版本号

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

2. 导入插件

在你的Dart文件中(比如main.dart或者某个具体的页面文件),导入插件。

import 'package:chat_text_package/chat_text_package.dart';

3. 初始化插件

在需要的地方初始化插件(通常在应用启动时)。

void main() {
  runApp(MyApp());
  // 假设插件需要初始化,则可以在这里进行(具体看插件文档)
  // ChatTextPackage.initialize();
}

4. 使用插件处理聊天文本

假设chat_text_package提供了文本解析、格式化、链接检测等功能,以下是如何使用这些功能的示例。

文本解析和格式化

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

class ChatScreen extends StatelessWidget {
  final String chatText;

  ChatScreen({required this.chatText});

  @override
  Widget build(BuildContext context) {
    // 使用插件解析和格式化文本
    final formattedText = ChatTextFormatter.formatText(chatText);

    return Scaffold(
      appBar: AppBar(
        title: Text('Chat Screen'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Text(
          formattedText,
          style: TextStyle(fontSize: 16),
        ),
      ),
    );
  }
}

链接检测

假设插件可以检测并高亮显示文本中的链接。

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

class ChatScreenWithLinks extends StatelessWidget {
  final String chatTextWithLinks;

  ChatScreenWithLinks({required this.chatTextWithLinks});

  @override
  Widget build(BuildContext context) {
    // 使用插件检测链接并生成可点击的TextSpan
    final linkSpans = ChatTextLinkDetector.detectLinks(chatTextWithLinks);

    return Scaffold(
      appBar: AppBar(
        title: Text('Chat Screen with Links'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: RichText(
          text: TextSpan(
            children: linkSpans,
            style: TextStyle(fontSize: 16),
          ),
          linkColor: Colors.blue,
          onLinkTap: (url) {
            // 打开链接
            if (url.startsWith('http')) {
              // 使用URL Launcher插件打开网页(需要额外依赖)
              // _launchURL(url);
            } else {
              // 处理其他类型的链接
            }
          },
        ),
      ),
    );
  }

  // _launchURL(String url) async {
  //   if (await canLaunch(url)) {
  //     await launch(url);
  //   } else {
  //     throw 'Could not launch $url';
  //   }
  // }
}

注意:在上面的onLinkTap回调中,我注释掉了_launchURL函数的调用,因为需要额外依赖url_launcher插件来打开网页链接。如果你需要这个功能,请确保添加了url_launcher依赖并实现了_launchURL函数。

总结

上面的代码示例展示了如何在Flutter项目中集成和使用一个假设的chat_text_package插件来处理聊天文本。具体的方法名和类需要根据实际插件的文档进行调整。希望这些示例能帮助你快速上手和使用该插件。

回到顶部