Browse Source

基础状态已正常显示

master
hejl 2 months ago
parent
commit
f29ce020bf
  1. 13
      win_text_editor/assets/config/uft_macro_list.yaml
  2. 51
      win_text_editor/lib/framework/services/uft_macro_service.dart
  3. 49
      win_text_editor/lib/modules/memory_table/controllers/base_data_source.dart
  4. 72
      win_text_editor/lib/modules/memory_table/controllers/memory_table_controller.dart
  5. 34
      win_text_editor/lib/modules/memory_table/models/memory_table.dart
  6. 6
      win_text_editor/lib/modules/memory_table/services/memory_table_service.dart
  7. 138
      win_text_editor/lib/modules/memory_table/widgets/memory_table_right_side.dart
  8. 8
      win_text_editor/lib/modules/memory_table/widgets/memory_table_view.dart
  9. 8
      win_text_editor/pubspec.lock
  10. 3
      win_text_editor/pubspec.yaml

13
win_text_editor/assets/config/uft_macro_list.yaml

@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
获取记录:|
<M>[获取记录][{{tableName}}({{keyName}})
][
{{#keyFields}}
{{.}} = @{{.}}{{^@last}}, {{/@last}}
{{/keyFields}}
]
[继续执行]
[记录为空][{{tableName}}]
{
[报错返回][][{{#keyFields}}{{.}} = @{{.}}{{^@last}}, {{/@last}}{{/keyFields}}]
}

51
win_text_editor/lib/framework/services/uft_macro_service.dart

@ -0,0 +1,51 @@ @@ -0,0 +1,51 @@
import 'package:flutter/services.dart' show rootBundle;
import 'package:yaml/yaml.dart';
class UftMacroService {
static final UftMacroService _instance = UftMacroService._internal();
factory UftMacroService() => _instance;
UftMacroService._internal();
late Map<String, dynamic> _config;
static bool _isInitialized = false;
//
Future<void> init() async {
if (_isInitialized) return;
final configString = await rootBundle.loadString('assets/config/uft_macro_list.yaml');
final yamlMap = loadYaml(configString) as YamlMap;
final globalConfig = yamlMap['global'] as YamlMap? ?? {};
_config = {...globalConfig};
_isInitialized = true;
}
//
dynamic get(String key) {
return _config[key];
}
//
String getString(String key) {
return _config[key] as String;
}
//
bool getBool(String key) {
return _config[key] as bool;
}
//
int getInt(String key) {
return _config[key] as int;
}
//
List<T> getList<T>(String key) {
final list = _config[key] as List;
return list.cast<T>();
}
}

49
win_text_editor/lib/modules/memory_table/controllers/base_data_source.dart

@ -1,16 +1,18 @@ @@ -1,16 +1,18 @@
import 'package:flutter/material.dart';
import 'package:syncfusion_flutter_datagrid/datagrid.dart';
import 'package:win_text_editor/modules/memory_table/models/memory_table.dart';
abstract class SelectableItem {
bool isSelected = false;
}
abstract class SelectableDataSource<T extends SelectableItem> extends DataGridSource {
SelectableDataSource(this.items) {
SelectableDataSource(this.items, {this.onSelectionChanged}) {
_selectionNotifier = ValueNotifier(false);
}
List<T> items;
final void Function(int index, bool isSelected)? onSelectionChanged;
late final ValueNotifier<bool> _selectionNotifier;
ValueNotifier<bool> get selectionNotifier => _selectionNotifier;
@ -23,9 +25,13 @@ abstract class SelectableDataSource<T extends SelectableItem> extends DataGridSo @@ -23,9 +25,13 @@ abstract class SelectableDataSource<T extends SelectableItem> extends DataGridSo
}
void toggleRowSelection(int index, bool? value) {
items[index].isSelected = value ?? false;
final newValue = value ?? false;
items[index].isSelected = newValue;
_updateSelectionState();
notifyListeners();
//
onSelectionChanged?.call(index, newValue);
}
void _updateSelectionState() {
@ -45,31 +51,11 @@ abstract class SelectableDataSource<T extends SelectableItem> extends DataGridSo @@ -45,31 +51,11 @@ abstract class SelectableDataSource<T extends SelectableItem> extends DataGridSo
}
}
class Field implements SelectableItem {
Field(this.id, this.name, this.chineseName, this.type, [this.isSelected = false]);
final String id;
final String name;
final String chineseName;
final String type;
@override
bool isSelected;
}
//
class Index implements SelectableItem {
Index(this.indexName, this.isPrimary, this.indexFields, this.rule, [this.isSelected = false]);
final String indexName;
final String isPrimary;
final String indexFields;
final String rule;
@override
bool isSelected;
}
class FieldsDataSource extends SelectableDataSource<Field> {
FieldsDataSource(List<Field> fields) : super(fields);
FieldsDataSource(
List<Field> fields, {
required Null Function(dynamic index, dynamic isSelected) onSelectionChanged,
}) : super(fields, onSelectionChanged: onSelectionChanged);
@override
List<DataGridRow> get rows =>
@ -87,6 +73,8 @@ class FieldsDataSource extends SelectableDataSource<Field> { @@ -87,6 +73,8 @@ class FieldsDataSource extends SelectableDataSource<Field> {
)
.toList();
get data => items;
@override
DataGridRowAdapter buildRow(DataGridRow row) {
final rowIndex = effectiveRows.indexOf(row);
@ -113,7 +101,10 @@ class FieldsDataSource extends SelectableDataSource<Field> { @@ -113,7 +101,10 @@ class FieldsDataSource extends SelectableDataSource<Field> {
//
class IndexesDataSource extends SelectableDataSource<Index> {
IndexesDataSource(List<Index> indexes) : super(indexes);
IndexesDataSource(
List<Index> indexes, {
required Null Function(dynamic index, dynamic isSelected) onSelectionChanged,
}) : super(indexes, onSelectionChanged: onSelectionChanged);
@override
List<DataGridRow> get rows =>
@ -123,7 +114,7 @@ class IndexesDataSource extends SelectableDataSource<Index> { @@ -123,7 +114,7 @@ class IndexesDataSource extends SelectableDataSource<Index> {
cells: [
DataGridCell<bool>(columnName: 'select', value: index.isSelected),
DataGridCell<String>(columnName: 'indexName', value: index.indexName),
DataGridCell<String>(columnName: 'isPrimary', value: index.isPrimary),
DataGridCell<bool>(columnName: 'isPrimary', value: index.isPrimary),
DataGridCell<String>(columnName: 'indexFields', value: index.indexFields),
DataGridCell<String>(columnName: 'rule', value: index.rule),
],
@ -131,6 +122,8 @@ class IndexesDataSource extends SelectableDataSource<Index> { @@ -131,6 +122,8 @@ class IndexesDataSource extends SelectableDataSource<Index> {
)
.toList();
get data => items;
@override
DataGridRowAdapter buildRow(DataGridRow row) {
final rowIndex = effectiveRows.indexOf(row);

72
win_text_editor/lib/modules/memory_table/controllers/memory_table_controller.dart

@ -1,6 +1,7 @@ @@ -1,6 +1,7 @@
import 'package:syncfusion_flutter_datagrid/datagrid.dart';
import 'package:win_text_editor/framework/controllers/logger.dart';
import 'package:win_text_editor/modules/memory_table/controllers/base_data_source.dart';
import 'package:win_text_editor/modules/memory_table/models/memory_table.dart';
import 'package:win_text_editor/modules/memory_table/services/memory_table_service.dart';
import 'package:win_text_editor/shared/base/base_content_controller.dart';
@ -12,24 +13,40 @@ class MemoryTableController extends BaseContentController { @@ -12,24 +13,40 @@ class MemoryTableController extends BaseContentController {
late DataGridSource fieldsSource;
late DataGridSource indexesSource;
late MemoryTableService _service;
final MemoryTableService _service;
// MemoryTable对象
late MemoryTable _memoryTable;
MemoryTableController() : _service = MemoryTableService(Logger()) {
//
fieldsSource = FieldsDataSource([
Field('1', '', '', ''), // 1
Field('2', '', '', ''), // 2
Field('3', '', '', ''), // 3
]);
indexesSource = IndexesDataSource([
Index('', '', '', ''), // 1
Index('', '', '', ''), // 2
]);
final initialFields = [Field('1', '', '', '', false), Field('2', '', '', '', false)];
final initialIndexes = [Index('', false, '', '', false)];
fieldsSource = FieldsDataSource(
initialFields,
onSelectionChanged: (index, isSelected) {
updateFieldSelection(index, isSelected);
},
);
indexesSource = IndexesDataSource(
initialIndexes,
onSelectionChanged: (index, isSelected) {
updateIndexSelection(index, isSelected);
},
);
// MemoryTable
_memoryTable = MemoryTable(tableName: '', columns: initialFields, indexes: initialIndexes);
}
String? get errorMessage => _errorMessage;
// MemoryTable
MemoryTable get memoryTable => _memoryTable;
@override
Future<void> onOpenFile(String filePath) async {
Logger().info("Opening file: $filePath");
@ -45,6 +62,13 @@ class MemoryTableController extends BaseContentController { @@ -45,6 +62,13 @@ class MemoryTableController extends BaseContentController {
(fieldsSource as FieldsDataSource).updateData(tableData.fields);
(indexesSource as IndexesDataSource).updateData(tableData.indexes);
// MemoryTable对象
_memoryTable = MemoryTable(
tableName: tableName,
columns: tableData.fields,
indexes: tableData.indexes,
);
// Clear any previous error
_errorMessage = null;
@ -57,6 +81,32 @@ class MemoryTableController extends BaseContentController { @@ -57,6 +81,32 @@ class MemoryTableController extends BaseContentController {
}
}
//
void updateFieldSelection(int index, bool isSelected) {
final fields = (fieldsSource as FieldsDataSource).data;
if (index >= 0 && index < fields.length) {
fields[index].isSelected = isSelected;
fieldsSource.notifyListeners();
// MemoryTable
_memoryTable.columns[index].isSelected = isSelected;
notifyListeners();
}
}
//
void updateIndexSelection(int index, bool isSelected) {
final indexes = (indexesSource as IndexesDataSource).data;
if (index >= 0 && index < indexes.length) {
indexes[index].isSelected = isSelected;
indexesSource.notifyListeners();
// MemoryTable
_memoryTable.indexes[index].isSelected = isSelected;
notifyListeners();
}
}
@override
void onOpenFolder(String folderPath) {
//

34
win_text_editor/lib/modules/memory_table/models/memory_table.dart

@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
import 'package:win_text_editor/modules/memory_table/controllers/base_data_source.dart';
class Field implements SelectableItem {
Field(this.id, this.name, this.chineseName, this.type, [this.isSelected = false]);
final String id;
final String name;
final String chineseName;
final String type;
@override
bool isSelected;
}
//
class Index implements SelectableItem {
Index(this.indexName, this.isPrimary, this.indexFields, this.rule, [this.isSelected = false]);
final String indexName;
final bool isPrimary;
final String indexFields;
final String rule;
@override
bool isSelected;
List<String> get fields => indexFields.split(',').map((e) => e.trim()).toList();
}
class MemoryTable {
final String tableName;
final List<Field> columns;
final List<Index> indexes;
MemoryTable({required this.tableName, required this.columns, required this.indexes});
}

6
win_text_editor/lib/modules/memory_table/services/memory_table_service.dart

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
// memory_table_service.dart
import 'dart:io';
import 'package:win_text_editor/modules/memory_table/controllers/base_data_source.dart';
import 'package:win_text_editor/modules/memory_table/models/memory_table.dart';
import 'package:win_text_editor/shared/data/std_fields_cache.dart';
import 'package:win_text_editor/shared/models/std_filed.dart';
import 'package:xml/xml.dart' as xml;
@ -71,7 +71,7 @@ class MemoryTableService { @@ -71,7 +71,7 @@ class MemoryTableService {
for (final indexNode in indexes) {
final name = indexNode.getAttribute('name') ?? '';
final containerType = indexNode.getAttribute('containerType');
final isPrimary = containerType == null ? '' : '';
final isPrimary = containerType == null;
final rule = containerType ?? '';
// Get all index fields
@ -165,7 +165,7 @@ class MemoryTableService { @@ -165,7 +165,7 @@ class MemoryTableService {
}
List<Index> _getDefaultIndexes() {
return [Index('', '', '', ''), Index('', '', '', '')];
return [Index('', false, '', ''), Index('', false, '', '')];
}
}

138
win_text_editor/lib/modules/memory_table/widgets/memory_table_right_side.dart

@ -1,9 +1,99 @@ @@ -1,9 +1,99 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:win_text_editor/framework/controllers/logger.dart';
import 'package:win_text_editor/modules/memory_table/controllers/memory_table_controller.dart';
import 'package:win_text_editor/modules/memory_table/models/memory_table.dart';
class MemoryTableRightSide extends StatelessWidget {
class MemoryTableRightSide extends StatefulWidget {
final MemoryTableController controller;
final TextEditingController codeController;
const MemoryTableRightSide({super.key, required this.codeController});
const MemoryTableRightSide({super.key, required this.controller, required this.codeController});
@override
State<MemoryTableRightSide> createState() => _MemoryTableRightSideState();
}
class _MemoryTableRightSideState extends State<MemoryTableRightSide> {
@override
void initState() {
super.initState();
//
widget.controller.addListener(_updateDisplay);
_updateDisplay();
}
@override
void dispose() {
widget.controller.removeListener(_updateDisplay);
super.dispose();
}
void _updateDisplay() {
final table = widget.controller.memoryTable;
widget.codeController.text = _formatMemoryTable(table);
}
String _formatMemoryTable(MemoryTable table) {
final buffer = StringBuffer();
buffer.writeln('tableName = ${table.tableName}');
buffer.writeln();
buffer.writeln('columns:');
for (final field in table.columns) {
buffer.writeln(' name = ${field.name}');
buffer.writeln(' chineseName = ${field.chineseName}');
buffer.writeln(' dataType = ${field.type}');
buffer.writeln(' isSelected = ${field.isSelected}');
buffer.writeln();
}
buffer.writeln('indexes:');
for (final index in table.indexes) {
buffer.writeln(' name = ${index.indexName}');
buffer.writeln(' isPrimary = ${index.isPrimary}');
buffer.writeln(' isSelected = ${index.isSelected}');
buffer.writeln(' fields:');
for (final field in index.fields) {
buffer.writeln(' name = $field');
}
buffer.writeln();
}
return buffer.toString();
}
@override
Widget build(BuildContext context) {
return Column(
children: [
_buildCheckboxSection(),
Padding(
padding: const EdgeInsets.only(left: 8.0, right: 8.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text('MemoryTable 数据:', style: TextStyle(fontWeight: FontWeight.bold)),
IconButton(
icon: const Icon(Icons.content_copy, size: 20),
tooltip: '复制代码',
onPressed: () {
if (widget.codeController.text.isNotEmpty) {
Clipboard.setData(ClipboardData(text: widget.codeController.text));
ScaffoldMessenger.of(
context,
).showSnackBar(const SnackBar(content: Text('已复制到剪贴板')));
}
},
),
],
),
),
Flexible(child: _buildCodeEditor()),
],
);
}
Widget _buildCheckboxSection() {
return SizedBox(
@ -36,15 +126,7 @@ class MemoryTableRightSide extends StatelessWidget { @@ -36,15 +126,7 @@ class MemoryTableRightSide extends StatelessWidget {
Widget _buildCheckbox(String label) {
return Row(
mainAxisSize: MainAxisSize.min,
children: [
Checkbox(
value: false, // Replace with your actual value
onChanged: (bool? value) {
// Handle checkbox change
},
),
Text(label),
],
children: [Checkbox(value: false, onChanged: (bool? value) {}), Text(label)],
);
}
@ -52,14 +134,13 @@ class MemoryTableRightSide extends StatelessWidget { @@ -52,14 +134,13 @@ class MemoryTableRightSide extends StatelessWidget {
return Card(
child: Padding(
padding: const EdgeInsets.all(8),
// Expanded
child: Container(
decoration: BoxDecoration(
border: Border.all(color: Colors.grey),
borderRadius: BorderRadius.circular(4),
),
child: TextField(
controller: codeController,
controller: widget.codeController,
maxLines: null,
expands: true,
decoration: const InputDecoration(
@ -72,35 +153,4 @@ class MemoryTableRightSide extends StatelessWidget { @@ -72,35 +153,4 @@ class MemoryTableRightSide extends StatelessWidget {
),
);
}
@override
Widget build(BuildContext context) {
return Column(
children: [
_buildCheckboxSection(),
Padding(
padding: const EdgeInsets.only(left: 8.0, right: 8.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text('生成代码:', style: TextStyle(fontWeight: FontWeight.bold)),
IconButton(
icon: const Icon(Icons.content_copy, size: 20),
tooltip: '复制代码',
onPressed: () {
if (codeController.text.isNotEmpty) {
Clipboard.setData(ClipboardData(text: codeController.text));
ScaffoldMessenger.of(
context,
).showSnackBar(const SnackBar(content: Text('已复制到剪贴板')));
}
},
),
],
),
),
Flexible(child: _buildCodeEditor()),
],
);
}
}

8
win_text_editor/lib/modules/memory_table/widgets/memory_table_view.dart

@ -58,7 +58,13 @@ class _MemoryTableViewState extends State<MemoryTableView> { @@ -58,7 +58,13 @@ class _MemoryTableViewState extends State<MemoryTableView> {
Expanded(flex: 5, child: MemoryTableLeftSide(controller: controller)),
const SizedBox(width: 8),
// (50%)
Expanded(flex: 5, child: MemoryTableRightSide(codeController: _codeController)),
Expanded(
flex: 5,
child: MemoryTableRightSide(
codeController: _codeController,
controller: controller,
),
),
],
),
);

8
win_text_editor/pubspec.lock

@ -589,6 +589,14 @@ packages: @@ -589,6 +589,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "6.5.0"
yaml:
dependency: "direct main"
description:
name: yaml
sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
url: "https://pub.dev"
source: hosted
version: "3.1.3"
sdks:
dart: ">=3.7.0 <4.0.0"
flutter: ">=3.27.0"

3
win_text_editor/pubspec.yaml

@ -26,6 +26,7 @@ dependencies: @@ -26,6 +26,7 @@ dependencies:
shared_preferences: ^2.2.1
hive: ^2.2.3
hive_flutter: ^1.1.0
yaml: ^3.1.1
dev_dependencies:
flutter_test:
@ -34,3 +35,5 @@ dev_dependencies: @@ -34,3 +35,5 @@ dev_dependencies:
flutter:
uses-material-design: true
assets:
- assets/config/

Loading…
Cancel
Save