From 93cdb21f205382d75f0b82e26422c0bbf66b384c Mon Sep 17 00:00:00 2001 From: HHHxm2 Date: Mon, 11 Nov 2024 15:56:01 +0800 Subject: [PATCH 1/2] Signed-off-by: HHHxm2 flutter page register drag event handler --- .../ohos/flutter_embedding/flutter/index.ets | 2 +- .../ets/embedding/ohos/FlutterManager.ets | 25 ++++++++++ .../main/ets/embedding/ohos/FlutterPage.ets | 48 +++++++++++++++++++ 3 files changed, 74 insertions(+), 1 deletion(-) diff --git a/shell/platform/ohos/flutter_embedding/flutter/index.ets b/shell/platform/ohos/flutter_embedding/flutter/index.ets index 91a7282d72..8e44d57256 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/index.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/index.ets @@ -60,7 +60,7 @@ export { default as FlutterAbilityLaunchConfigs } from './src/main/ets/embedding export { default as FlutterEngineConfigurator } from './src/main/ets/embedding/ohos/FlutterEngineConfigurator'; export { default as FlutterEngineProvider } from './src/main/ets/embedding/ohos/FlutterEngineProvider'; export { default as FlutterEntry } from './src/main/ets/embedding/ohos/FlutterEntry'; -export { default as FlutterManager } from './src/main/ets/embedding/ohos/FlutterManager'; +export { default as FlutterManager, DragDropCallback as DragDropCallback } from './src/main/ets/embedding/ohos/FlutterManager'; export * from './src/main/ets/embedding/ohos/FlutterPage'; export { default as KeyboardManager } from './src/main/ets/embedding/ohos/KeyboardManager'; export { default as OhosTouchProcessor } from './src/main/ets/embedding/ohos/OhosTouchProcessor'; diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterManager.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterManager.ets index 0f449572ed..de56a3343e 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterManager.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterManager.ets @@ -18,6 +18,7 @@ import { FlutterView } from '../../view/FlutterView'; import UIAbility from '@ohos.app.ability.UIAbility'; import window from '@ohos.window'; import Log from '../../util/Log'; +import List from '@ohos.util.List'; const TAG = "FlutterManager" @@ -36,6 +37,26 @@ export default class FlutterManager { private uiAbilityList = new Array(); private windowStageList = new Map(); private mFullScreenListener: FullScreenListener = new DefaultFullScreenListener(); + private dragEnterCbs: List = new List(); + private dragMoveCbs: List = new List(); + private dragLeaveCbs: List = new List(); + private dropCbs: List = new List(); + + getDragEnterCbs() { + return this.dragEnterCbs; + } + + getDragMoveCbs() { + return this.dragMoveCbs; + } + + getDragLeaveCbs() { + return this.dragLeaveCbs; + } + + getDropCbs() { + return this.dropCbs; + } pushUIAbility(uiAbility: UIAbility) { this.uiAbilityList.push(uiAbility); @@ -118,6 +139,10 @@ export default class FlutterManager { } } +export interface DragDropCallback { + do(event: DragEvent, extraParams: string): void; +} + export interface FullScreenListener { useFullScreen(): boolean; setUseFullScreen(useFullScreen: boolean, context?: Context | null | undefined): void; diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterPage.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterPage.ets index 15af51a2dd..0162cf764e 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterPage.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterPage.ets @@ -84,6 +84,30 @@ export struct FlutterPage { this.flutterView?.onKeyEvent(event); return false; }) + .onDragEnter((event: DragEvent, extraParams: string) => { + FlutterManager.getInstance().getDragEnterCbs().forEach(dragEnterCb => { + dragEnterCb.do(event, extraParams); + }); + Log.d(TAG, "onDragEnter"); + }) + .onDragMove((event: DragEvent, extraParams: string) => { + FlutterManager.getInstance().getDragMoveCbs().forEach(dragMoveCb => { + dragMoveCb.do(event, extraParams); + }); + Log.d(TAG, "onDragMove"); + }) + .onDragLeave((event: DragEvent, extraParams: string) => { + FlutterManager.getInstance().getDragLeaveCbs().forEach(dragLeaveCb => { + dragLeaveCb.do(event, extraParams); + }); + Log.d(TAG, "onDragLeave"); + }) + .onDrop((event: DragEvent, extraParams: string) => { + FlutterManager.getInstance().getDropCbs().forEach(dropCb => { + dropCb.do(event, extraParams); + }); + Log.d(TAG, "onDrop"); + }) } @Builder mouseWheelPage() { Stack() { @@ -138,6 +162,30 @@ export struct FlutterPage { this.flutterView?.onKeyEvent(event); return false; }) + .onDragEnter((event: DragEvent, extraParams: string) => { + FlutterManager.getInstance().getDragEnterCbs().forEach(dragEnterCb => { + dragEnterCb.do(event, extraParams); + }); + Log.d(TAG, "onDragEnter"); + }) + .onDragMove((event: DragEvent, extraParams: string) => { + FlutterManager.getInstance().getDragMoveCbs().forEach(dragMoveCb => { + dragMoveCb.do(event, extraParams); + }); + Log.d(TAG, "onDragMove"); + }) + .onDragLeave((event: DragEvent, extraParams: string) => { + FlutterManager.getInstance().getDragLeaveCbs().forEach(dragLeaveCb => { + dragLeaveCb.do(event, extraParams); + }); + Log.d(TAG, "onDragLeave"); + }) + .onDrop((event: DragEvent, extraParams: string) => { + FlutterManager.getInstance().getDropCbs().forEach(dropCb => { + dropCb.do(event, extraParams); + }); + Log.d(TAG, "onDrop"); + }) .gesture( PanGesture(this.panOption) .onActionStart((event: GestureEvent) => { -- Gitee From a2ab5b9a6ac83d63a3196f6d73fe5cfed5340bb8 Mon Sep 17 00:00:00 2001 From: HHHxm2 Date: Tue, 12 Nov 2024 20:42:02 +0800 Subject: [PATCH 2/2] drag event callback Signed-off-by: HHHxm2 --- .../ets/embedding/ohos/FlutterManager.ets | 75 ++++++++++++++++--- 1 file changed, 63 insertions(+), 12 deletions(-) diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterManager.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterManager.ets index de56a3343e..b3e2f0598c 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterManager.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterManager.ets @@ -18,6 +18,7 @@ import { FlutterView } from '../../view/FlutterView'; import UIAbility from '@ohos.app.ability.UIAbility'; import window from '@ohos.window'; import Log from '../../util/Log'; +import HashMap from '@ohos.util.HashMap'; import List from '@ohos.util.List'; const TAG = "FlutterManager" @@ -37,25 +38,75 @@ export default class FlutterManager { private uiAbilityList = new Array(); private windowStageList = new Map(); private mFullScreenListener: FullScreenListener = new DefaultFullScreenListener(); - private dragEnterCbs: List = new List(); - private dragMoveCbs: List = new List(); - private dragLeaveCbs: List = new List(); - private dropCbs: List = new List(); - getDragEnterCbs() { - return this.dragEnterCbs; + private dragEnterCbId: number = 1; + private dragMoveCbId: number = 1; + private dragLeaveCbId: number = 1; + private dropCbId: number = 1; + + private dragEnterCbs: HashMap = new HashMap(); + private dragMoveCbs: HashMap = new HashMap(); + private dragLeaveCbs: HashMap = new HashMap(); + private dropCbs: HashMap = new HashMap(); + + private getValuesFromMap(map: HashMap): List { + let list: List = new List(); + map.forEach((value, key) => { + list.add(value); + }); + return list; + } + + getDragEnterCbs(): List { + return this.getValuesFromMap(this.dragEnterCbs); + } + + getDragMoveCbs(): List { + return this.getValuesFromMap(this.dragMoveCbs); + } + + getDragLeaveCbs(): List { + return this.getValuesFromMap(this.dragLeaveCbs); + } + + getDropCbs(): List { + return this.getValuesFromMap(this.dropCbs); + } + + addDragEnterCb(callback: DragDropCallback): number { + this.dragEnterCbs.set(this.dragEnterCbId, callback); + return this.dragEnterCbId++; + } + + addDragMoveCb(callback: DragDropCallback): number { + this.dragMoveCbs.set(this.dragMoveCbId, callback); + return this.dragMoveCbId++; + } + + addDragLeaveCb(callback: DragDropCallback): number { + this.dragLeaveCbs.set(this.dragLeaveCbId, callback); + return this.dragLeaveCbId++; + } + + addDropCb(callback: DragDropCallback): number { + this.dropCbs.set(this.dropCbId, callback); + return this.dropCbId++; + } + + removeDragEnterCb(id: number) { + this.dragEnterCbs.remove(id); } - getDragMoveCbs() { - return this.dragMoveCbs; + removeDragMoveCb(id: number) { + this.dragMoveCbs.remove(id); } - getDragLeaveCbs() { - return this.dragLeaveCbs; + removeDragLeaveCb(id: number) { + this.dragLeaveCbs.remove(id); } - getDropCbs() { - return this.dropCbs; + removeDropCb(id: number) { + this.dropCbs.remove(id); } pushUIAbility(uiAbility: UIAbility) { -- Gitee