错误原因
代码报错 "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的精彩世界!