Flutter 库的管理,包的导入和导出,解决包冲突问题

我发现 Flutter 工程里,各种库的管理、包的导入导出和其他项目有很大区别。我简单做个总结,主要分享 importexport 使用,以及导入包冲突怎么解决。

导入

import 导入包的语法如下

import 'xxx';

关键是后面包的路径,这里要特意做个说明,单独一个 dart 文件,也是要导入的,也算是导包。所以我们在项目中需要导包的有哪些内容呢?大概有这三种

  • 第三方库,需要依赖的包。
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
import 'package:shared_preferences/shared_preferences.dart';
...

可以发现,这类库导入路径都是以 package 开头,其实这个过程我们不用管,使用快捷键导入就行,不用手动导入。

  • dart 文件。
import '../model/language.dart';
import '../model/user_entity.dart';
import '../../../util/treeview_util.dart';
...

项目里自己实现的类,比较多的像工具类、实体类、资源类等等,当被引用时也需要导入。大部分情况也是用快捷键自动导入,但如果要手动导入,这就需要学习包路径的编写。我建议直接复制类的相对路径,比如上面的 user_entity.dart复制后记得加 /

import '/model/user_entity.dart'
  • dart 内置类。
import 'dart:async';
import 'dart:ui';
...

这些包都是 dart 内置的文件,没什么特殊,使用快捷键导入就行。

上面分类不是绝对的,什么意思呢?比如 package 路径起始的包名一般是第三方库,但我们用快捷键导入时,也可以选择将 dart 文件的包使用 package 作为前缀开头。

//import '../model/user_entity.dart';

to

import 'package:data/model/user_entity.dart';

项目一样可以运行,没问题。但我还是建议各位不要这样做,按照上面约定俗成的分类方式导包。

冲突

我开发时就碰到这问题,提醒包导入,导入后还是报红线,查了半天原来两个第三方包有命名一样的类,这样就冲突了,编辑器也不知道该应用哪个?出现这种问题,我们要对包重命名,只要对其中一个重命名就可以解决问题,但我建议重命名两个。

import 'package:get/get.dart' as FluteerGet;
import 'package:flutter_treeview/flutter_treeview.dart' as FlutterTreeView;

List<FlutterTreeView.Node>? nodes;
FluteerGet.Get.toNamed();

对了,包冲突会报错如下,也会提醒使用 as 解决。

The name 'xx' is defined in the libraries 'package:xxx'

export

使用 Flutter 开发项目,导包是挺麻烦的一件事,因为没法自动导入,得用快捷键一个个操作。特别像有些公共的包,很多页面需要用到,最好提取出来,这就可以方便很多,这个提取过程就要用到 export 关键词。

比如创建一个 common_lib.dart ,记得用 library 定义名字。

library common_lib;

export 'package:flutter/material.dart';
export 'package:get/get.dart';
export '/res/r.dart';
export '/res/strings.dart';
export '/res/style.dart';
export '/res/colors.dart';
....

将一些常用的、公共的包都用 export 导出。当需要用时,和上面一样使用 import 导入即可。

import '/util/common_lib.dart';

OK,以上就是 Flutter 包管理的使用,希望能帮到你。

本文由老郭种树原创,转载请注明:https://guozh.net/management-of-the-flutter-library/

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注