在Flutter中,如果两个第三方库都有一个同名的类,但是属性和方法不同,并且在同一作用域内同时使用时候
会导致两个问题:
- 1.这两个库会导致命名冲突,引起编译报错
- 2.代码不方便阅读,类名容易弄混
解决办法 - 1.使用命名空间(Namespace):将其中一个或两个库封装在自己的命名空间中,以避免命名冲突。在导入这些库时使用as关键字为它们定义别名
- 2.在使用这两个库的类的时候都带上 命名空间别名前缀
这样既能解决编译问题,也增加代码可读性
案例代码如下:
项目中用到
flutter_contacts 这个插件,用于联系人增删改查;
flutter_native_contact_picker 这个插件,用于弹出系统联系人选择器选择联系人;
这两个库都有 同名Contact对象
import 'package:flutter_contacts/flutter_contacts.dart' as ContactInfoLib;
import 'package:flutter_native_contact_picker/flutter_native_contact_picker.dart'
as ContactPikerLib;
// 使用 flutter_native_contact_picker
static Future<Map<String, dynamic>> selectOneContact() async {
final ContactPikerLib.FlutterContactPicker contactPicker =
ContactPikerLib.FlutterContactPicker();
ContactPikerLib.Contact? contact = await contactPicker.selectContact();
var fullName = "";
var phoneNumber = "";
if (contact != null) {
fullName = contact.fullName ?? "";
if (contact.phoneNumbers != null) {
phoneNumber =
contact.phoneNumbers!.isNotEmpty ? contact.phoneNumbers!.first : "";
}
}
return {"name": fullName, "phoneNo": phoneNumber};
}
//使用 flutter_contacts 获取联系人详细信息
static Future<List> getContactsInfo() async {
//
bool isAuth = await ContactInfoLib.FlutterContacts.requestPermission();
if (isAuth == false) {
return [];
}
// Get all contacts (lightly fetched)
List<ContactInfoLib.Contact> contacts =
await ContactInfoLib.FlutterContacts.getContacts();
// List list = []; //await AVFoundationCamera.getContactsInfo();
return contacts;
}