Flutter联系人信息生成插件vcard的使用

Flutter联系人信息生成插件vcard的使用

vCard

pub package

通过此插件可以创建vCard文件,用于将联系人信息导入到Outlook、iOS、Mac OS以及Android设备中,无论是从网站还是移动应用程序中。


安装

pubspec.yaml文件中添加以下依赖以使用该插件:

dependencies:
  vcard: any

然后运行以下命令安装依赖:

flutter packages get

使用

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

示例代码

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

void main() {
  /// 创建一个新的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保存到文件
  vCard.saveToFile('./contact.vcf');

  /// 打印格式化的vCard字符串
  print(vCard.getFormattedString());
}

嵌入图片

可以通过base64编码嵌入图片到photologo字段中,而不是通过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文档


完整示例

以下是一个完整的示例,展示了如何填充所有字段。

示例代码

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

void main() {
  /// 创建一个新的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、3.0、4.0,不同版本支持不同的字段

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

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

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

emailotherEmailcellPhonepagerPhonehomePhoneworkPhonehomeFaxworkFaxotherPhone等字段均支持数组格式的多条记录。

示例代码

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

void main() {
  /// 创建一个新的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端口,原始项目地址为:
https://github.com/enesser/vCards-js


测试

可以通过以下命令运行VCard单元测试(目前仍在开发中):

flutter test

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

1 回复

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


在 Flutter 中,如果你想生成联系人信息并将其导出为 vCard 格式,可以使用 vcard 插件。vCard 是一种电子名片的文件格式标准,通常用于存储和交换联系人信息。

以下是如何在 Flutter 项目中使用 vcard 插件生成和导出 vCard 的步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 vcard 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  vcard: ^1.0.0

然后运行 flutter pub get 来安装依赖。

2. 导入包

在你的 Dart 文件中导入 vcard 包:

import 'package:vcard/vcard.dart';

3. 创建 vCard 并添加联系人信息

你可以创建一个 vCard 对象,并为其添加联系人信息。以下是一个简单的示例:

void generateVCard() {
  // 创建一个 vCard 对象
  var vCard = VCard();

  // 添加联系人信息
  vCard.firstName = 'John';
  vCard.lastName = 'Doe';
  vCard.email = 'john.doe@example.com';
  vCard.cellPhone = '+1234567890';
  vCard.workPhone = '+0987654321';
  vCard.title = 'Software Engineer';
  vCard.url = 'https://example.com';
  vCard.note = 'This is a sample vCard';

  // 生成 vCard 字符串
  String vCardString = vCard.getFormattedString();

  // 打印 vCard 字符串
  print(vCardString);

  // 你可以将 vCard 字符串保存到文件或分享给其他应用
}

4. 保存或分享 vCard

你可以将生成的 vCard 字符串保存到文件或分享给其他应用。以下是一个将 vCard 保存到文件的示例:

import 'dart:io';

void saveVCardToFile(String vCardString) async {
  // 获取应用的文档目录
  Directory directory = await getApplicationDocumentsDirectory();
  String filePath = '${directory.path}/contact.vcf';

  // 将 vCard 字符串写入文件
  File file = File(filePath);
  await file.writeAsString(vCardString);

  print('vCard saved to $filePath');
}

5. 完整示例

以下是一个完整的示例,展示了如何生成 vCard 并将其保存到文件:

import 'package:flutter/material.dart';
import 'package:vcard/vcard.dart';
import 'dart:io';
import 'package:path_provider/path_provider.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('vCard Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              generateAndSaveVCard();
            },
            child: Text('Generate and Save vCard'),
          ),
        ),
      ),
    );
  }
}

void generateAndSaveVCard() async {
  // 创建一个 vCard 对象
  var vCard = VCard();

  // 添加联系人信息
  vCard.firstName = 'John';
  vCard.lastName = 'Doe';
  vCard.email = 'john.doe@example.com';
  vCard.cellPhone = '+1234567890';
  vCard.workPhone = '+0987654321';
  vCard.title = 'Software Engineer';
  vCard.url = 'https://example.com';
  vCard.note = 'This is a sample vCard';

  // 生成 vCard 字符串
  String vCardString = vCard.getFormattedString();

  // 获取应用的文档目录
  Directory directory = await getApplicationDocumentsDirectory();
  String filePath = '${directory.path}/contact.vcf';

  // 将 vCard 字符串写入文件
  File file = File(filePath);
  await file.writeAsString(vCardString);

  print('vCard saved to $filePath');
}

6. 运行应用

运行你的 Flutter 应用,点击按钮生成并保存 vCard 文件。你可以在设备的文件系统中找到生成的 .vcf 文件。

7. 分享 vCard

如果你想分享生成的 vCard,可以使用 share 插件。首先,在 pubspec.yaml 中添加 share 插件的依赖:

dependencies:
  share: ^2.0.4

然后,使用以下代码分享 vCard:

import 'package:share/share.dart';

void shareVCard(String vCardString) {
  Share.share(vCardString, subject: 'Contact.vcf');
}
回到顶部