| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- import 'package:flutter/material.dart';
- /// 要素模型
- class DocumentElement {
- final String id;
- final ElementType type;
- final String label;
- final String value;
- final Offset? position; // 在文档中的位置
- final String? documentId;
- final Map<String, dynamic>? metadata;
- DocumentElement({
- required this.id,
- required this.type,
- required this.label,
- required this.value,
- this.position,
- this.documentId,
- this.metadata,
- });
- /// 从JSON创建
- factory DocumentElement.fromJson(Map<String, dynamic> json) {
- return DocumentElement(
- id: json['id'] as String,
- type: ElementType.values.firstWhere(
- (e) => e.toString().split('.').last == json['type'],
- orElse: () => ElementType.other,
- ),
- label: json['label'] as String,
- value: json['value'] as String,
- position: json['position'] != null
- ? Offset(
- (json['position'] as Map)['x'] as double,
- (json['position'] as Map)['y'] as double,
- )
- : null,
- documentId: json['documentId'] as String?,
- metadata: json['metadata'] as Map<String, dynamic>?,
- );
- }
- /// 转换为JSON
- Map<String, dynamic> toJson() {
- return {
- 'id': id,
- 'type': type.toString().split('.').last,
- 'label': label,
- 'value': value,
- 'position':
- position != null ? {'x': position!.dx, 'y': position!.dy} : null,
- 'documentId': documentId,
- 'metadata': metadata,
- };
- }
- /// 复制并更新
- DocumentElement copyWith({
- String? id,
- ElementType? type,
- String? label,
- String? value,
- Offset? position,
- String? documentId,
- Map<String, dynamic>? metadata,
- }) {
- return DocumentElement(
- id: id ?? this.id,
- type: type ?? this.type,
- label: label ?? this.label,
- value: value ?? this.value,
- position: position ?? this.position,
- documentId: documentId ?? this.documentId,
- metadata: metadata ?? this.metadata,
- );
- }
- /// 显示文本
- String get displayText => '$label: $value';
- }
- /// 要素类型
- enum ElementType {
- amount, // 金额
- company, // 公司
- person, // 人名
- location, // 地名
- date, // 日期
- other, // 其他
- }
- extension ElementTypeExtension on ElementType {
- String get label {
- switch (this) {
- case ElementType.amount:
- return '金额';
- case ElementType.company:
- return '公司';
- case ElementType.person:
- return '人名';
- case ElementType.location:
- return '地名';
- case ElementType.date:
- return '日期';
- case ElementType.other:
- return '其他';
- }
- }
- }
|