Browse Source

标准字段翻译OK

master
hejl 2 months ago
parent
commit
98a9c2c4ec
  1. 2
      win_text_editor/lib/framework/controllers/tab_items_controller.dart
  2. 13
      win_text_editor/lib/main.dart
  3. 4
      win_text_editor/lib/modules/memory_table/controllers/base_data_source.dart
  4. 8
      win_text_editor/lib/modules/memory_table/controllers/memory_table_controller.dart
  5. 79
      win_text_editor/lib/modules/memory_table/services/memory_table_service.dart
  6. 5
      win_text_editor/lib/modules/memory_table/widgets/memory_table_left_side.dart
  7. 44
      win_text_editor/lib/shared/data/std_fields_cache.dart
  8. 15
      win_text_editor/lib/shared/models/std_filed.dart
  9. 24
      win_text_editor/pubspec.lock
  10. 2
      win_text_editor/pubspec.yaml

2
win_text_editor/lib/framework/controllers/tab_items_controller.dart

@ -119,8 +119,6 @@ class TabItemsController with ChangeNotifier { @@ -119,8 +119,6 @@ class TabItemsController with ChangeNotifier {
default:
Logger().error("没有活动的内容控制器", source: 'TabItemsController');
}
return;
}
activeContentController?.onOpenFile(filePath);
}

13
win_text_editor/lib/main.dart

@ -1,6 +1,9 @@ @@ -1,6 +1,9 @@
import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:provider/provider.dart';
import 'package:win_text_editor/framework/widgets/app_scaffold.dart';
import 'package:win_text_editor/shared/data/std_fields_cache.dart';
import 'package:window_manager/window_manager.dart';
import 'framework/controllers/logger.dart'; //
@ -19,6 +22,16 @@ void main() async { @@ -19,6 +22,16 @@ void main() async {
await windowManager.focus();
});
//
WidgetsFlutterBinding.ensureInitialized();
//
await Hive.initFlutter();
await Hive.deleteBoxFromDisk('uft_stdFieldsCache');
//
await StdFieldsCache.init();
runApp(
MultiProvider(
providers: [

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

@ -46,13 +46,12 @@ abstract class SelectableDataSource<T extends SelectableItem> extends DataGridSo @@ -46,13 +46,12 @@ abstract class SelectableDataSource<T extends SelectableItem> extends DataGridSo
}
class Field implements SelectableItem {
Field(this.id, this.name, this.chineseName, this.type, this.remark, [this.isSelected = false]);
Field(this.id, this.name, this.chineseName, this.type, [this.isSelected = false]);
final String id;
final String name;
final String chineseName;
final String type;
final String remark;
@override
bool isSelected;
}
@ -83,7 +82,6 @@ class FieldsDataSource extends SelectableDataSource<Field> { @@ -83,7 +82,6 @@ class FieldsDataSource extends SelectableDataSource<Field> {
DataGridCell<String>(columnName: 'name', value: field.name),
DataGridCell<String>(columnName: 'chineseName', value: field.chineseName),
DataGridCell<String>(columnName: 'type', value: field.type),
DataGridCell<String>(columnName: 'remark', value: field.remark),
],
),
)

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

@ -17,9 +17,9 @@ class MemoryTableController extends BaseContentController { @@ -17,9 +17,9 @@ class MemoryTableController extends BaseContentController {
MemoryTableController() : _service = MemoryTableService(Logger()) {
//
fieldsSource = FieldsDataSource([
Field('1', '', '', '', ''), // 1
Field('2', '', '', '', ''), // 2
Field('3', '', '', '', ''), // 3
Field('1', '', '', ''), // 1
Field('2', '', '', ''), // 2
Field('3', '', '', ''), // 3
]);
indexesSource = IndexesDataSource([
@ -32,6 +32,7 @@ class MemoryTableController extends BaseContentController { @@ -32,6 +32,7 @@ class MemoryTableController extends BaseContentController {
@override
Future<void> onOpenFile(String filePath) async {
Logger().info("Opening file: $filePath");
try {
final tableData = await _service.parseStructureFile(filePath);
@ -52,6 +53,7 @@ class MemoryTableController extends BaseContentController { @@ -52,6 +53,7 @@ class MemoryTableController extends BaseContentController {
} catch (e) {
_errorMessage = e.toString();
notifyListeners();
Logger().error("Error opening file: $e");
}
}

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

@ -2,6 +2,8 @@ @@ -2,6 +2,8 @@
import 'dart:io';
import 'package:win_text_editor/modules/memory_table/controllers/base_data_source.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;
import 'package:path/path.dart' as path;
import 'package:win_text_editor/framework/controllers/logger.dart';
@ -18,7 +20,16 @@ class MemoryTableService { @@ -18,7 +20,16 @@ class MemoryTableService {
throw const FormatException("文件扩展名必须是.uftstructure");
}
// 2. Read and parse file content
// 2. metadata stdfield.stfield
if (await StdFieldsCache.getLength() == 0) {
_logger.info("加载标准字段缓存");
final metadataFile = await _findMetadataFile(filePath);
if (metadataFile != null) {
await _processStdFieldFile(metadataFile);
}
}
// 3. Read and parse structure file content
final file = File(filePath);
final content = await file.readAsString();
@ -29,30 +40,31 @@ class MemoryTableService { @@ -29,30 +40,31 @@ class MemoryTableService {
throw const FormatException("文件格式错误:缺少structure:Structure节点");
}
// 3. Get basic info
// 4. Get basic info
final fileNameWithoutExt = path.basenameWithoutExtension(filePath);
final chineseName = structureNode.getAttribute('chineseName') ?? '';
final objectId = structureNode.getAttribute('objectId') ?? '';
// 4. Process properties (fields)
// 5. Process properties (fields)
final properties = document.findAllElements('properties');
final fields = <Field>[];
int index = 1;
for (final property in properties) {
final id = property.getAttribute('id') ?? '';
//
final stdField = StdFieldsCache.getData(id);
fields.add(
Field(
(index++).toString(), //
id, //
'', //
'', //
'', //
stdField?.chineseName ?? '', //
stdField?.dateType ?? '', //
),
);
}
// 5. Process indexes
// 6. Process indexes
final indexes = document.findAllElements('indexs');
final indexList = <Index>[];
@ -97,8 +109,59 @@ class MemoryTableService { @@ -97,8 +109,59 @@ class MemoryTableService {
}
}
// metadata stdfield.stfield
Future<File?> _findMetadataFile(String filePath) async {
Directory currentDir = File(filePath).parent;
const targetDirName = 'metadata';
const targetFileName = 'stdfield.stdfield';
// metadata
while (true) {
final metadataDir = Directory('${currentDir.path}/$targetDirName');
if (await metadataDir.exists()) {
final stdFieldFile = File('${metadataDir.path}/$targetFileName');
if (await stdFieldFile.exists()) {
return stdFieldFile;
} else {
_logger.error("没找到标准字段文件 $targetFileName");
return null;
}
}
//
if (currentDir.path == currentDir.parent.path) {
_logger.error("没有找到元数据目录 $targetDirName");
return null;
}
currentDir = currentDir.parent;
}
}
//
Future<void> _processStdFieldFile(File stdFieldFile) async {
try {
final content = await stdFieldFile.readAsString();
final document = xml.XmlDocument.parse(content);
final items = document.findAllElements('items');
for (final item in items) {
final name = item.getAttribute('name') ?? '';
final chineseName = item.getAttribute('chineseName') ?? '';
final dataType = item.getAttribute('dataType') ?? '';
if (name.isNotEmpty) {
final stdField = StdField(name: name, chineseName: chineseName, dateType: dataType);
await StdFieldsCache.setData(name, stdField);
}
}
} catch (e) {
_logger.error("处理标准字段文件时出错: $e");
}
}
List<Field> _getDefaultFields() {
return [Field('1', '', '', '', ''), Field('2', '', '', '', ''), Field('3', '', '', '', '')];
return [Field('1', '', '', ''), Field('2', '', '', ''), Field('3', '', '', '')];
}
List<Index> _getDefaultIndexes() {

5
win_text_editor/lib/modules/memory_table/widgets/memory_table_left_side.dart

@ -75,11 +75,6 @@ class MemoryTableLeftSide extends StatelessWidget { @@ -75,11 +75,6 @@ class MemoryTableLeftSide extends StatelessWidget {
label: _buildGridHeader('类型'),
minimumWidth: 120,
),
GridColumn(
columnName: 'remark',
label: _buildGridHeader('备注'),
minimumWidth: 200,
),
],
onCellTap: (details) {
if (details.column.columnName == 'select') {

44
win_text_editor/lib/shared/data/std_fields_cache.dart

@ -0,0 +1,44 @@ @@ -0,0 +1,44 @@
import 'package:hive_flutter/hive_flutter.dart';
import 'package:win_text_editor/shared/models/std_filed.dart';
class StdFieldsCache {
static late final Box<StdField> _box; //
//
static Future<void> init() async {
await Hive.initFlutter();
Hive.registerAdapter(StdFieldAdapter()); // Box前注册适配器
_box = await Hive.openBox<StdField>('uft_stdFieldsCache'); //
}
static Future<int> getLength() async {
return _box.length;
}
//
static StdField? getData(String key) => _box.get(key);
static Future<void> setData(String key, StdField value) => _box.put(key, value);
//
static Future<void> clear() async {
await _box.clear();
}
}
// typeId在整个应用中唯一
class StdFieldAdapter extends TypeAdapter<StdField> {
@override
final int typeId = 7; // ID
@override
StdField read(BinaryReader reader) {
return StdField(name: reader.read(), chineseName: reader.read(), dateType: reader.read());
}
@override
void write(BinaryWriter writer, StdField obj) {
writer.write(obj.name);
writer.write(obj.chineseName);
writer.write(obj.dateType);
}
}

15
win_text_editor/lib/shared/models/std_filed.dart

@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
import 'package:hive/hive.dart';
@HiveType(typeId: 7) // typeId一致
class StdField {
@HiveField(0)
final String name;
@HiveField(1)
final String chineseName;
@HiveField(2)
final String dateType;
StdField({required this.name, required this.chineseName, required this.dateType});
}

24
win_text_editor/pubspec.lock

@ -89,6 +89,14 @@ packages: @@ -89,6 +89,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.3.4+2"
crypto:
dependency: transitive
description:
name: crypto
sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
url: "https://pub.dev"
source: hosted
version: "3.0.6"
csv:
dependency: "direct main"
description:
@ -184,6 +192,22 @@ packages: @@ -184,6 +192,22 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
hive:
dependency: "direct main"
description:
name: hive
sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941"
url: "https://pub.dev"
source: hosted
version: "2.2.3"
hive_flutter:
dependency: "direct main"
description:
name: hive_flutter
sha256: dca1da446b1d808a51689fb5d0c6c9510c0a2ba01e22805d492c73b68e33eecc
url: "https://pub.dev"
source: hosted
version: "1.1.0"
http:
dependency: transitive
description:

2
win_text_editor/pubspec.yaml

@ -24,6 +24,8 @@ dependencies: @@ -24,6 +24,8 @@ dependencies:
csv: ^6.0.0
mustache_template: ^2.0.0
shared_preferences: ^2.2.1
hive: ^2.2.3
hive_flutter: ^1.1.0
dev_dependencies:
flutter_test:

Loading…
Cancel
Save