Browse Source

增加环信SDK

ios
Jolie 4 months ago
parent
commit
42cb3570c7
3 changed files with 182 additions and 1 deletions
  1. 3
      android/app/src/main/AndroidManifest.xml
  2. 178
      lib/im/im_manager.dart
  3. 2
      lib/pages/main_page.dart

3
android/app/src/main/AndroidManifest.xml

@ -1,4 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application
android:label="动我"
android:name="${applicationName}"

178
lib/im/im_manager.dart

@ -0,0 +1,178 @@
import 'package:im_flutter_sdk/im_flutter_sdk.dart';
// IM管理器实现使SDK类型和方法
class IMManager {
//
static final IMManager _instance = IMManager._internal();
factory IMManager() => _instance;
bool _isInitialized = false;
IMManager._internal() {
print('IMManager instance created');
}
/// IM SDK
Future<bool> initialize(String appKey) async {
try {
if (_isInitialized) {
print('IM SDK already initialized');
return true;
}
// EMOptions实例
final options = EMOptions(
appKey: appKey,
autoLogin: false,
acceptInvitationAlways: false,
);
// SDK
await EMClient.getInstance.init(options);
//
_registerListeners();
_isInitialized = true;
print('IM SDK initialized successfully');
return true;
} catch (e) {
print('Failed to initialize IM SDK: $e');
return false;
}
}
//
void _registerListeners() {
try {
//
//
EMClient.getInstance.addConnectionEventHandler('', EMConnectionEventHandler(
onConnected: () {
print('Connected to IM server');
},
onDisconnected: () {
print('Disconnected from IM server:');
},
onTokenDidExpire: () {
print('IM token about to expire');
},
onUserKickedByOtherDevice: () {
print('User kicked out of IM server');
},
));
} catch (e) {
print('Failed to register listeners: $e');
}
}
/// IM服务
Future<bool> login(String userId, String token) async {
try {
if (!_isInitialized) {
print('IM SDK not initialized');
return false;
}
await EMClient.getInstance.loginWithToken(userId, token);
print('IM login successful');
return true;
} catch (e) {
print('IM login failed: $e');
return false;
}
}
/// IM服务
Future<bool> logout() async {
try {
await EMClient.getInstance.logout();
print('IM logout successful');
return true;
} catch (e) {
print('IM logout failed: $e');
return false;
}
}
///
Future<EMMessage?> sendTextMessage(
String content,
String toChatUsername,
) async {
try {
//
final message = EMMessage.createTxtSendMessage(
targetId: toChatUsername,
content: content,
);
//
await EMClient.getInstance.chatManager.sendMessage(message);
print('Text message sent successfully');
return message;
} catch (e) {
print('Failed to send text message: $e');
return null;
}
}
///
Future<EMMessage?> sendImageMessage(
String imagePath,
String toChatUsername,
) async {
try {
//
final message = EMMessage.createImageSendMessage(
targetId: toChatUsername,
filePath: imagePath,
sendOriginalImage: false,
);
//
await EMClient.getInstance.chatManager.sendMessage(message);
print('Image message sent successfully');
return message;
} catch (e) {
print('Failed to send image message: $e');
return null;
}
}
///
Future<List<EMConversation>> getConversations() async {
try {
return EMClient.getInstance.chatManager.loadAllConversations();
} catch (e) {
print('Failed to get conversations: $e');
return [];
}
}
///
Future<List<EMMessage?>> getMessages(
String conversationId, {
int pageSize = 20,
String? startMsgId,
}) async {
EMConversationType convType = EMConversationType.Chat;
EMCursorResult<EMMessage?> cursor = await EMClient.getInstance.chatManager.fetchHistoryMessagesByOption(
conversationId, convType, pageSize: pageSize
);
return cursor.data;
}
///
void dispose() {
try {
EMClient.getInstance.removeConnectionEventHandler("");
} catch (e) {
print('Failed to dispose resources: $e');
}
}
}
//
final IMManager imManager = IMManager();

2
lib/pages/main_page.dart

@ -3,7 +3,7 @@ import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:dating_touchme_app/network/user_api.dart';
import 'package:dating_touchme_app/pages/mine/login_page.dart';
// 使
class MainPage extends StatefulWidget {
const MainPage({super.key});

Loading…
Cancel
Save