插件的使用
添加依赖
-
打开项目下的
pubspec.yaml
文件,在dependencies
下添加依赖名称和版本等信息 -
在命令行下运行
flutter packages get
,或者在IDE
中 点击Packages Get
等待它下载完成,并生成插件注册代码
-
Android:
-
在
android/app/scr/main/java/io/flutter/plugins
目录下自动生成的GeneratedPluginRegistrant.java
中,会添加插件的注册代码。
public final class GeneratedPluginRegistrant {
public static void registerWith(PluginRegistry registry) {
if (alreadyRegisteredWith(registry)) { return; }
UrlLauncherPlugin.registerWith(registry.registrarFor(“io.flutter.plugins.urllauncher.UrlLauncherPlugin”));
…
}
…
}
- 在 App 的
MainActivity
创建时会去调用这个注册方法
class MainActivity : FlutterActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
GeneratedPluginRegistrant.registerWith(this)
}
}
-
iOS
-
在
ios/Runner
目录下自动生成的GeneratedPluginRegistrant.m
中,会添加插件的注册代码。
#import “GeneratedPluginRegistrant.h”
#import <url_launcher/UrlLauncherPlugin.h>
@implementation GeneratedPluginRegistrant
- (void)registerWithRegistry:(NSObject*)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(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
-
在项目文件中
import
所需的包名,并使用 -
如果依赖中存在 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
会尝试找到符合所有依赖约束的版本号。如果找不到能匹配的版本,但 A
,B
库依赖 C
库的 API 是一样的,那么可以添加一个依赖覆盖来强制指定某一版本。
注:pub 是 Dart SDK 提供的一个包管理工具
dependencies:
some_package:
other_package:
dependency_overrides:
url_launcher: ‘0.4.3’
如果是 Android 平台的库依赖冲突,可以在 app
的 gradle
文件中强制指定版本
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) ✗ ls
analysis_options.yaml flutter_localizations
flutter flutter_test
flutter_driver flutter_tools
flutter_goldens fuchsia_remote_debug_protocol
flutter_goldens_client
➜ packages git:(stable) ✗ pwd
/Users/xxx/flutter/packages
在 Flutter 项目中写过测试的同学对上面几个依赖应该不陌生
dependencies:
flutter:
sdk: flutter # 来源于flutter sdk
dev_dependencies:
flutter_test:
sdk: flutter
flutter_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.0
transmogrify:
hosted:
name: transmogrify
url: http://your-package-server.com
version: ^1.4.0
Git
dependencies:
kittens:
git: git://github.com/munificent/kittens.git
指定分支
dependencies:
kittens:
url: git://github.com/munificent/kittens.git
ref: some-branch
pub
默认包目录在 git
仓库的根目录,如果要指定在别的位置,可以用 path
参数
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
最后
下面是辛苦给大家整理的学习路线,有需要的可以点击这里免费获取
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-jDDySyV7-1710835581790)]
最后
下面是辛苦给大家整理的学习路线,有需要的可以点击这里免费获取
[外链图片转存中…(img-XiiNtCFq-1710835581790)]