简单的flutter依赖管理, 资源管理与库引入说明

938 阅读4分钟

dart/flutter仓库

官方仓库:pub.dev/

国内镜像:pub-web.flutter-io.cn/

Flutter 包管理器

Flutter包管理器是Yanr。Flutter项目默认的配置文件是pubspec.yaml

将yanr默认仓库设置为国内镜像地址

新增环境变量

setx PUB_HOSTED_URL "https://pub.flutter-io.cn" 
setx FLUTTER_STORAGE_BASE_URL "https://storage.flutter-io.cn" 
setx PUB_CACHE "E:\PUB_CACHE"

pub 的环境变量 |飞镖 (dart.cn)

Packages | Dart

dart pub cache | Dart

pubspec.yaml文件说明

# 应用或包名称
name: flutter_demo
# 应用或包的描述、简介
description: A new Flutter project.

# 应用或包的版本号
version: 1.0.0

# 生产环境依赖的工具包
dependencies:
  flutter:
    sdk: flutter

# 开发环境依赖的工具包
dev_dependencies:
  flutter_test:
    sdk: flutter

# flutter相关的配置选项
flutter:
 # 配置静态文件
 assets:
  - images/a_dot_burr.jpeg
  - images/a_dot_ham.jpeg

# 配置字体文件
fonts:
  - family: Schyler
  fonts:
  - asset: fonts/Schyler-Regular.ttf
  - asset: fonts/Schyler-Italic.ttf
  style: italic

获取包

dart pub get <具体的包>

如: dart pub get dio

从包中导入库

使用 package: 前缀,导入包中的库:

import 'package:js/js.dart' as js;
import 'package:intl/intl.dart';

资源管理

flutter资源主要包括静态数据(例如JSON文件)、图标和图片(JPEG,WebP,GIF,动画WebP / GIF,PNG,BMP和WBMP)等。每个asset都通过相对于pubspec.yaml文件所在位置的进行配置。如上所述的image图片、font字体等。

配置图片资源

pubspec.yaml flutter 配置环境下,可配置静态文件目录或者文件名

assets:
  - images/tabbar  //  可以直接配置静态资源文件目录
  - images/image.png // 也可以配置图片名

使用资源图片资源

Center(
  child: Image.asset(
    'images/image.png',
    width: 350,
    height: 335,
  ),
),

配置全局字体资源

  1. 下载字体资源包,存放在程序主目录/fonts 文件夹(存放目录可以是任何位置,需要在pubspec.yaml 配置正确的目录地址)
  2. 在pubspec.yaml flutter 配置环境下,配置静态文件目录或者文件名
fonts:
  - family: Avenir
    fonts:
      - asset: fonts/Avenir/Avenir.ttf  // 配置正确的字体存放路径
        weight: 900
  1. 在main.dart 中定义全局字体配置
MaterialApp(
   theme: ThemeData(fontFamily: 'Avenir'),
   debugShowCheckedModeBanner: false,
  ),
);

配置完成后,你程序中的默认字体就是你所下载的字体文件了

Flutter package包依赖的四种方法

pub.dev

这是是最常见也是最方便的方法,但是只适用于发布到pub.dev平台的包,直接配置包名和版本号(可选)即可

dependencies:
  collection: '^0.1.2'

Hosted

除了把package发布到pub.dev,我们还可以选择发布到私有的Dart托管仓库

私有托管仓库的依赖配置如下

dependencies:
  plugin1:
    hosted:
      name: plugin1
      url: http://your-package-server.com
    version: ^1.4.0

Git

对于托管在git上的package项目也可以直接依赖

如下配置表示该项目位于git仓库的根目录路径上

dependencies:
  plugin1:
    git:
      url: git://github.com/flutter/plugin1.git

如上配置默认认为package项目位于仓库的根目录上,若不是,需用path:配置指出具体的子目录

dependencies:
  package1:
    git:
      url: git://github.com/flutter/packages.git
      path: packages/package1

也可以通过ref指定依赖某个提交的版本、分支或者tag

dependencies:
  package1:
    git:
      url: git://github.com/flutter/packages.git
      ref: some-branch

path

若开发的包未上传到pub.dev也未上传到git也没关系,可以通过文件路径直接引用

绝对路径引用

dependencies:
  plugin1:
    path: D:/plugins/plugin1

相对路径引用

dependencies:
  plugin1:
    path: ../plugins/plugin1

库的引入

dart中,任意一个文件都会被认为是一个库,尽管其中可能并没有library标签,dart库目前的引入方式大致有三种:

引入dart语言的内置库

import 'dart:math';

引入内置库时,在使用的uri中以dart:开头

引入pub包管理器提供库

import 'package:flutter/material.dart';

在引用包管理器提供的库时,uri中以package开头

引入本地文件

import './tools/network.dart';

引用本地文件时,uri字符串中直接填写文件的相对路径。

指定库的别名

两个库中如果存在相同的标识符,在使用时很有可能会产生冲突;或者在引入一个库的内容的时候,由于当前文件引入的库比较多,导致使用IDE工具提供的标识符名称联想时,很有可能出现一些本不是我们想要选取,但是首字母相近的内容,影响编码效率,为此我们可以使用给库指定别名的方法,来规避以上问题。

import 'package:socket_io_client/socket_io_client.dart' as IO;

class MySocketIO {
  IO.Socket mySocket;
  MySocketIO(this.mySocket);
}

只引入库的部分内容

如果只想引入库的部分内容,可以使用如下语法:

// Import only foo.
import 'package:lib1/lib1.dart' show foo;

如果想屏蔽库中的某些内容,不引入这部分:

// Import all names EXCEPT foo.
import 'package:lib2/lib2.dart' hide foo;

参考资料

flutter 文件与库的引用导出(import、import as、import show、part、part of、library) - 掘金 (juejin.cn)

Flutter 第五课 --- 包管理器和资源管理 - 掘金 (juejin.cn)

pub 的环境变量 |飞镖 (dart.cn)

Packages | Dart

dart pub cache | Dart

Flutter package包依赖的四种方法_flutter package path 依赖-CSDN博客

Package 依赖 | Dart