Flutter多渠道聊天插件qiscus_multichannel_widget的使用

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

Flutter多渠道聊天插件qiscus_multichannel_widget的使用

需求

  • dart sdk: >=2.16.0 <3.0.0
  • flutter sdk: >=2.10.0

安装

# Qiscus Multichannel 主包
flutter pub add qiscus_multichannel_widget

如何使用

初始化

为了使用QiscusMultichannelWidget,你需要用你的AppID(例如:YOUR_APP_ID)初始化它。获取更多关于AppID的信息可以在Qiscus多渠道聊天页面找到。

import 'package:qiscus_multichannel_widget/qiscus_multichannel_widget.dart';

QMultichannelProvider(
  appId: appId,
  builder: (context) {
    return MaterialApp(
      home: _buildNavigator(),
    );
  },
);

在初始化之后,你就可以访问所有该组件的功能了。

设置用户

在开始聊天之前,必须设置用户ID。

QMultichannelConsumer(
  builder: (_, QMultichannel ref) {
    ref.setUser(
      userId: 'guest-1001',
      displayName: 'guest-1001',
    );
    ref.initiateChat();

    return Container();
  },
);
获取登录状态

使用此功能检查用户是否已登录。

QMultichannelConsumer(
  builder: (_, QMultichannel ref) {
    if (ref.account.hasValue == true) {
      // 用户已登录
    }
    return Container();
  },
);
开始聊天

使用此功能开始聊天。

QMultichannelConsumer(
  builder: (_, QMultichannel ref) {
    ref.initiateChat();
    return Container();
  },
);
清除用户

使用此功能清除已登录的用户。

QMultichannelConsumer(
  builder: (_, QMultichannel ref) {
    ref.clearUser();
    return Container();
  },
);

示例代码

import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:multichannel_flutter_sample/constants.dart';
import 'package:multichannel_flutter_sample/firebase_options.dart';
import 'package:qiscus_multichannel_widget/qiscus_multichannel_widget.dart';
import 'package:url_launcher/url_launcher.dart';

import 'pages/login.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);

  // ignore: missing_provider_scope
  runApp(const App());
}

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

  [@override](/user/override)
  State<App> createState() => _AppStateBuilder();
}

class _AppStateBuilder extends State<App> {
  final container = ProviderContainer();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return buildWithoutProviderScope(context);
  }

  Widget buildWithoutProviderScope(BuildContext context) {
    return _multichannelProvider();
  }

  Widget buildWithProviderScope(BuildContext context) {
    return ProviderScope(
      parent: container,
      child: _multichannelProvider(container),
    );
  }

  QMultichannelProvider _multichannelProvider([ProviderContainer? container]) {
    return QMultichannelProvider(
      parentProviderContainer: container,
      appId: appId,
      title: 'Some custom title',
      avatar: QAvatarConfig.editable('https://via.placeholder.com/200'),
      rightAvatar: QAvatarConfig.enabled(),
      hideEventUI: true,
      onURLTapped: (url) {
        var uri = Uri.tryParse(url);
        if (uri != null) {
          launchUrl(uri, mode: LaunchMode.platformDefault);
        }
      },
      builder: (context) {
        return MaterialApp(
          home: LoginScreen(),
        );
      },
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中集成和使用qiscus_multichannel_widget插件的一个详细代码示例。这个插件允许你在Flutter应用中实现多渠道聊天功能。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  qiscus_multichannel_widget: ^最新版本号 # 请替换为最新的版本号

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

2. 配置Android项目

android/app/src/main/AndroidManifest.xml中添加必要的权限和配置:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourapp">

    <!-- 其他配置 -->

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    <application
        android:name=".MyApplication" <!-- 如果你有自定义的Application类,请确保继承自QiscusApplication -->
        ... >

        <!-- Qiscus配置 -->
        <meta-data
            android:name="com.qiscus.SDK_APP_ID"
            android:value="你的Qiscus App ID"/>
        <meta-data
            android:name="com.qiscus.SDK_API_KEY"
            android:value="你的Qiscus API Key"/>
        <meta-data
            android:name="com.qiscus.SDK_SERVER_URL"
            android:value="你的Qiscus服务器URL"/>

        <!-- 其他配置 -->

    </application>

</manifest>

确保你的MyApplication类继承自io.qiscus.sdk.QiscusApplication

package com.example.yourapp;

import io.qiscus.sdk.QiscusApplication;

public class MyApplication extends QiscusApplication {
    @Override
    public void onCreate() {
        super.onCreate();
        // 其他初始化代码
    }
}

3. 配置iOS项目

ios/Runner/Info.plist中添加必要的权限:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

ios/Runner/AppDelegate.swift中配置Qiscus:

import UIKit
import Flutter
import qiscus_multichannel_widget  // 确保这个导入语句是正确的,根据插件的实际配置

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    GeneratedPluginRegistrant.register(with: self)
    
    // Qiscus配置
    Qiscus.configure(withAppId: "你的Qiscus App ID", apiKey: "你的Qiscus API Key", serverUrl: "你的Qiscus服务器URL")
    
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

4. 在Flutter中使用Qiscus多渠道聊天插件

在你的Flutter项目中,你可以这样使用qiscus_multichannel_widget

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Qiscus Multichannel Chat'),
        ),
        body: QiscusMultichannelWidget(
          // 你可以在这里传递其他初始化参数
        ),
      ),
    );
  }
}

5. 初始化Qiscus(可选)

在应用的某个初始化位置(如MyAppinitState),你可以进行Qiscus的初始化:

@override
void initState() {
  super.initState();
  Qiscus.instance().init(
    appId: "你的Qiscus App ID",
    apiKey: "你的Qiscus API Key",
    serverUrl: "你的Qiscus服务器URL",
    // 其他可选参数
  );
}

注意:在Flutter中使用时,通常不需要在AppDelegateMyApplication中重复配置Qiscus,选择其一即可。具体取决于你的项目结构和需求。

以上是一个基本的集成示例,具体实现可能需要根据你的项目需求进行调整。希望这个示例能帮助你顺利集成qiscus_multichannel_widget插件。

回到顶部