Flutter即时通讯插件talkjs_flutter的使用

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

Flutter即时通讯插件talkjs_flutter的使用

什么是TalkJS?

TalkJS 让您可以在您的市场、按需应用或社交平台上添加用户对用户的聊天功能。有关更多信息,请访问 talkjs.com

TalkJS在不同设备上的截图

如果您有任何关于 TalkJS 的的问题,请随时联系我们 talkjs.com

要求

  • Dart SDK: >=2.15.0 <3.0.0
  • Flutter: >=2.8.1
  • Android: minSDKVersion 19

安装

编辑项目 pubspec.yaml 文件中的依赖项部分,如下所示:

dependencies:
  talkjs_flutter: ^0.1.0

运行命令:flutter pub get 在命令行中或通过 Android Studio 的“获取依赖项”按钮。

使用

在项目源文件中导入 TalkJS。

import 'package:talkjs_flutter/talkjs_flutter.dart';

然后按照我们的 Flutter 指南 开始在项目中使用 TalkJS。

TalkJS 是完全向前兼容的

我们承诺永远不会打破 API 兼容性。我们可能会废弃某些方法或字段,但绝不会删除它们。如果以前可以使用的东西现在无法使用了,那么这就是一个bug。请随时报告它,我们会尽快修复。

该包正在以 beta 版本发布。原因是与 TalkJS JavaScript SDK 相比,有一些功能在 Flutter SDK 中是不可用的。一旦两个 SDK 在功能上相似,我们将发布 v11.0.0。然而,这并不影响我们始终维护向后兼容性的承诺。因此,您可以放心地将此包用于生产环境。


以下是一个完整的示例 demo:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'TalkJS Flutter Demo',
      theme: ThemeData(
        primaryColor: Colors.blue,
      ),
      home: ChatPage(),
    );
  }
}

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

class _ChatPageState extends State<ChatPage> {
  final TextEditingController messageController = TextEditingController();

  void sendMessage(String message) async {
    await TalkJS.sendMessage(message);
    setState(() {
      messageController.clear();
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('TalkJS Flutter Demo'),
      ),
      body: Column(
        children: [
          Expanded(
            child: ListView.builder(
              itemCount: messages.length,
              itemBuilder: (context, index) {
                return ListTile(
                  title: Text(messages[index].senderName),
                  subtitle: Text(messages[index].message),
                );
              },
            ),
          ),
          Divider(),
          Padding(
            padding: const EdgeInsets.symmetric(horizontal: 1),
            child: TextField(
              controller: messageController,
              decoration: InputDecoration(
                hintText: 'Type your message...',
                border: OutlineInputBorder(),
              ),
            ),
          ),
          ElevatedButton(
            onPressed: () {
              sendMessage(messageController.text);
            },
            child: Text('Send'),
          ),
        ],
      ),
    );
  }
}

更多关于Flutter即时通讯插件talkjs_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter即时通讯插件talkjs_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用talkjs_flutter插件来实现即时通讯功能的代码示例。这个示例将展示如何初始化Talk.js、登录用户、发送和接收消息。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加talkjs_flutter依赖:

dependencies:
  flutter:
    sdk: flutter
  talkjs_flutter: ^最新版本号

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

2. 配置Talk.js

你需要在Talk.js的官方网站上创建一个应用并获取你的App ID和App Key。确保你已经完成了这些步骤,并获取了必要的凭证。

3. 初始化Talk.js

在你的Flutter项目的main.dart或其他适当的文件中,初始化Talk.js:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ChatScreen(),
    );
  }
}

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

class _ChatScreenState extends State<ChatScreen> {
  final String appId = '你的App ID'; // 替换为你的App ID
  final String appKey = '你的App Key'; // 替换为你的App Key

  @override
  void initState() {
    super.initState();
    initTalkJS();
  }

  void initTalkJS() async {
    try {
      await TalkJS.init(appId, appKey);
      // 初始化成功后的逻辑,比如登录用户
      loginUser();
    } catch (e) {
      print('TalkJS 初始化失败: $e');
    }
  }

  void loginUser() async {
    try {
      // 假设用户ID为 "userId123"
      String userId = 'userId123';
      await TalkJS.login(userId);
      print('用户登录成功');
      // 登录成功后的逻辑,比如打开聊天界面
      // 可以在这里导航到一个新的聊天界面
    } catch (e) {
      print('用户登录失败: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('即时通讯'),
      ),
      body: Center(
        child: Text('初始化中...'),
      ),
    );
  }
}

4. 发送和接收消息

接下来,你可以实现发送和接收消息的功能。这通常涉及到监听Talk.js的事件并使用Talk.js的API来发送消息。

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

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

class _ChatScreenState extends State<ChatScreen> {
  final String appId = '你的App ID';
  final String appKey = '你的App Key';
  final TextEditingController messageController = TextEditingController();
  List<Map<String, dynamic>> messages = [];

  @override
  void initState() {
    super.initState();
    initTalkJS();
    listenToMessages();
  }

  void initTalkJS() async {
    await TalkJS.init(appId, appKey);
    loginUser();
  }

  void loginUser() async {
    String userId = 'userId123';
    await TalkJS.login(userId);
  }

  void listenToMessages() {
    TalkJS.onNewMessage((message) {
      setState(() {
        messages.add(message);
      });
    });
  }

  void sendMessage() async {
    String userId = '聊天对象的userId'; // 替换为你要发送消息的用户ID
    String text = messageController.text;
    if (text.trim().isNotEmpty) {
      await TalkJS.sendMessage(userId, text);
      messageController.clear();
      // 可以选择将发送的消息也添加到messages列表中
      setState(() {
        messages.add({
          'type': 'sent',
          'text': text,
        });
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('即时通讯'),
      ),
      body: Column(
        children: [
          Expanded(
            child: ListView.builder(
              itemCount: messages.length,
              itemBuilder: (context, index) {
                Map<String, dynamic> message = messages[index];
                return ListTile(
                  title: Text(message['text']),
                  subtitle: Text(message['type'] == 'sent' ? '已发送' : '已接收'),
                );
              },
            ),
          ),
          Divider(),
          TextField(
            controller: messageController,
            decoration: InputDecoration(
              border: OutlineInputBorder(),
              labelText: '发送消息',
            ),
          ),
          Button(
            onPressed: sendMessage,
            child: Text('发送'),
          ),
        ],
      ),
    );
  }
}

注意事项

  1. 错误处理:示例代码中没有包含详细的错误处理逻辑,实际应用中需要添加适当的错误处理。
  2. UI设计:示例代码中的UI设计非常基础,实际应用中需要根据需求进行美化。
  3. 安全性:确保你的App ID和App Key不会泄露给不受信任的用户或第三方。

这个示例展示了如何在Flutter项目中使用talkjs_flutter插件进行基本的即时通讯功能。根据实际需求,你可能需要添加更多功能,比如用户管理、消息状态(已发送、已读、未读)、群聊等。

回到顶部