Flutter GEDCOM解析插件gedcom的使用
Flutter GEDCOM解析插件gedcom的使用
GEDCOM-Dart 是一个将 Python 的 GEDCOM 库移植到 Dart 的库。GEDCOM 文件包含祖先数据。该解析器目前支持 GEDCOM 5.5 格式。
注意
如果您有兴趣为 GEDCOM-Dart 贡献代码以实现对 GEDCOM 7.0 版本的支持,请参阅 此问题。
警告
该包仍在开发中。仅支持部分功能。
贡献
欢迎贡献代码!
许可证
GEDCOM Dart 解析器受 GNU 通用公共许可证 v2 版许可。
Licensed under the GNU General Public License v2
GEDCOM Dart Parser
Copyright (C) 2020 Dominik Roszkowski (dominik at roszkowski.dev)
Ported to Dart from Python GEDCOM Parser
Copyright (C) 2018 Damon Brodie (damon.brodie at gmail.com)
Copyright (C) 2018-2019 Nicklas Reincke (contact at reynke.com)
Copyright (C) 2016 Andreas Oberritter
Copyright (C) 2012 Madeleine Price Ball
Copyright (C) 2005 Daniel Zappala (zappala at cs.byu.edu)
Copyright (C) 2005 Brigham Young University
使用示例
以下是一个简单的示例,展示了如何使用 gedcom
插件解析 GEDCOM 数据。
示例代码
import 'package:gedcom/gedcom.dart';
// 测试数据
const testData = '''
0 [@I25](/user/I25)@ INDI
1 NAME Thomas Trask /Wetmore/ Sr
1 SEX M
1 BIRT
2 DATE 13 March 1866
2 PLAC St. Mary's Bay, Digby, Nova Scotia
2 SOUR Social Security application
1 NATU
2 NAME Thomas T. Wetmore
2 DATE 26 October 1888
2 PLAC Norwich, New London, Connecticut
2 AGE 22 years
2 COUR New London County Court of Common Pleas
2 SOUR court record from National Archives
1 OCCU Antiques Dealer
1 DEAT
2 NAME Thomas Trask Wetmore
2 DATE 17 February 1947
2 PLAC New London, New London, Connecticut
2 AGE 80 years, 11 months, 4 days
2 CAUS Heart Attack
2 SOUR New London Death Records
1 FAMC [@F11](/user/F11)@
1 FAMS [@F6](/user/F6)@
1 FAMS [@F12](/user/F12)@
''';
void main() {
// 创建解析器实例
final parser = GedcomParser();
// 解析测试数据
final root = parser.parse(testData);
// 打印解析后的 GEDCOM 字符串
print(root.toGedcomString(recursive: true));
}
输出结果
0 [@I25](/user/I25)@ INDI
1 NAME Thomas Trask /Wetmore/ Sr
1 SEX M
1 BIRT
2 DATE 13 March 1866
2 PLAC St. Mary's Bay, Digby, Nova Scotia
2 SOUR Social Security application
1 NATU
2 NAME Thomas T. Wetmore
2 DATE 26 October 1888
2 PLAC Norwich, New London, Connecticut
2 AGE 22 years
2 COUR New London County Court of Common Pleas
2 SOUR court record from National Archives
1 OCCU Antiques Dealer
1 DEAT
2 NAME Thomas Trask Wetmore
2 DATE 17 February 1947
2 PLAC New London, New London, Connecticut
2 AGE 80 years, 11 months, 4 days
2 CAUS Heart Attack
2 SOUR New London Death Records
1 FAMC [@F11](/user/F11)@
1 FAMS [@F6](/user/F6)@
1 FAMS [@F12](/user/F12)@
更多关于Flutter GEDCOM解析插件gedcom的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter GEDCOM解析插件gedcom的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用gedcom
插件来解析GEDCOM(Genealogical Data Communication)文件的示例代码。GEDCOM是一种用于存储家谱数据的标准格式。
首先,确保你的Flutter项目已经添加了gedcom
插件。你可以通过以下命令在pubspec.yaml
文件中添加依赖:
dependencies:
flutter:
sdk: flutter
gedcom: ^最新版本号 # 请替换为实际的最新版本号
然后运行flutter pub get
来获取依赖。
以下是一个完整的示例代码,展示如何使用gedcom
插件来解析GEDCOM文件:
import 'package:flutter/material.dart';
import 'package:gedcom/gedcom.dart';
import 'dart:convert';
import 'dart:typed_data';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'GEDCOM Parser Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Text('GEDCOM Parser Demo'),
),
body: Center(
child: GedcomParserDemo(),
),
),
);
}
}
class GedcomParserDemo extends StatefulWidget {
@override
_GedcomParserDemoState createState() => _GedcomParserDemoState();
}
class _GedcomParserDemoState extends State<GedcomParserDemo> {
String parsedData = '';
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: _loadAndParseGedcom,
child: Text('Load and Parse GEDCOM File'),
),
SizedBox(height: 20),
Expanded(
child: SingleChildScrollView(
child: Text(parsedData),
),
),
],
);
}
Future<void> _loadAndParseGedcom() async {
// 假设你有一个GEDCOM文件的本地路径或你可以从网络获取它
// 这里我们用一个简单的字符串示例来代替实际文件读取
String gedcomString = '''
0 HEAD
1 CHAR UTF-8
1 SOUR MyGedcomSource
1 DATE 1 JAN 2023
0 @I1@ INDI
1 NAME John Doe /John/
2 SEX M
1 BIRT
2 DATE 15 JAN 1900
1 DEAT
2 DATE 1 JAN 1980
''';
// 将字符串转换为Uint8List,模拟文件读取
Uint8List gedcomBytes = Uint8List.fromList(utf8.encode(gedcomString));
// 使用gedcom插件解析GEDCOM数据
try {
GedcomDocument document = await GedcomParser().parseBytes(gedcomBytes);
// 构建一个字符串来显示解析后的数据
StringBuffer sb = StringBuffer();
document.individuals.forEach((individual) {
sb.writeln('Name: ${individual.name}');
sb.writeln('Sex: ${individual.sex}');
sb.writeln('Birth Date: ${individual.birthDate}');
sb.writeln('Death Date: ${individual.deathDate}');
sb.writeln('');
});
setState(() {
parsedData = sb.toString();
});
} catch (e) {
setState(() {
parsedData = 'Error parsing GEDCOM: $e';
});
}
}
}
解释
- 依赖添加:在
pubspec.yaml
中添加gedcom
插件依赖。 - UI结构:使用
MaterialApp
和Scaffold
构建了一个简单的Flutter应用,包含一个按钮和一个文本显示区域。 - 按钮点击事件:当点击按钮时,调用
_loadAndParseGedcom
方法来加载并解析GEDCOM数据。 - 模拟GEDCOM数据:这里用一个简单的GEDCOM字符串来模拟实际的数据。在实际应用中,你可能需要从文件或网络获取GEDCOM数据。
- 数据解析:使用
GedcomParser
类来解析GEDCOM数据,并将解析后的结果显示在文本区域中。
请注意,这个示例中的GEDCOM数据是非常简单的,实际的数据可能会更加复杂。gedcom
插件提供了丰富的API来处理各种GEDCOM数据结构和关系,你可以根据需要进一步探索和使用这些API。