|
|
@ -13,6 +13,7 @@ class NodeTable extends StatefulWidget { |
|
|
|
final List<OutlineNode> members; |
|
|
|
final List<OutlineNode> members; |
|
|
|
final Function(int, int) onMoveMember; |
|
|
|
final Function(int, int) onMoveMember; |
|
|
|
final Function(int) onDeleteMember; |
|
|
|
final Function(int) onDeleteMember; |
|
|
|
|
|
|
|
final Function() onDeleteAll; |
|
|
|
final Function(int) onMoveToTop; |
|
|
|
final Function(int) onMoveToTop; |
|
|
|
final Function(int) onMoveToBottom; |
|
|
|
final Function(int) onMoveToBottom; |
|
|
|
final Function(int, String)? onActionTypeChanged; // 新增回调函数 |
|
|
|
final Function(int, String)? onActionTypeChanged; // 新增回调函数 |
|
|
@ -22,6 +23,7 @@ class NodeTable extends StatefulWidget { |
|
|
|
required this.members, |
|
|
|
required this.members, |
|
|
|
required this.onMoveMember, |
|
|
|
required this.onMoveMember, |
|
|
|
required this.onDeleteMember, |
|
|
|
required this.onDeleteMember, |
|
|
|
|
|
|
|
required this.onDeleteAll, |
|
|
|
required this.onMoveToTop, |
|
|
|
required this.onMoveToTop, |
|
|
|
required this.onMoveToBottom, |
|
|
|
required this.onMoveToBottom, |
|
|
|
this.onActionTypeChanged, // 新增参数 |
|
|
|
this.onActionTypeChanged, // 新增参数 |
|
|
@ -108,6 +110,7 @@ class NodeTableState extends State<NodeTable> { |
|
|
|
final canMoveUp = _selectedRowIndex != null && _selectedRowIndex! > 0; |
|
|
|
final canMoveUp = _selectedRowIndex != null && _selectedRowIndex! > 0; |
|
|
|
final canMoveDown = _selectedRowIndex != null && _selectedRowIndex! < widget.members.length - 1; |
|
|
|
final canMoveDown = _selectedRowIndex != null && _selectedRowIndex! < widget.members.length - 1; |
|
|
|
final canDelete = _selectedRowIndex != null; |
|
|
|
final canDelete = _selectedRowIndex != null; |
|
|
|
|
|
|
|
final canDeleteAll = widget.members.isNotEmpty; |
|
|
|
|
|
|
|
|
|
|
|
return Padding( |
|
|
|
return Padding( |
|
|
|
padding: const EdgeInsets.all(2.0), |
|
|
|
padding: const EdgeInsets.all(2.0), |
|
|
@ -158,6 +161,15 @@ class NodeTableState extends State<NodeTable> { |
|
|
|
onPressed: canDelete ? () => widget.onDeleteMember(_selectedRowIndex!) : null, |
|
|
|
onPressed: canDelete ? () => widget.onDeleteMember(_selectedRowIndex!) : null, |
|
|
|
tooltip: '删除行', |
|
|
|
tooltip: '删除行', |
|
|
|
), |
|
|
|
), |
|
|
|
|
|
|
|
IconButton( |
|
|
|
|
|
|
|
icon: Icon( |
|
|
|
|
|
|
|
Icons.delete_forever, |
|
|
|
|
|
|
|
size: 14, |
|
|
|
|
|
|
|
color: canDeleteAll ? Colors.red : Colors.grey, |
|
|
|
|
|
|
|
), |
|
|
|
|
|
|
|
onPressed: canDeleteAll ? _showDeleteAllConfirmation : null, |
|
|
|
|
|
|
|
tooltip: '全部删除', |
|
|
|
|
|
|
|
), |
|
|
|
], |
|
|
|
], |
|
|
|
), |
|
|
|
), |
|
|
|
], |
|
|
|
], |
|
|
@ -165,6 +177,36 @@ class NodeTableState extends State<NodeTable> { |
|
|
|
); |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void _showDeleteAllConfirmation() { |
|
|
|
|
|
|
|
showDialog( |
|
|
|
|
|
|
|
context: context, |
|
|
|
|
|
|
|
builder: (BuildContext context) { |
|
|
|
|
|
|
|
return AlertDialog( |
|
|
|
|
|
|
|
title: const Text('确认删除'), |
|
|
|
|
|
|
|
content: const Text('确定要删除所有节点吗?此操作不可撤销。'), |
|
|
|
|
|
|
|
actions: [ |
|
|
|
|
|
|
|
TextButton(onPressed: () => Navigator.of(context).pop(false), child: const Text('取消')), |
|
|
|
|
|
|
|
TextButton( |
|
|
|
|
|
|
|
onPressed: () { |
|
|
|
|
|
|
|
Navigator.of(context).pop(true); |
|
|
|
|
|
|
|
_deleteAllMembers(); |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
child: const Text('删除', style: TextStyle(color: Colors.red)), |
|
|
|
|
|
|
|
), |
|
|
|
|
|
|
|
], |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 添加删除所有成员的方法 |
|
|
|
|
|
|
|
void _deleteAllMembers() { |
|
|
|
|
|
|
|
setState(() { |
|
|
|
|
|
|
|
_selectedRowIndex = null; |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
widget.onDeleteAll(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void _handleRowSelection() { |
|
|
|
void _handleRowSelection() { |
|
|
|
if (_stateManager?.currentRow == null) return; |
|
|
|
if (_stateManager?.currentRow == null) return; |
|
|
|
setState(() { |
|
|
|
setState(() { |
|
|
|