Skip to content

Commit

Permalink
Merge pull request #38 from netease-george/main
Browse files Browse the repository at this point in the history
feat:9.7.1 发布
  • Loading branch information
shine2008 authored Feb 21, 2024
2 parents 1c98d1d + 6515c54 commit 88e7eb8
Show file tree
Hide file tree
Showing 35 changed files with 482 additions and 328 deletions.
6 changes: 6 additions & 0 deletions im_demo/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# IMKit(Flutter) ChangeLog

## 9.7.1(Feb 21, 2024)
### New Features
* 地图位置消息插件化实现
* 支持插件化扩展
* 适配Flutter 3.16

## 9.7.0(Jan 25, 2024)
### New Features
* 新增合并转发和多选功能
Expand Down
36 changes: 22 additions & 14 deletions im_demo/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
// found in the LICENSE file.

import 'package:flutter/gestures.dart';
import 'package:im_demo/src/config.dart';
import 'package:im_demo/src/home/home_page.dart';
import 'package:netease_corekit_im/router/imkit_router.dart';
import 'package:netease_corekit_im/router/imkit_router_constants.dart';
import 'package:nim_chatkit_location/chat_kit_location.dart';
import 'package:nim_chatkit_ui/chat_kit_client.dart';
import 'package:netease_common_ui/common_ui.dart';
import 'package:netease_common_ui/utils/color_utils.dart';
Expand All @@ -19,14 +21,20 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:im_demo/l10n/S.dart';
import 'package:im_demo/src/home/splash_page.dart';
import 'package:im_demo/src/mine/user_info_page.dart';
import 'package:provider/provider.dart';
import 'package:nim_searchkit_ui/search_kit_client.dart';
import 'package:nim_teamkit_ui/team_kit_client.dart';
import 'dart:io';

void main() {
SystemChrome.setSystemUIOverlayStyle(
const SystemUiOverlayStyle(statusBarColor: Colors.transparent));
WidgetsFlutterBinding.ensureInitialized().addPostFrameCallback((timeStamp) {
//初始化位置消息插件
ChatKitLocation.instance.init(
aMapAndroidKey: IMDemoConfig.AMapAndroid,
aMapIOSKey: IMDemoConfig.AMapIOS,
aMapWebKey: IMDemoConfig.AMapWeb);
});
runApp(const MainApp());
}

Expand Down Expand Up @@ -95,19 +103,19 @@ class _MainAppState extends State<MainApp> {
navigatorObservers: [IMKitRouter.instance.routeObserver],
supportedLocales: IMKitClient.supportedLocales,
theme: ThemeData(
primaryColor: CommonColors.color_337eff,
pageTransitionsTheme: PageTransitionsTheme(builders: {
TargetPlatform.android: CupertinoPageTransitionsBuilder(),
TargetPlatform.iOS: CupertinoPageTransitionsBuilder(),
}),
appBarTheme: const AppBarTheme(
backgroundColor: Colors.white,
elevation: 1,
iconTheme: IconThemeData(color: CommonColors.color_333333),
titleTextStyle:
TextStyle(fontSize: 16, color: CommonColors.color_333333),
systemOverlayStyle: SystemUiOverlayStyle.dark),
),
primaryColor: CommonColors.color_337eff,
pageTransitionsTheme: PageTransitionsTheme(builders: {
TargetPlatform.android: CupertinoPageTransitionsBuilder(),
TargetPlatform.iOS: CupertinoPageTransitionsBuilder(),
}),
appBarTheme: const AppBarTheme(
backgroundColor: Colors.white,
elevation: 1,
iconTheme: IconThemeData(color: CommonColors.color_333333),
titleTextStyle:
TextStyle(fontSize: 16, color: CommonColors.color_333333),
systemOverlayStyle: SystemUiOverlayStyle.dark),
useMaterial3: false),
routes: IMKitRouter.instance.routes,
home: child,
);
Expand Down
36 changes: 13 additions & 23 deletions im_demo/lib/src/home/home_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,22 +14,17 @@ import 'package:netease_common_ui/utils/color_utils.dart';
import 'package:netease_corekit_im/router/imkit_router_factory.dart';
import 'package:netease_corekit_im/service_locator.dart';
import 'package:netease_corekit_im/services/login/login_service.dart';
import 'package:nim_chatkit_location/chatkit_location_provider_impl.dart';
import 'package:nim_chatkit_ui/chat_kit_client.dart';
import 'package:nim_chatkit_ui/view/chat_kit_message_list/item/chat_kit_message_item.dart';
import 'package:nim_chatkit_ui/view/input/actions.dart';
import 'package:nim_chatkit_ui/view_model/chat_view_model.dart';
import 'package:nim_contactkit/repo/contact_repo.dart';
import 'package:nim_contactkit_ui/page/contact_page.dart';
import 'package:nim_conversationkit/repo/conversation_repo.dart';
import 'package:nim_conversationkit_ui/conversation_kit_client.dart';
import 'package:nim_conversationkit_ui/page/conversation_page.dart';
import 'package:nim_core/nim_core.dart';
import 'package:provider/provider.dart';
import 'package:yunxin_alog/yunxin_alog.dart';

import '../config.dart';

const channelName = "com.netease.yunxin.app.flutter.im/channel";
const pushMethodName = "pushMessage";

Expand Down Expand Up @@ -111,13 +106,7 @@ class _HomePageState extends State<HomePage> {
initUnread();
//注册撤回消息监听
ChatKitClient.instance.registerRevokedMessage();
//todo 如果需要使用位置消息设置,需要设置ChatKitLocationProviderImpl
ChatKitClient.instance.chatUIConfig.locationProvider =
ChatKitLocationProviderImpl.instance;
ChatKitLocationProviderImpl.instance.initLocationMap(
aMapAndroidKey: IMDemoConfig.AMapAndroid,
aMapIOSKey: IMDemoConfig.AMapIOS,
aMapWebKey: IMDemoConfig.AMapWeb);
//设置pushPayload
ChatKitClient.instance.chatUIConfig.getPushPayload = _getPushPayload;
//处理native端传递过来的消息
_handleMessageFromNative();
Expand All @@ -141,15 +130,16 @@ class _HomePageState extends State<HomePage> {
type: 'custom',
icon: Icon(Icons.android_outlined),
title: "自定义",
onTap: (BuildContext context) async {
var vm = context.read<ChatViewModel>();
onTap: (BuildContext context, String sessionId,
NIMSessionType sessionType,
{NIMMessageSender? messageSender}) async {
var msg = await MessageBuilder.createCustomMessage(
sessionId: vm.sessionId,
sessionType: vm.sessionType,
sessionId: sessionId,
sessionType: sessionType,
content: '自定义消息');
if (msg.isSuccess && msg.data != null) {
Fluttertoast.showToast(msg: '发送自定义消息! ');
vm.sendMessage(msg.data!);
messageSender?.call(msg.data!);
}
}),
];
Expand All @@ -164,12 +154,12 @@ class _HomePageState extends State<HomePage> {
ConversationKitClient.instance.conversationUIConfig = ConversationUIConfig(
itemConfig: ConversationItemConfig(
lastMessageContentBuilder: (context, conversationInfo) {
if (conversationInfo.session.lastMessageType == NIMMessageType.custom &&
conversationInfo.session.lastMessageAttachment == null) {
return S.of(context).customMessage;
}
return null;
}));
if (conversationInfo.session.lastMessageType == NIMMessageType.custom &&
conversationInfo.session.lastMessageAttachment == null) {
return S.of(context).customMessage;
}
return null;
}));
}

@override
Expand Down
6 changes: 1 addition & 5 deletions im_demo/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 9.7.0
version: 9.7.1

environment:
sdk: ">=2.16.1 <4.0.0"
Expand Down Expand Up @@ -47,10 +47,6 @@ dependencies:
path: ../nim_chatkit_location
yunxin_alog: ^2.0.0
fluttertoast: ^8.2.4
# 高德定位
amap_flutter_location: ^3.0.0
# 高德地图
amap_flutter_map: ^3.0.0
permission_handler: ^11.0.1
# 网图加载
cached_network_image: ^3.3.1
Expand Down
5 changes: 5 additions & 0 deletions nim_chatkit_location/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# NimChatKitLocation ChangeLog

## 9.7.1(Feb 21, 2024)
### New Features
* 地图位置消息插件化实现
* 支持插件化扩展

## 9.7.0(Jan 25, 2024)
### Dependency Updates
* 升级FlutterToast 到^8.2.4
Expand Down
3 changes: 3 additions & 0 deletions nim_chatkit_location/images/ic_location.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
110 changes: 92 additions & 18 deletions nim_chatkit_location/lib/chat_kit_location.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,18 @@
// Use of this source code is governed by a MIT license that can be
// found in the LICENSE file.

import 'package:netease_corekit_im/router/imkit_router.dart';
import 'package:amap_flutter_location/amap_flutter_location.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:netease_corekit/report/xkit_report.dart';
import 'package:netease_corekit_im/router/imkit_router_constants.dart';
import 'package:netease_plugin_core_kit/netease_plugin_core_kit.dart';
import 'package:nim_chatkit/location.dart';
import 'package:nim_chatkit_location/location_map_page.dart';
import 'package:nim_core/nim_core.dart' as nim;
import 'package:permission_handler/permission_handler.dart';

import 'chat_kit_message_location_item.dart';
import 'l10n/S.dart';

class ChatKitLocation {
static const String kPackage = 'nim_chatkit_location';
Expand All @@ -15,6 +22,8 @@ class ChatKitLocation {

static const String _kName = 'ChatKitLocation';

final String locationMessageType = 'location';

///高德地图Android 端的key
///如果要使用默认的地图消息,必须设置
String? aMapAndroidKey;
Expand All @@ -25,26 +34,91 @@ class ChatKitLocation {
///高德地图Web服务端端的key
String? aMapWebKey;

ChatKitLocation._() {
init();
}
Map<String, dynamic>? pushPayload;

ChatKitLocation._();

static final ChatKitLocation instance = ChatKitLocation._();

void init() {
IMKitRouter.instance.registerRouter(
RouterConstants.pathChatLocationPage,
(context) => LocationMapPage(
locationInfo: IMKitRouter.getArgumentFormMap<LocationInfo>(
context, 'locationInfo'),
needLocate:
IMKitRouter.getArgumentFormMap<bool>(context, 'needLocate') ??
false,
showOpenMap: IMKitRouter.getArgumentFormMap<bool>(
context, 'showOpenMap') ??
false,
));
void init(
{required String aMapAndroidKey,
required String aMapIOSKey,
required String aMapWebKey,
Map<String, dynamic>? pushPayload}) {
this.pushPayload = pushPayload;

///埋点上报
XKitReporter().register(moduleName: _kName, moduleVersion: _kVersion);

///注册位置消息入口
NimPluginCoreKit().itemPool.registerMoreAction(MessageInputAction(
type: 'location',
icon: SvgPicture.asset(
'images/ic_location.svg',
package: kPackage,
),
title: S.of().locationTitle,
permissions: [Permission.locationWhenInUse],
onTap: (context, sessionId, sessionType, {messageSender}) {
///去位置消息页面
Navigator.push(context, MaterialPageRoute(builder: (context) {
return LocationMapPage(
needLocate: true,
showOpenMap: false,
);
})).then((location) {
if (location != null && location is LocationInfo) {
///构建位置消息
nim.MessageBuilder.createLocationMessage(
sessionId: sessionId,
sessionType: sessionType,
latitude: location.latitude,
longitude: location.longitude,
address: location.address ?? '')
.then((ret) {
if (ret.isSuccess && ret.data != null) {
ret.data!.content = location.name;

///发送位置消息
messageSender?.call(ret.data!);
}
});
}
});
},
deniedTip: S.of().locationDeniedTips));

///注册位置消息解析
NimPluginCoreKit().messageBuilderPool.registerMessageTypeDecoder(
nim.NIMMessageType.location, (message) => locationMessageType);

///注册位置消息构建
NimPluginCoreKit().messageBuilderPool.registerMessageContentBuilder(
locationMessageType,
(context, message) => ChatKitMessageLocationItem(
message: message,
));

///初始化高德地图
initLocationMap(
aMapAndroidKey: aMapAndroidKey,
aMapIOSKey: aMapIOSKey,
aMapWebKey: aMapWebKey);
}

///初始化高德地图
void initLocationMap(
{required String aMapAndroidKey,
required String aMapIOSKey,
required String aMapWebKey}) {
//初始化定位组件
ChatKitLocation.instance.aMapAndroidKey = aMapAndroidKey;
ChatKitLocation.instance.aMapIOSKey = aMapIOSKey;
ChatKitLocation.instance.aMapWebKey = aMapWebKey;
//高德地图合规设置,并初始化地图
//由于个人信息保护法的实施,请务必确保调用SDK任何接口前先调用更新隐私合规updatePrivacyShow、updatePrivacyAgree两个接口
AMapFlutterLocation.updatePrivacyAgree(true);
AMapFlutterLocation.updatePrivacyShow(true, true);
AMapFlutterLocation.setApiKey(aMapAndroidKey, aMapIOSKey);
}
}
57 changes: 0 additions & 57 deletions nim_chatkit_location/lib/chatkit_location_provider_impl.dart

This file was deleted.

Loading

0 comments on commit 88e7eb8

Please sign in to comment.