HarmonyOS鸿蒙Next求助贴:在Flutter页面使用Platformview嵌入原生组件

HarmonyOS鸿蒙Next求助贴:在Flutter页面使用Platformview嵌入原生组件 我跟着https://gitee.com/openharmony-sig/flutter_samples/blob/master/ohos/docs/04_development/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8PlatformView.md文档使用platformview嵌入了一个原生组件,交互通信都已经跑通了,但是现在面临了一个问题,就是手势事件传递,我想要实现一个功能,就是在一个flutter列表中的一个item上,使用platformview嵌入了鸿蒙的原生组件,我想要在滑动鸿蒙原生组件的某个区域的时候flutter列表禁止滚动,只让鸿蒙原生组件响应本次触摸事件,在滑动其他区域的时候flutter列表可以滚动,鸿蒙原生组件不响应本次触摸事件,求大佬支招,下边是我使用的代码,但是实现不了我的要求

private handleTouchEvent(event: TouchEvent) {
  const eventType = event.type
  if (eventType === TouchType.Down) {
    const touchX = event.touches[0].x
    const touchY = event.touches[0].y

    // 判断触摸点是否在子组件区域内
    this.isInChildArea = this.isPointInChildArea(touchX, touchY)

    if (this.isInChildArea) {
      event.stopPropagation()
    }
    // 通知Flutter是否需要拦截手势
    this.notifyFlutterGestureIntercept(this.isInChildArea)
  }  else if (eventType === TouchType.Up || eventType === TouchType.Cancel) {
    this.notifyFlutterGestureIntercept(false)
  }
}

更多关于HarmonyOS鸿蒙Next求助贴:在Flutter页面使用Platformview嵌入原生组件的实战教程也可以访问 https://www.itying.com/category-92-b0.html

2 回复

在HarmonyOS Next中,Flutter通过PlatformView机制嵌入原生组件。使用ohos.agp.components.Component作为基础,创建自定义PlatformViewFactory和PlatformView。在Dart端通过AndroidView Widget指定viewType,与原生层注册的Factory匹配。需在module.json5中声明所需原生能力权限,并确保UI线程同步。

更多关于HarmonyOS鸿蒙Next求助贴:在Flutter页面使用Platformview嵌入原生组件的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


要实现Flutter列表与PlatformView原生组件的手势事件隔离,关键在于通过HitTest机制控制事件分发。建议在原生侧通过onTouchEvent判断触摸区域,当位于特定子组件区域时:

  1. 调用event.stopPropagation()阻止事件向父组件传递
  2. 通过MethodChannel通知Flutter侧禁用ScrollController(需在Flutter侧实现setEnable(false))
  3. 在TouchType.Up/Cancel时重新启用滚动

Flutter侧需要:

  • 监听MethodChannel调用
  • 通过GlobalKey获取ScrollController动态设置physics属性

注意:需要确保坐标转换正确,建议使用globalToLocal进行坐标映射。

回到顶部