Browse Source

行移动和删除完成

master
hejl 3 weeks ago
parent
commit
241581686b
  1. 8
      win_text_editor/lib/modules/code_creater/controllers/code_creater_controller.dart
  2. 38
      win_text_editor/lib/modules/code_creater/widgets/code_creater_view.dart
  3. 14
      win_text_editor/lib/modules/code_creater/widgets/node_table.dart

8
win_text_editor/lib/modules/code_creater/controllers/code_creater_controller.dart

@ -3,7 +3,13 @@ import 'package:win_text_editor/modules/outline/models/outline_node.dart'; @@ -3,7 +3,13 @@ import 'package:win_text_editor/modules/outline/models/outline_node.dart';
import 'package:win_text_editor/shared/base/base_content_controller.dart';
class CodeCreaterController extends BaseContentController {
List<OutlineNode> members = [];
List<OutlineNode> _members = [];
List<OutlineNode> get members => _members;
void updateMembers(List<OutlineNode> newMembers) {
_members = newMembers;
notifyListeners(); //
}
@override
void onOpenFile(String filePath, {dynamic appendArg}) {

38
win_text_editor/lib/modules/code_creater/widgets/code_creater_view.dart

@ -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; //
}
void _moveToTop(int index) {
if (index > 0) {
final member = _controller.members[from];
setState(() {
final member = _controller.members.removeAt(index);
_controller.members.insert(0, member);
_controller.members.removeAt(from);
});
}
}
void _moveToBottom(int index) {
if (index < _controller.members.length - 1) {
await Future.delayed(const Duration(milliseconds: 50)); // UI
setState(() {
final member = _controller.members.removeAt(index);
_controller.members.add(member);
_controller.members.insert(to, member); //
});
}
void _moveToTop(int index) {
_move(index, 0);
}
void _moveToBottom(int index) {
_move(index, _controller.members.length - 1);
}
void _deleteMember(int index) {

14
win_text_editor/lib/modules/code_creater/widgets/node_table.dart

@ -24,7 +24,7 @@ class NodeTable extends StatefulWidget { @@ -24,7 +24,7 @@ class NodeTable extends StatefulWidget {
});
@override
State<NodeTable> createState() => _NodeTableState();
State<NodeTable> createState() => NodeTableState();
}
class _NodeTypeData {
@ -34,7 +34,7 @@ class _NodeTypeData { @@ -34,7 +34,7 @@ class _NodeTypeData {
_NodeTypeData(this.originalType, this.currentSelection);
}
class _NodeTableState extends State<NodeTable> {
class NodeTableState extends State<NodeTable> {
PlutoGridStateManager? _stateManager;
int? _selectedRowIndex;
final ScrollController _scrollController = ScrollController();
@ -67,7 +67,7 @@ class _NodeTableState extends State<NodeTable> { @@ -67,7 +67,7 @@ class _NodeTableState extends State<NodeTable> {
child: SizedBox(
width: MediaQuery.of(context).size.width * 0.4,
child: PlutoGrid(
key: ValueKey('pluto_grid_${widget.members.length}'),
key: widget.key,
configuration: MyPlutoGridConfiguration(),
columns: _buildColumns(),
mode: PlutoGridMode.normal,
@ -234,6 +234,14 @@ class _NodeTableState extends State<NodeTable> { @@ -234,6 +234,14 @@ class _NodeTableState extends State<NodeTable> {
}
}
void refreshTable() {
if (_stateManager != null) {
_stateManager!.refRows.clear();
_stateManager!.refRows.addAll(_buildRows(widget.members));
_stateManager!.notifyListeners();
}
}
@override
void dispose() {
_stateManager?.removeListener(_handleRowSelection);

Loading…
Cancel
Save