|
|
|
@ -2,6 +2,7 @@ import 'dart:ui';
@@ -2,6 +2,7 @@ import 'dart:ui';
|
|
|
|
|
|
|
|
|
|
import 'package:flutter/material.dart'; |
|
|
|
|
import 'package:provider/provider.dart'; |
|
|
|
|
import 'package:win_text_editor/framework/controllers/logger.dart'; |
|
|
|
|
import 'package:win_text_editor/framework/controllers/tab_items_controller.dart'; |
|
|
|
|
import 'package:win_text_editor/modules/code_creater/controllers/code_creater_controller.dart'; |
|
|
|
|
import 'package:win_text_editor/modules/code_creater/widgets/node_table.dart'; |
|
|
|
@ -65,6 +66,7 @@ class _CodeCreaterViewState extends State<CodeCreaterView> {
@@ -65,6 +66,7 @@ class _CodeCreaterViewState extends State<CodeCreaterView> {
|
|
|
|
|
child: Padding( |
|
|
|
|
padding: const EdgeInsets.all(8.0), |
|
|
|
|
child: NodeTable( |
|
|
|
|
key: ValueKey(_controller.members.length), // 确保唯一绑定 |
|
|
|
|
members: _controller.members, |
|
|
|
|
onMoveMember: _moveMember, |
|
|
|
|
onDeleteMember: _deleteMember, |
|
|
|
@ -96,31 +98,35 @@ class _CodeCreaterViewState extends State<CodeCreaterView> {
@@ -96,31 +98,35 @@ class _CodeCreaterViewState extends State<CodeCreaterView> {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void _moveMember(int index, int direction) { |
|
|
|
|
final newIndex = index + direction; |
|
|
|
|
if (newIndex >= 0 && newIndex < _controller.members.length) { |
|
|
|
|
setState(() { |
|
|
|
|
final member = _controller.members.removeAt(index); |
|
|
|
|
_controller.members.insert(newIndex, member); |
|
|
|
|
}); |
|
|
|
|
_move(index, index + direction); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void _move(int from, int to) async { |
|
|
|
|
if (from < 0 || |
|
|
|
|
from >= _controller.members.length || |
|
|
|
|
to < 0 || |
|
|
|
|
to >= _controller.members.length) { |
|
|
|
|
return; // 越界检查 |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
final member = _controller.members[from]; |
|
|
|
|
setState(() { |
|
|
|
|
_controller.members.removeAt(from); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
await Future.delayed(const Duration(milliseconds: 50)); // 让 UI 响应删除操作 |
|
|
|
|
|
|
|
|
|
setState(() { |
|
|
|
|
_controller.members.insert(to, member); // 再插入 |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void _moveToTop(int index) { |
|
|
|
|
if (index > 0) { |
|
|
|
|
setState(() { |
|
|
|
|
final member = _controller.members.removeAt(index); |
|
|
|
|
_controller.members.insert(0, member); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
_move(index, 0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void _moveToBottom(int index) { |
|
|
|
|
if (index < _controller.members.length - 1) { |
|
|
|
|
setState(() { |
|
|
|
|
final member = _controller.members.removeAt(index); |
|
|
|
|
_controller.members.add(member); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
_move(index, _controller.members.length - 1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void _deleteMember(int index) { |
|
|
|
|