在这里插入图片描述

错误原因

代码报错 "Unhandled Exception: type 'DragTargetDetails<int>' is not a subtype of type 'int' in type cast" 的原因是您在 onAcceptWithDetails 回调中尝试将 data 强制转换为 int 类型。然而,data 实际上是 DragTargetDetails<int> 类型的对象,它包含有关拖动操作的更多信息,例如放置位置和拖动数据。

错误源码

onAcceptWithDetails: (data) async {
  // 在拖动对象被释放到 DragTarget 区域内时调用
  // 处理接受的拖动数据
  // Delete the configuration when dropped on the target
  print("mytest ${data}");
  if(await DatabaseHelper.dbhelper.doesTaskIdOccupied(data as int)){
    showToast('该配置被占用无法删除,请先删除占用的系列配置');
  }else{
    DatabaseHelper.dbhelper.deleteTaskDataById(data as int);
  }
  setState(() {
    // this.data = data.toString() ?? 'No Data';
  });
},

解决方法

要修复此错误,您需要在将 data 强制转换为 int 之前从 DragTargetDetails 对象中提取拖动数据。您可以通过访问 DragTargetDetails 对象的 data 属性来完成此操作。以下是更新后的代码:

onAcceptWithDetails: (DragTargetDetails<int> details) async {
  // 在拖动对象被释放到 DragTarget 区域内时调用
  // 处理接受的拖动数据
  // Delete the configuration when dropped on the target
  final taskId = details.data; // Extract the drag data from DragTargetDetails
  print("mytest ${taskId}");
  if(await DatabaseHelper.dbhelper.doesTaskIdOccupied(taskId)){
    showToast('该配置被占用无法删除,请先删除占用的系列配置');
  }else{
    DatabaseHelper.dbhelper.deleteTaskDataById(taskId);
  }
  setState(() {
    // this.data = data.toString() ?? 'No Data';
  });
},

通过使用 final taskId = details.data; 来提取拖动数据,您可以避免类型转换错误并正确访问任务 ID。


结束语 Flutter是一个由Google开发的开源UI工具包,它可以让您在不同平台上创建高质量、美观的应用程序,而无需编写大量平台特定的代码。我将学习和深入研究Flutter的方方面面。从基础知识到高级技巧,从UI设计到性能优化,欢饮关注一起讨论学习,共同进入Flutter的精彩世界!