写点什么

Flutter 插件使用必知必会,我的阿里春招之路分享

用户头像
Android架构
关注
发布于: 10 小时前

}}


  • iOS

  • ios/Runner目录下自动生成的GeneratedPluginRegistrant.m中,会添加插件的注册代码。


#import "GeneratedPluginRegistrant.h"#import <url_launcher/UrlLauncherPlugin.h>


@implementation GeneratedPluginRegistrant


  • (void)registerWithRegistry:(NSObject<FlutterPluginRegistry>*)registry {[FLTUrlLauncherPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTUrlLauncherPlugin"]];}


@end


  • AppDelegate.swift启动后去调用注册


@UIApplicationMain@objc class AppDelegate: FlutterAppDelegate, WXApiDelegate {


override func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {GeneratedPluginRegistrant.register(wit


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


h: self)return super.application(application, didFinishLaunchingWithOptions: launchOptions)}}


  1. 在项目文件中 import 所需的包名,并使用

  2. 如果依赖中存在 platform-specific code (Java/Kotlin for Android, Swift/Objective-C for iOS),要确保代码能够编译进 App ,必须 Restart App,防止发生MissingPluginException异常。Hot reload 或者 Hot restart 只对 dart 代码有效。

版本约束

版本格式:主版本号.次版本号.修订号,版本号递增规则如下:


  • 主版本号:当你做了不兼容的 API 修改,

  • 次版本号:当你做了向下兼容的功能性新增,

  • 修订号:当你做了向下兼容的问题修正。


更详细的参考[语义化版本](


)


基本用法:


any # 所有版本,等同于不写。对 pub 运行性能有影响,不推荐 1.2.3 # 明确的版本号'>=1.2.3' # 还有 >1.2.3, <=1.2.3, <1.2.3^1.2.3 # Caret syntax 等同于 >=1.2.3 <2.0.0


注意:如果在版本约束中使用了'>','<'字符,一定要加引号,否则无法被当作 YAML 的语法解析

版本冲突

如果项目依赖了 A , B 库,他们都依赖了一个 C ,但 C 的版本不同,可能会产生版本冲突。pub 会尝试找到符合所有依赖约束的版本号。如果找不到能匹配的版本,但 AB 库依赖 C 库的 API 是一样的,那么可以添加一个依赖覆盖来强制指定某一版本。


注:pub 是 Dart SDK 提供的一个包管理工具


dependencies:some_package:other_package:dependency_overrides:url_launcher: '0.4.3'


如果是 Android 平台的库依赖冲突,可以在 appgradle 文件中强制指定版本


configurations.all {resolutionStrategy {force 'com.google.guava:guava:23.0-android'}}


注意: iOS 平台下 CocoaPods 不支持强制版本覆盖

从不同的依赖源添加依赖

[SDK](

)


The SDK source is used for any SDKs that are shipped along with packages, which may themselves be dependencies. Currently, Flutter is the only SDK that is supported.


通俗讲,就是 Flutter SDK 自带的库。打开我们 Flutter 的安装地址,进入flutter/packages可以看到各种包,如flutter,flutter_driver,flutter_test等。


? packages git:(stable) ? lsanalysis_options.yaml flutter_localizationsflutter flutter_testflutter_driver flutter_toolsflutter_goldens fuchsia_remote_debug_protocolflutter_goldens_client? packages git:(stable) ? pwd/Users/xxx/flutter/packages


在 Flutter 项目中写过测试的同学对上面几个依赖应该不陌生


dependencies:flutter:sdk: flutter # 来源于 flutter sdkdev_dependencies:flutter_test:sdk: flutterflutter_driver:sdk: flutter

Hosted

A hosted package is one that can be downloaded from [pub.dartlang.org](


) (or another HTTP server that speaks the same API).

pub

dependencies:transmogrify: ^1.4.0

自己的服务器

dependencies:transmogrify: ^1.4.0transmogrify:hosted:name: transmogrifyurl: http://your-package-server.comversion: ^1.4.0

Git

dependencies:kittens:git: git://github.com/munificent/kittens.git


指定分支


dependencies:kittens:url: git://github.com/munificent/kittens.gitref: some-branch


pub 默认包目录在 git 仓库的根目录,如果要指定在别的位置,可以用 path 参数


dependencies:kittens:git:url: git://github.com/munificent/cats.gitpath: path/to/kittens

本地路径

特别适用在一个人同时开发项目和依赖库的情况。因为修改依赖库的代码,在项目中就可以即时生效,有利于调试和提高效率。


dependencies:transmogrify:path: /Users/me/transmogrify # 也可以相对路径,相对路径以 pubspec.yml 文件为基准

依赖的分类

直接依赖和传递依赖

根据依赖与项目的关系,可以分为以下 2 类:


  • immediate dependency :项目中直接使用的依赖,即我们在 pubspec 中列出的依赖,包括 dependciesdev_dependencies

  • transitive dependency :直接依赖所需的依赖, pub 会根据 pubspec 中列出的依赖自动为我们获取。

举个例子

比如我们项目依赖 A ,而 A 又依赖 BB 又依赖 C 。那么 A 是我们项目的immediate dependency, BC 就是transitive dependency


我们可以在命令行中输入命令flutter packages pub deps,查看项目的依赖树。 比如我们在项目中引入了一个支持网络缓存的图片库cached_network_image: ^0.5.0+1


flutter packages pub depsDart SDK 2.1.0-dev.9.4.flutter-f9ebf21297Flutter SDK 1.0.1-pre.2your_app_name 2.2.0+10 # 项目名称和版本|-- cached_network_image 0.5.1 # 直接依赖| |-- flutter... # 直接依赖(因为在项目 pubspec 中也添加了)| '-- flutter_cache_manager 0.2.0+1 # 传递依赖| |-- flutter...| |-- http...| |-- path_provider...| |-- shared_preferences...| |-- synchronized 1.5.3| '-- uuid 1.0.3| |-- convert...| '-- crypto......

常规依赖和 dev 依赖

根据依赖的作用范围,可以分为:


  • dependencies :常规依赖

  • dev dependencies :开发时所需依赖。它和常规依赖的区别是,项目依赖库中的 dev dependencies ,对于你的项目来说是不可见的。

举个例子

项目的 pubspec.yml 如下。如果 A 有一个 dev_dependencies 依赖 dev_C ,项目最终的依赖是 A , dev_B;不包括 dev_C


dependencies:A:dev_dependencies:dev_B:

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Flutter 插件使用必知必会,我的阿里春招之路分享