Flutter vCard生成与解析插件vcard_vcf的使用

Flutter vCard生成与解析插件vcard_vcf的使用

安装

要使用此插件,需要在pubspec.yaml文件中添加vcard作为依赖项。具体操作如下:

dependencies:
  vcard: any

然后运行以下命令以获取包:

flutter packages get

使用

下面是一个简单的例子,展示了如何创建一个基本的vCard,并将其保存到文件中或从控制台查看其内容。

/// 导入包
import 'package:vcard/vcard.dart';

/// 创建一个新的vCard
var vCard = VCard();

/// 设置属性
vCard.firstName = 'FirstName';
vCard.middleName = 'MiddleName';
vCard.lastName = 'LastName';
vCard.organization = 'ActivSpaces Labs';
vCard.photo = ''; // 可以通过attachFromUrl或embedFromFile方法设置照片
vCard.workPhone = 'Work Phone Number';
vCard.birthday = DateTime.now();
vCard.jobTitle = 'Software Developer';
vCard.url = 'https://github.com/valerycolong';
vCard.note = 'Notes on contact';

/// 保存到文件
vCard.saveToFile('./contact.vcf');

/// 获取格式化的字符串
print(vCard.getFormattedString());

嵌入图像

可以在照片或标志字段中嵌入图像而不是链接到URL,使用base64编码。

// 可以是Windows或Linux/Unix路径结构,支持JPEG、PNG、GIF格式
vCard.photo.embedFromFile('/path/to/file.png');
vCard.logo.embedFromFile('/path/to/file.png');

// 也可以通过base-64编码字符串嵌入图像
vCard.photo.embedFromString('iVBORw0KGgoAAAANSUhEUgAAA2...', 'image/png');
vCard.logo.embedFromString('iVBORw0KGgoAAAANSUhEUgAAA2...', 'image/png');

日期参考

有关如何使用Date对象来处理生日和周年纪念日的信息,可以参考MDN文档: MDN Date文档

完整示例

以下是一个完整的vCard示例,所有字段都已填充。

/// 导入包
import 'package:vcard/vcard.dart';

// 创建一个新的vCard
var vCard = VCard();

/// 设置基本属性
vCard.firstName = 'FirstName';
vCard.middleName = 'MiddleName';
vCard.lastName = 'Last Name';
vCard.uid = '6yuuhuhj-c34d-4a1e-8922-bd38a9476a53';
vCard.organization = 'ActivSpaces Labs';

/// 链接到图像
vCard.photo.attachFromUrl('/path/to/image/file.png', 'JPEG');

/// 或者嵌入图像
vCard.photo.attachFromUrl('/path/to/image/file.png');

vCard.workPhone = '312-555-1212';
vCard.birthday = DateTime.now();
vCard.jobTitle = 'Software Developer';
vCard.url = 'https://github.com/valerycolong';
vCard.workUrl = 'https://activspaces.com';
vCard.note = 'Notes on contact';

/// 设置其他详细信息
vCard.nickname = 'Scarface';
vCard.namePrefix = 'Mr.';
vCard.nameSuffix = 'JR';
vCard.gender = 'M';
vCard.anniversary = DateTime.now();
vCard.role = 'Software Development';

/// 设置其他电话号码
vCard.homePhone = 'Home Phone';
vCard.cellPhone = 'Cell Phone';
vCard.pagerPhone = 'Pager Phone';

/// 设置传真号码
vCard.homeFax = 'Home Fax';
vCard.workFax = 'Work Fax';

/// 设置电子邮件地址
vCard.email = 'labs@activspaces.com';
vCard.workEmail = 'hello@activspaces.com';

/// 设置组织的标志或个人标志(也支持嵌入,参见上面)
vCard.logo.attachFromUrl('https://www.activspaces.com/wp-content/uploads/2019/01/ActivSpaces-Logo_Dark.png', 'PNG');

/// 设置可找到vCard的URL
vCard.source = 'http://example.com/myvcard.vcf';

/// 设置地址信息
vCard.homeAddress.label = 'Home Address';
vCard.homeAddress.street = 'Great Soppo';
vCard.homeAddress.city = 'Buea';
vCard.homeAddress.stateProvince = 'SW';
vCard.homeAddress.postalCode = '00237';
vCard.homeAddress.countryRegion = 'Cameroon';
vCard.homeAddress.type = 'HOME';

vCard.workAddress.label = 'Work Address';
vCard.workAddress.street = 'Molyko';
vCard.workAddress.city = 'Buea';
vCard.workAddress.stateProvince = 'SW';
vCard.workAddress.postalCode = '00237';
vCard.workAddress.countryRegion = 'Cameroon';
vCard.workAddress.type = 'WORK';

/// 设置社交媒体URL
vCard.socialUrls['facebook'] = 'https://...';
vCard.socialUrls['linkedIn'] = 'https://...';
vCard.socialUrls['twitter'] = 'https://...';
vCard.socialUrls['flickr'] = 'https://...';
vCard.socialUrls['custom'] = 'https://...';

/// 也可以通过文件嵌入照片而不是通过URL附加
vCard.photo.embedFromFile('photo.jpg');
vCard.logo.embedFromFile('logo.jpg');

vCard.version = '3.0'; // 可以支持2.1和4.0版本,某些版本只支持某些字段

/// 保存到文件
vCard.saveToFile('./contact/file.vcf');

/// 获取格式化的字符串
print(vCard.getFormattedString());

多个电子邮件、传真及电话示例

emailotherEmailcellPhonepagerPhonehomePhoneworkPhonehomeFaxworkFaxotherPhone都支持数组格式的多个条目。

示例如下:

/// 导入包
import 'package:vcard/vcard.dart';

// 创建一个新的vCard
var vCard = VCard();

/// 多个电子邮件条目
vCard.email = [
    'e.nesser@emailhost.tld',
    'e.nesser@emailhost2.tld',
    'e.nesser@emailhost3.tld'
];

/// 多个手机条目
vCard.cellPhone = [
    '312-555-1414',
    '312-555-1415',
    '312-555-1416'
];

Apple AddressBook扩展

可以使用以下Apple AddressBook扩展属性将联系人标记为组织:

var vCard = VCard();
vCard.isOrganization = true;

测试

你可以通过以下命令运行VCard单元测试(正在进行中):

flutter test

更多关于Flutter vCard生成与解析插件vcard_vcf的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter vCard生成与解析插件vcard_vcf的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


vcard_vcf 是一个用于在 Flutter 应用中生成和解析 vCard 和 vCF 文件的插件。vCard 是一种电子名片格式,通常用于在联系人之间交换信息。vCF 是 vCard 文件的标准文件扩展名。

安装插件

首先,你需要在 pubspec.yaml 文件中添加 vcard_vcf 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  vcard_vcf: ^0.0.1  # 请使用最新版本

然后运行 flutter pub get 来安装插件。

生成 vCard

你可以使用 vcard_vcf 插件来生成 vCard 文件。以下是一个简单的示例:

import 'package:vcard_vcf/vcard_vcf.dart';

void generateVCard() {
  var vCard = VCard();
  
  vCard.firstName = 'John';
  vCard.lastName = 'Doe';
  vCard.email = 'john.doe@example.com';
  vCard.phone = '1234567890';
  vCard.organization = 'Example Corp';
  vCard.title = 'Software Engineer';
  
  String vCardString = vCard.getFormattedString();
  print(vCardString);
  
  // 你可以将 vCardString 保存为 .vcf 文件
  // File('contact.vcf').writeAsStringSync(vCardString);
}

解析 vCard

你也可以使用 vcard_vcf 插件来解析 vCard 文件。以下是一个简单的示例:

import 'package:vcard_vcf/vcard_vcf.dart';

void parseVCard(String vCardString) {
  var vCard = VCard();
  vCard.parse(vCardString);
  
  print('First Name: ${vCard.firstName}');
  print('Last Name: ${vCard.lastName}');
  print('Email: ${vCard.email}');
  print('Phone: ${vCard.phone}');
  print('Organization: ${vCard.organization}');
  print('Title: ${vCard.title}');
}

void main() {
  String vCardString = '''
BEGIN:VCARD
VERSION:3.0
FN:John Doe
N:Doe;John;;;
EMAIL;TYPE=INTERNET:john.doe@example.com
TEL;TYPE=CELL:1234567890
ORG:Example Corp
TITLE:Software Engineer
END:VCARD
''';
  
  parseVCard(vCardString);
}

保存和读取 vCard 文件

你可以使用 Flutter 的 File 类来保存和读取 vCard 文件:

import 'dart:io';
import 'package:vcard_vcf/vcard_vcf.dart';

void saveVCardToFile() {
  var vCard = VCard();
  vCard.firstName = 'John';
  vCard.lastName = 'Doe';
  vCard.email = 'john.doe@example.com';
  vCard.phone = '1234567890';
  vCard.organization = 'Example Corp';
  vCard.title = 'Software Engineer';
  
  String vCardString = vCard.getFormattedString();
  
  File file = File('contact.vcf');
  file.writeAsStringSync(vCardString);
}

void readVCardFromFile() {
  File file = File('contact.vcf');
  String vCardString = file.readAsStringSync();
  
  var vCard = VCard();
  vCard.parse(vCardString);
  
  print('First Name: ${vCard.firstName}');
  print('Last Name: ${vCard.lastName}');
  print('Email: ${vCard.email}');
  print('Phone: ${vCard.phone}');
  print('Organization: ${vCard.organization}');
  print('Title: ${vCard.title}');
}

void main() {
  saveVCardToFile();
  readVCardFromFile();
}
回到顶部