|
|
|
@ -3,6 +3,7 @@ import 'dart:ui';
@@ -3,6 +3,7 @@ import 'dart:ui';
|
|
|
|
|
import 'package:flutter/material.dart'; |
|
|
|
|
import 'package:pluto_grid/pluto_grid.dart'; |
|
|
|
|
import 'package:win_text_editor/framework/common/constants.dart'; |
|
|
|
|
import 'package:win_text_editor/modules/code_creater/services/code_create_service.dart'; |
|
|
|
|
import 'package:win_text_editor/modules/outline/models/outline_node.dart'; |
|
|
|
|
import 'package:win_text_editor/shared/components/my_pluto_column.dart'; |
|
|
|
|
import 'package:win_text_editor/shared/components/my_pluto_configuration.dart'; |
|
|
|
@ -14,6 +15,7 @@ class NodeTable extends StatefulWidget {
@@ -14,6 +15,7 @@ class NodeTable extends StatefulWidget {
|
|
|
|
|
final Function(int) onDeleteMember; |
|
|
|
|
final Function(int) onMoveToTop; |
|
|
|
|
final Function(int) onMoveToBottom; |
|
|
|
|
final Function(int, String)? onActionTypeChanged; // 新增回调函数 |
|
|
|
|
|
|
|
|
|
const NodeTable({ |
|
|
|
|
super.key, |
|
|
|
@ -22,6 +24,7 @@ class NodeTable extends StatefulWidget {
@@ -22,6 +24,7 @@ class NodeTable extends StatefulWidget {
|
|
|
|
|
required this.onDeleteMember, |
|
|
|
|
required this.onMoveToTop, |
|
|
|
|
required this.onMoveToBottom, |
|
|
|
|
this.onActionTypeChanged, // 新增参数 |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
@override |
|
|
|
@ -79,6 +82,9 @@ class NodeTableState extends State<NodeTable> {
@@ -79,6 +82,9 @@ class NodeTableState extends State<NodeTable> {
|
|
|
|
|
_stateManager?.setSelectingMode(PlutoGridSelectingMode.row); |
|
|
|
|
_stateManager?.addListener(_handleRowSelection); |
|
|
|
|
}, |
|
|
|
|
onChanged: (PlutoGridOnChangedEvent event) { |
|
|
|
|
_handleCellChanged(event); |
|
|
|
|
}, |
|
|
|
|
onRowDoubleTap: (event) { |
|
|
|
|
_selectedRowIndex = event.rowIdx; |
|
|
|
|
}, |
|
|
|
@ -166,6 +172,23 @@ class NodeTableState extends State<NodeTable> {
@@ -166,6 +172,23 @@ class NodeTableState extends State<NodeTable> {
|
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void _handleCellChanged(PlutoGridOnChangedEvent event) { |
|
|
|
|
if (event.column?.field == 'type' && event.rowIdx != null) { |
|
|
|
|
final rowIndex = event.rowIdx!; |
|
|
|
|
if (rowIndex >= 0 && rowIndex < widget.members.length) { |
|
|
|
|
final newValue = event.value?.toString() ?? ''; |
|
|
|
|
setState(() { |
|
|
|
|
widget.members[rowIndex].selectedAction = newValue; |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
// 通知controller |
|
|
|
|
if (widget.onActionTypeChanged != null) { |
|
|
|
|
widget.onActionTypeChanged!(rowIndex, newValue); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
final Map<Key, _NodeTypeData> _nodeTypeData = {}; |
|
|
|
|
|
|
|
|
|
List<PlutoColumn> _buildColumns() { |
|
|
|
@ -201,7 +224,13 @@ class NodeTableState extends State<NodeTable> {
@@ -201,7 +224,13 @@ class NodeTableState extends State<NodeTable> {
|
|
|
|
|
.map((index, member) { |
|
|
|
|
final rowKey = ValueKey('${member.hashCode}_$index'); |
|
|
|
|
final options = _getOptions(member.value); |
|
|
|
|
final initialValue = options.isNotEmpty ? options.first : ''; |
|
|
|
|
// Use selectedAction if it exists, otherwise use the first option |
|
|
|
|
final initialValue = |
|
|
|
|
member.selectedAction?.isNotEmpty == true |
|
|
|
|
? member.selectedAction! |
|
|
|
|
: options.isNotEmpty |
|
|
|
|
? options.first |
|
|
|
|
: ''; |
|
|
|
|
|
|
|
|
|
_nodeTypeData[rowKey] = _NodeTypeData(member.value, initialValue); |
|
|
|
|
|
|
|
|
@ -221,21 +250,6 @@ class NodeTableState extends State<NodeTable> {
@@ -221,21 +250,6 @@ class NodeTableState extends State<NodeTable> {
|
|
|
|
|
.toList(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
List<String> _getOptions(String type) { |
|
|
|
|
switch (type) { |
|
|
|
|
case Constants.atomFunction: |
|
|
|
|
case Constants.atomService: |
|
|
|
|
case Constants.business: |
|
|
|
|
return ['普通调用', '事务调用']; |
|
|
|
|
case Constants.uftTable: |
|
|
|
|
return ['获取记录', '遍历记录', '插入记录', '修改记录', '删除记录']; |
|
|
|
|
case Constants.component: |
|
|
|
|
return ['获取组件', '遍历组件', '插入组件', '修改组件', '尾部插入组件']; |
|
|
|
|
default: |
|
|
|
|
return ['']; // 确保返回非空列表 |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void refreshTable() { |
|
|
|
|
if (_stateManager != null) { |
|
|
|
|
_stateManager!.refRows.clear(); |
|
|
|
@ -250,4 +264,8 @@ class NodeTableState extends State<NodeTable> {
@@ -250,4 +264,8 @@ class NodeTableState extends State<NodeTable> {
|
|
|
|
|
_scrollController.dispose(); |
|
|
|
|
super.dispose(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
List<String> _getOptions(String s) { |
|
|
|
|
return CodeCreateService.getNodeActions(s); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|