Flutter即时通讯插件flutter_tawk_to_chat的使用

Flutter即时通讯插件flutter_tawk_to_chat的使用

flutter_tawk_to_chat

此插件是 flutter_tawk 插件的一个分支。

这是用于 Flutter 的 Tawk.to 小部件。

展示

安装

要在项目中使用此插件,请在 pubspec.yaml 文件中添加 flutter_tawk_to_chat 作为依赖项。

dependencies:
  flutter_tawk_to_chat: ^版本号

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

导入

在 Dart 文件中导入插件:

import 'package:flutter_tawk_to_chat/flutter_tawk_to_chat.dart';

如何使用

以下是一个基本示例,展示了如何将 Tawk 小部件添加到应用中:

Tawk(
  directChatLink: 'YOUR_DIRECT_CHAT_LINK',
  visitor: TawkVisitor(
    name: 'Username',
    email: 'example@gmail.com',
  ),
)

你可以查看 example 目录以获取完整的示例应用。

自定义

Tawk

参数 类型 默认值 描述 必填
directChatLink String null Tawk 直接聊天链接。
visitor TawkVisitor null 用于设置访客姓名和邮箱的对象。
onLoad Function null 小部件渲染后调用的函数。
onLinkTap Function null 当链接被点击时调用的函数。
placeholder Widget Center(child: CircularProgressIndicator()) 自定义加载小部件。

TawkVisitor

参数 类型 默认值 描述 必填
name String null 访客姓名。
email String null 访客邮箱。
hash String null 安全模式

TawkController

方法 描述
isChatOngoing 检查是否正在进行聊天。返回一个 Future<bool>
isVisitorEngaged 检查访客是否已参与。返回一个 Future<bool>
endChat 结束当前聊天会话。
canGoBack 检查 WebView 是否可以回退。返回一个 Future<bool>
goBack 在 WebView 历史记录中导航回退。返回一个 Future<void>

完整示例

以下是完整的示例代码,展示了如何在 Flutter 应用中使用 flutter_tawk_to_chat 插件。

import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:flutter_tawk_to_chat/flutter_tawk_to_chat.dart';

void main() => runApp(const MyApp());

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: MyHomePage(),
    );
  }
}

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

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

class _MyHomePageState extends State<MyHomePage> {
  TawkController? _controller;
  final _messangerKey = GlobalKey<ScaffoldMessengerState>();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return ScaffoldMessenger(
      key: _messangerKey,
      child: Scaffold(
        appBar: AppBar(
          title: const Text('Flutter Tawk.to'),
          elevation: 0,
          actions: [
            OutlinedButton(
              onPressed: _controller == null
                  ? null
                  : () async {
                      if (await _controller!.isChatOngoing()) {
                        bool? confirm = await showAlert();
                        if (confirm == true) {
                          _controller!.endChat();
                        }
                      } else {
                        _messangerKey.currentState!.showSnackBar(const SnackBar(
                          content: Text('No ongoing chat'),
                          behavior: SnackBarBehavior.floating,
                        ));
                      }
                    },
              child: const Text('End Chat'),
            )
          ],
        ),
        body: Tawk(
          directChatLink:
              'https://tawk.to/chat/615847b0d326717cb68462c7', // 替换为你的直接聊天链接
          visitor: TawkVisitor(
            name: 'Username',
            email: 'example@gmail.com',
          ),
          onLoad: () {
            log('Hello Tawk!', name: 'TawkTo');
          },
          onLinkTap: (String url) {
            log(url, name: 'Tap url');
          },
          placeholder: const Center(
            child: Text('Loading...'),
          ),
          onControllerChanged: (value) {
            setState(() {
              _controller = value;
            });
          },
        ),
      ),
    );
  }

  Future<bool?> showAlert() async {
    return await showDialog<bool>(
        context: context,
        builder: (BuildContext context) {
          return AlertDialog(
            title: const Text('End Chat'),
            content: const Text('Are you sure you want to end the chat?'),
            actions: <Widget>[
              TextButton(
                onPressed: () {
                  Navigator.of(context).pop(false);
                },
                child: const Text('Cancel'),
              ),
              TextButton(
                onPressed: () {
                  Navigator.of(context).pop(true);
                },
                child: const Text('End Chat'),
              ),
            ],
          );
        });
  }
}

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

1 回复

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


flutter_tawk_to_chat 是一个 Flutter 插件,用于在应用中集成 Tawk.to 的即时通讯功能。Tawk.to 是一个免费的在线聊天工具,允许你与网站访问者进行实时聊天。通过 flutter_tawk_to_chat 插件,你可以将 Tawk.to 的聊天功能嵌入到你的 Flutter 应用中。

安装插件

首先,你需要在 pubspec.yaml 文件中添加 flutter_tawk_to_chat 插件:

dependencies:
  flutter:
    sdk: flutter
  flutter_tawk_to_chat: ^1.0.0  # 请使用最新版本

然后,运行 flutter pub get 来安装插件。

使用插件

  1. 导入插件

    在你的 Dart 文件中导入 flutter_tawk_to_chat 插件:

    import 'package:flutter_tawk_to_chat/flutter_tawk_to_chat.dart';
    
  2. 创建 TawkToChat 实例

    你可以使用 TawkToChat 类来创建一个 Tawk.to 聊天窗口。你需要提供你的 Tawk.to 属性 ID 和 widget ID。这些信息可以在 Tawk.to 的管理面板中找到。

    TawkToChat(
      directChatLink: 'https://tawk.to/chat/YOUR_PROPERTY_ID/YOUR_WIDGET_ID',
      visitor: TawkVisitor(
        name: 'John Doe',
        email: 'johndoe@example.com',
      ),
      onLoad: () {
        print('Chat Loaded');
      },
      onLinkTap: (String url) {
        print('Link Tapped: $url');
      },
      placeholder: Center(
        child: CircularProgressIndicator(),
      ),
    );
    
    • directChatLink: 你的 Tawk.to 聊天链接,包含属性 ID 和 widget ID。
    • visitor: 可选的访客信息,包含姓名和电子邮件。
    • onLoad: 当聊天窗口加载完成时触发的回调。
    • onLinkTap: 当用户点击聊天窗口中的链接时触发的回调。
    • placeholder: 在聊天窗口加载之前显示的占位符部件。
  3. 将 TawkToChat 添加到你的应用

    你可以将 TawkToChat 部件添加到你的应用中的任何位置,例如在 Scaffoldbody 中:

    class MyHomePage extends StatelessWidget {
      [@override](/user/override)
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Tawk.to Chat'),
          ),
          body: TawkToChat(
            directChatLink: 'https://tawk.to/chat/YOUR_PROPERTY_ID/YOUR_WIDGET_ID',
            visitor: TawkVisitor(
              name: 'John Doe',
              email: 'johndoe@example.com',
            ),
            onLoad: () {
              print('Chat Loaded');
            },
            onLinkTap: (String url) {
              print('Link Tapped: $url');
            },
            placeholder: Center(
              child: CircularProgressIndicator(),
            ),
          ),
        );
      }
    }
    

处理聊天窗口的生命周期

你可以通过 onLoadonLinkTap 回调来处理聊天窗口的生命周期事件。例如,你可以在聊天窗口加载完成后执行一些操作,或者在用户点击链接时打开外部浏览器。

自定义占位符

你可以通过 placeholder 参数自定义在聊天窗口加载之前显示的占位符部件。例如,你可以显示一个加载指示器或其他自定义部件。

注意事项

  • 确保你的 Tawk.to 属性 ID 和 widget ID 是正确的。
  • flutter_tawk_to_chat 插件依赖于 WebView,因此需要在 Android 和 iOS 上正确配置 WebView。

示例代码

以下是一个完整的示例代码:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Tawk.to Chat Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Tawk.to Chat'),
      ),
      body: TawkToChat(
        directChatLink: 'https://tawk.to/chat/YOUR_PROPERTY_ID/YOUR_WIDGET_ID',
        visitor: TawkVisitor(
          name: 'John Doe',
          email: 'johndoe@example.com',
        ),
        onLoad: () {
          print('Chat Loaded');
        },
        onLinkTap: (String url) {
          print('Link Tapped: $url');
        },
        placeholder: Center(
          child: CircularProgressIndicator(),
        ),
      ),
    );
  }
}
回到顶部