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';
import 'package:win_text_editor/shared/base/base_content_controller.dart'; import 'package:win_text_editor/shared/base/base_content_controller.dart';
class CodeCreaterController extends BaseContentController { class CodeCreaterController extends BaseContentController {
List<OutlineNode> members = []; List<OutlineNode> _members = [];
List<OutlineNode> get members => _members;
void updateMembers(List<OutlineNode> newMembers) {
_members = newMembers;
notifyListeners(); //
}
@override @override
void onOpenFile(String filePath, {dynamic appendArg}) { 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';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.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/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/controllers/code_creater_controller.dart';
import 'package:win_text_editor/modules/code_creater/widgets/node_table.dart'; import 'package:win_text_editor/modules/code_creater/widgets/node_table.dart';
@ -65,6 +66,7 @@ class _CodeCreaterViewState extends State<CodeCreaterView> {
child: Padding( child: Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: NodeTable( child: NodeTable(
key: ValueKey(_controller.members.length), //
members: _controller.members, members: _controller.members,
onMoveMember: _moveMember, onMoveMember: _moveMember,
onDeleteMember: _deleteMember, onDeleteMember: _deleteMember,
@ -96,31 +98,35 @@ class _CodeCreaterViewState extends State<CodeCreaterView> {
} }
void _moveMember(int index, int direction) { void _moveMember(int index, int direction) {
final newIndex = index + direction; _move(index, index + direction);
if (newIndex >= 0 && newIndex < _controller.members.length) {
setState(() {
final member = _controller.members.removeAt(index);
_controller.members.insert(newIndex, member);
});
} }
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) { final member = _controller.members[from];
if (index > 0) {
setState(() { setState(() {
final member = _controller.members.removeAt(index); _controller.members.removeAt(from);
_controller.members.insert(0, member);
}); });
}
}
void _moveToBottom(int index) { await Future.delayed(const Duration(milliseconds: 50)); // UI
if (index < _controller.members.length - 1) {
setState(() { setState(() {
final member = _controller.members.removeAt(index); _controller.members.insert(to, member); //
_controller.members.add(member);
}); });
} }
void _moveToTop(int index) {
_move(index, 0);
}
void _moveToBottom(int index) {
_move(index, _controller.members.length - 1);
} }
void _deleteMember(int index) { void _deleteMember(int index) {

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

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

Loading…
Cancel
Save