Flutter联系人信息处理插件vcard_maintained的使用

Flutter联系人信息处理插件vcard_maintained的使用

安装

要使用此插件,您需要在 pubspec.yaml 文件中添加 vcard_maintained 依赖项,如下所示:

dependencies:
  vcard_maintained: any

然后运行以下命令来获取依赖项:

flutter packages get

使用

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

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

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

/// 设置属性
vCard.firstName = 'FirstName';
vCard.middleName = 'MiddleName';
vCard.lastName = 'LastName';
vCard.organization = 'ActivSpaces Labs';
vCard.photo.attachFromUrl('https://www.activspaces.com/wp-content/uploads/2019/01/ActivSpaces-Logo_Dark.png', 'PNG');
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());

嵌入图像

您可以使用base64编码将图像嵌入到照片或徽标字段中,而不是通过URL链接它们。

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

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

日期引用

有关如何使用Date对象来设置生日和纪念日的MDN参考可以在以下链接中找到: MDN Date Object Reference

完整示例

以下示例展示了如何填充所有字段的vCard。

/// 导入包
import 'package:vcard_maintained/vcard_maintained.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('https://www.activspaces.com/wp-content/uploads/2019/01/ActivSpaces-Logo_Dark.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_maintained/vcard_maintained.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;

原始来源

这是由Eric J Nesser编写的vCards-js包的dart端口。 原始源码

测试

您可以运行VCard单元测试(正在进行中):

flutter test

更多关于Flutter联系人信息处理插件vcard_maintained的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter联系人信息处理插件vcard_maintained的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


vcard_maintained 是一个用于在 Flutter 应用中处理 vCard 格式联系人信息的插件。它可以帮助你解析和生成 vCard 文件,从而轻松地读取和写入联系人信息。

以下是如何在 Flutter 项目中使用 vcard_maintained 插件的步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  vcard_maintained: ^1.0.0  # 请确保使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入 vcard_maintained 插件:

import 'package:vcard_maintained/vcard_maintained.dart';

3. 解析 vCard 文件

你可以使用 VCardParser 来解析 vCard 文件。假设你有一个 vCard 文件的内容作为字符串,你可以这样解析它:

void parseVCard(String vCardContent) {
  var vCard = VCard();
  vCard.parse(vCardContent);

  print('Name: ${vCard.firstName} ${vCard.lastName}');
  print('Email: ${vCard.email}');
  print('Phone: ${vCard.phone}');
  print('Address: ${vCard.address}');
  // 你可以访问其他属性,如 organization, title, etc.
}

4. 生成 vCard 文件

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

void generateVCard() {
  var vCard = VCard();

  vCard.firstName = 'John';
  vCard.lastName = 'Doe';
  vCard.email = 'john.doe@example.com';
  vCard.phone = '123-456-7890';
  vCard.address = '123 Main St, City, Country';

  String vCardString = vCard.getFormattedString();
  print(vCardString);
}

5. 保存 vCard 文件

如果你想将生成的 vCard 保存到文件中,可以使用 dart:io 库:

import 'dart:io';

void saveVCardToFile(String vCardString, String filePath) {
  File(filePath).writeAsStringSync(vCardString);
}

6. 读取 vCard 文件

同样,你可以从文件中读取 vCard 内容并解析它:

void readAndParseVCard(String filePath) {
  String vCardContent = File(filePath).readAsStringSync();
  parseVCard(vCardContent);
}

7. 处理多个 vCard

如果你有一个包含多个 vCard 的文件,你可以按如下方式处理:

void parseMultipleVCards(String vCardContent) {
  var vCards = vCardContent.split('END:VCARD');
  for (var vCardString in vCards) {
    if (vCardString.trim().isNotEmpty) {
      var vCard = VCard();
      vCard.parse(vCardString);
      print('Name: ${vCard.firstName} ${vCard.lastName}');
    }
  }
}

8. 处理更多属性

vcard_maintained 插件支持许多 vCard 属性,如 organization, title, url, note, birthday, 等等。你可以根据需要访问和设置这些属性。

void setAdditionalProperties() {
  var vCard = VCard();
  vCard.organization = 'Example Corp';
  vCard.title = 'Software Engineer';
  vCard.url = 'https://example.com';
  vCard.note = 'This is a sample note.';
  vCard.birthday = DateTime(1990, 1, 1);

  print(vCard.getFormattedString());
}

9. 处理照片

vcard_maintained 插件还支持处理联系人照片。你可以将照片以 base64 编码的形式添加到 vCard 中:

void addPhotoToVCard() {
  var vCard = VCard();
  vCard.firstName = 'John';
  vCard.lastName = 'Doe';

  // 假设你有一个 base64 编码的图片
  String base64Image = '...'; // 你的 base64 图片数据
  vCard.photo = base64Image;

  print(vCard.getFormattedString());
}
回到顶部