使用命名空间解决flutter不同插件同名类名编译问题

在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;
  }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容