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