rongcloud_im_plugin 0.0.5 copy "rongcloud_im_plugin: ^0.0.5" to clipboard
rongcloud_im_plugin: ^0.0.5 copied to clipboard

discontinuedreplaced by: rongcloud_im_wrapper_plugin
outdated

RongCloud IMKit flutter plugin.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:convert' show json;

import 'package:flutter/services.dart';
import 'package:rongcloud_im_plugin/rongcloud_im_plugin.dart';
import 'package:rongcloud_im_plugin/rc_common_define.dart';
import 'package:rongcloud_im_plugin/text_message.dart';
import 'package:rongcloud_im_plugin/image_message.dart';
import 'package:rongcloud_im_plugin/message.dart';
import 'package:rongcloud_im_plugin/message_factory.dart';


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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {

  static const String privateUserId = "ios";

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

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState() async {

    //融云 appkey
    String RongAppKey = 'pvxdm17jxjaor';
    //用户 id
    String userId = 'android';
    //通过用户 id 生成的对应融云 token
    String RongIMToken = '/GAO1QE3NeKdxZ8EFWZnXSBpWcymqs7mr0LfCBn63cWXAWvMuW73BKKASyaZmGFGhVYuRiYRxSacloyurITSuw==';

    //1.初始化 im SDK
    RongcloudImPlugin.init(RongAppKey);

    //2.配置 im SDK
    String confString = await DefaultAssetBundle.of(context).loadString("assets/RCFlutterConf.json");
    Map confMap = json.decode(confString.toString());
    RongcloudImPlugin.config(confMap);

    //3.连接 im SDK
    int rc = await RongcloudImPlugin.connect(RongIMToken);
    print('connect result');
    print(rc);

    //4.刷新当前用户的用户信息
    String portraitUrl = "https://www.rongcloud.cn/pc/images/huawei-icon.png";
    RongcloudImPlugin.updateCurrentUserInfo(userId, "李四", portraitUrl);

    //5.设置监听回调,处理 native 层传递过来的事件
    RongcloudImPlugin.setRCNativeMethodCallHandler(_handler);

    // If the widget was removed from the tree while the asynchronous platform
    // message was in flight, we want to discard the reply rather than calling
    // setState to update our non-existent appearance.

    setState(() {

    });
  }

  //6.响应 native 的事件
  Future<dynamic> _handler(MethodCall methodCall) {
    //当 im SDK 需要展示用户信息的时候,会回调此方法
    if (RCMethodCallBackKey.RefrechUserInfo == methodCall.method) {
      //开发者需要将用户信息传递给 SDK
      //如果本地有该用户的信息,那么直接传递给 SDK
      //如果本地没有该用户的信息,从 APP 服务获取后传递给 SDK
      String userId = methodCall.arguments;
      String name = "张三";
      String portraitUrl = "https://www.rongcloud.cn/pc/images/lizhi-icon.png";
      RongcloudImPlugin.refreshUserInfo(userId, name, portraitUrl);
    } else if(RCMethodCallBackKey.ReceiveMessage == methodCall.method) {
      //收到消息原生会触发此方法
      Map map = methodCall.arguments;
      print("messageMap="+map.toString());
      int left = map["left"];
      print("left="+left.toString());
      String messageString= map["message"];
      Message msg = MessageFactory.instance.string2Message(messageString);

      //会话类型,单聊/群聊/聊天室
      print("conversationType = "+msg.conversationType.toString());
      print("targetId = "+msg.targetId);
      print("senderUserId="+msg.senderUserId);
    }else if(RCMethodCallBackKey.SendMessage == methodCall.method) {
      //发送消息会触发此回调,通知 flutter 层消息发送结果
      // {"messageId":12,"status":30}
      // messageId 为本地数据库自增字段
      // status 结果参见 RCMessageSentStatus 的枚举值
      Map map = methodCall.arguments;
      print("message sent result "+ map.toString());
    }else if(RCMethodCallBackKey.JoinChatRoom == methodCall.method) {
      //加入聊天室的回调
      //targetId 聊天室 id
      //status 参见 RCOperationStatus
      //{"targetId":targetId,"status":0};
      Map map = methodCall.arguments;
      print("join chatroom resulut ="+map.toString());
    }else if(RCMethodCallBackKey.QuitChatRoom == methodCall.method) {
      //退出聊天室的回调
      //targetId 聊天室 id
      //status 参见 RCOperationStatus
      //{"targetId":targetId,"status":0};
      Map map = methodCall.arguments;
      print("quit chatroom resulut ="+map.toString());
    }else if(RCMethodCallBackKey.UploadMediaProgress == methodCall.method) {
      //上传图片进度的回调
      //{"messageId",messageId,"progress",99}
      Map map = methodCall.arguments;
      print("upload image message progress = "+map.toString());
    }
  }

  onPushToConversationList()  {
    List conTypes = [RCConversationType.Private,RCConversationType.Group];
    RongcloudImPlugin.pushToConversationList(conTypes);
  }

  onPushToConversation() {
    RongcloudImPlugin.pushToConversation(RCConversationType.Private,privateUserId);
  }

  onSendMessage() async{
      TextMessage txtMessage = new TextMessage();
      txtMessage.content = "这条消息来自 flutter";
      Map map = await RongcloudImPlugin.sendMessage(RCConversationType.Private, privateUserId, txtMessage);
      String messageString= map["message"];
      Message msg = MessageFactory.instance.string2Message(messageString);
      print("send message start "+map.toString());
      print("send message start senderUserId = "+msg.senderUserId);
  }

  onSendImageMessage() async {
    ImageMessage imgMessage = new ImageMessage();
    imgMessage.localPath = "image/local/path.jpg";
    Map map = await RongcloudImPlugin.sendMessage(RCConversationType.Private, privateUserId, imgMessage);
    String messageString = map["message"];
    Message msg = MessageFactory.instance.string2Message(messageString);
    print("send image message start "+map.toString());
    print("send image message start senderUserId = "+msg.senderUserId);
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Container(
              padding: EdgeInsets.symmetric(horizontal: 20),
              height: 400,
              child: Column(
                children: <Widget>[
                  Row(children: <Widget>[]),
                  Padding(
                      padding: EdgeInsets.symmetric(vertical: 20),
                      child: Row(
                        children: <Widget>[
                          Expanded(
                            child: RaisedButton(
                              onPressed: () => onPushToConversationList(),
                              child: Text("onPushToConversationList"),
                              color: Colors.blueAccent,
                              textColor: Colors.white,
                            ),
                          )
                        ],
                        
                      )
                    ),
                  Padding(
                      padding: EdgeInsets.symmetric(vertical: 20),
                      child: Row(
                        children: <Widget>[
                          Expanded(
                            child: RaisedButton(
                              onPressed: () => onPushToConversation(),
                              child: Text("onPushToConversation"),
                              color: Colors.blueAccent,
                              textColor: Colors.white,
                            ),
                          )
                        ],
                        
                      )
                    ),
                    Padding(
                      padding: EdgeInsets.symmetric(vertical: 20),
                      child: Row(
                        children: <Widget>[
                          Expanded(
                            child: RaisedButton(
                              onPressed: () => onSendMessage(),
                              child: Text("sendMessage"),
                              color: Colors.blueAccent,
                              textColor: Colors.white,
                            ),
                          )
                        ],
                        
                      )
                    )
                ],
              )
              ),
        ),
      ),
    );
  }
  
}
17
likes
0
pub points
67%
popularity

Publisher

unverified uploader

RongCloud IMKit flutter plugin.

Homepage

License

unknown (LICENSE)

Dependencies

flutter

More

Packages that depend on rongcloud_im_plugin