Flutter Dart问题记录 - Package类型项目的平台支持
文章目录
- 前言
- 开发环境
- 问题描述
- 问题分析
- 解决方案
- 总结
- 最后
前言
在Flutter问题记录 - Flutter插件创建Package项目报错:At least one platform must be selected文章中初步确定Flutter创建Package项目选择支持的平台是无效的,但同时在Pub仓库又能看到一些Package类型的库显示只支持部分平台,带着这个疑问我写下了这篇文章。
开发环境
- Android Studio: 2021.3.1 Patch 1
- Flutter: 3.3.10
- Dart 2.18.6
问题描述
创建Flutter Package项目时无法选择平台,奇怪的是在Pub仓库又能看到一些Package类型的库显示只支持部分平台,再者如果确实有这样的需求,该怎么设置只支持部分平台呢?
Pub仓库中两个显示只支持部分平台的示例:
示例一:mason
示例二:build_runner
问题分析
- 示例一分析
查看pubspec.yaml文件,可以看到里面并没有平台相关的声明,那为什么会不支持Web平台呢?
name: mason
description: >A Dart template generator which helps teams generate files quickly and consistently.
version: 0.1.0-dev.40
homepage: https://github.com/felangel/mason
repository: https://github.com/felangel/mason
issue_tracker: https://github.com/felangel/mason/issues
documentation: https://github.com/felangel/mason/tree/master/packages/mason_cli#readmeenvironment:sdk: ">=2.16.0 <3.0.0"dependencies:archive: ^3.1.11checked_yaml: ^2.0.1collection: ^1.15.0convert: ^3.1.0crypto: ^3.0.1http: ^0.13.3json_annotation: ^4.4.0mason_logger: ^0.2.2meta: ^1.7.0mustache_template: ^2.0.0path: ^1.8.0pool: ^1.5.1pub_semver: ^2.1.0recase: ^4.0.0yaml: ^3.1.0dev_dependencies:build_runner: ^2.0.0build_verify: ^3.0.0build_version: ^2.0.0json_serializable: ^6.0.0mocktail: ^0.3.0test: ^1.17.0very_good_analysis: ^2.4.0
点开这个库在Pub仓库里的Scores,找到Platform support
,点开查看详情:
可以看到Package不兼容Web平台的原因是使用了dart:io
,dart:io
库不支持Web平台,依赖dart:io
库的Package自然被Pub当作不支持Web平台。
- 示例二分析
查看pubspec.yaml文件,可以看到里面有关于平台的声明platforms
。
name: build_runner
version: 2.3.4-dev
description: A build system for Dart code generation and modular compilation.
repository: https://github.com/dart-lang/build/tree/master/build_runnerenvironment:sdk: ">=2.14.0 <3.0.0"platforms:linux:windows:macos:dependencies:args: ^2.0.0async: ^2.5.0analyzer: '>=4.4.0 <6.0.0'build: ">=2.1.0 <2.4.0"build_config: ">=1.1.0 <1.2.0"build_daemon: ^3.1.0build_resolvers: ^2.0.0build_runner_core: ^7.2.0code_builder: ^4.2.0collection: ^1.15.0crypto: ^3.0.0dart_style: ^2.0.0frontend_server_client: ^3.0.0glob: ^2.0.0graphs: ^2.0.0http_multi_server: ^3.0.0io: ^1.0.0js: ^0.6.3logging: ^1.0.0meta: ^1.3.0mime: ^1.0.0package_config: ^2.0.0path: ^1.8.0pool: ^1.5.0pub_semver: ^2.0.0pubspec_parse: ^1.0.0shelf: ^1.0.0shelf_web_socket: ^1.0.0stack_trace: ^1.10.0stream_transform: ^2.0.0timing: ^1.0.0watcher: ^1.0.0web_socket_channel: ^2.0.0yaml: ^3.0.0dev_dependencies:build_test: ^2.0.0build_web_compilers: ^3.0.0lints: '>=1.0.0 <3.0.0'stream_channel: ^2.0.0test: ^1.16.0test_descriptor: ^2.0.0test_process: ^2.0.0_test_common:path: ../_test_common
点开这个库在Pub仓库里的Scores,找到Platform support
,点开查看详情:
可以看到Package只兼容Windows/Linux/MacOS平台的原因是有声明,那我在已经创建好的Flutter Package项目里加上平台声明是不是能限制依赖?经测试是不行的,该依赖还是依赖,其实不用测也知道,大部分人应该都用过json_serializable吧,这个库用于JSON序列化,用到了dart:mirrors
(反射)和dart:io
,被Pub仓库识别为不兼容Android/iOS/Web平台,但Flutter开发时还是可以依赖这个库通过反射生成JSON序列化相关代码。所以,Package的平台支持是不会限制你依赖的,但只要你用在了不支持的平台或不对的时机,那可能就无法正常使用了。
通过以上两个示例,现在大致可以知道为什么有些库显示只支持某些平台的原因,一是使用了不兼容全平台的API,二是显式声明了支持的平台。
但是好像这两个示例的pubspec.yaml
内容和Flutter Package项目的pubspec.yaml
内容有点不一样,最明显的是没有默认依赖Flutter SDK,之所以没有依赖Flutter SDK,这是因为以上两个示例是Dart Package项目。
感兴趣的可以自己创建一个Dart Package项目,如果你用的是Android Studio,可以通过[File]->[New]->[New Flutter Project…]->[Dart]创建,点击[Next]前要检查Dart SDK路径。
也可以通过命令行创建:
dart create 项目名称 -t package
在Pub仓库翻了翻,发现不支持全平台的Package大部分都是Dart Package项目,当然,Flutter Package项目也是有的,例如腾讯IM相关的tencent_cloud_chat_uikit,这个库是显式声明只支持Android/iOS/Web平台。所以,虽然创建Flutter Package项目时无法选择平台,但是可以手动显式声明需要支持的平台。
解决方案
如果创建的Flutter Package项目明确只支持部分平台,那么可以显式声明支持的平台,如果不确定,可以交给Pub仓库自动检测。
pubspec文件关于Platforms
字段的说明与使用:
总结
熬夜把这篇文章补完了
Flutter Dart问题记录 - Package类型项目的平台支持相关推荐
- flutter dart 学习记录
1.下载flutter sdk 2.AS 安装 dart.flutter插件 3.环境变量的用户变量Path内容追加下载的flutter\bin路径,再添加两个新的变量 export PUB_HOST ...
- foxmail联系人插件_软件开发公司_软件外包_项目外包平台支持outlook,foxmail等邮件客户端通讯录同步插件...
任务需求: 任务名称:邮件客户端通讯录同步插件任务说明:此程序主要作为常用window平台邮件客户端软件如outlook.Foxmail等程序的插件,完成从邮件服务器端数据库中读取邮件通讯录同步到邮件 ...
- Flutter Web(一)新建项目和登录页
flutter开发环境搭建略 如果是新搭建好的环境,需要开启web支持和windows支持 flutter config --enable-windows-desktop flutter config ...
- Flutter 动态化 | Flutter + Dart 三端一体化动态化平台实践
导读 FairPushy 是基于Flutter+Dart三端一体化打造的动态更新平台主要由Web + Server + Native全部使用Flutter+Dart编写,为Flutter动态化场景提供 ...
- 用Flutter + Dart快速构建一款绝美移动App
作者 | Wojciech Kuroczycki 译者 | 弯月 来源 | CSDN(ID:CSDNnews) 如今,与前端或移动相关的新框架层出不穷.所有从事Web开发的人都应该熟悉各种目不暇接的新 ...
- Flutter Dart:用数字分组显示大数字
Flutter & Dart:用数字分组显示大数字 大家好,我是坚果,我的公众号"坚果前端", 用逗号显示大数字作为千位分隔符将增加可读性.这篇简短的文章将向您展示如何借助 ...
- 不用掉一根头发!用 Flutter + Dart 快速构建一款绝美移动 App
作者 | Wojciech Kuroczycki 译者 | 弯月 出品 | CSDN(ID:CSDNnews) 如今这个时代,与前端或移动相关的新框架层出不穷.所有从事Web开发的人都应该熟悉各种目不 ...
- Flutter --- Dart简介
一.简介 由Google主导开发,于2011年10月公开.它的开发团队由Google Chrome浏览器V8引擎团队的领导者拉尔斯·巴克主持,目标在于成为下一代结构化Web开发语言.类似JavaScr ...
- Flutter Dart 安装在window系统
一.系统环境 flutter最低要求 1,windows7 SP1 64位版本以上,我的系统就是windows 7 sp1 64bit 2,git for windows ,没有安装的需要到这里下载 ...
最新文章
- 7000p可以加装固态吗_解惑丨地暖不热加装循环泵可以吗?
- [转]JDBC中日期时间的处理技巧
- linux sed命令整行替换:将`PermitRootLogin`行替换成`PermitRootLogin yes`
- WPF Tile=” 变量 UI 双向绑定”x:Class=Problem/
- 学霸系统计算机天才,小欢喜:开局获得学霸系统
- recovery模式下支持ADB连接和串口操作
- 【oracle案例】ORA-01102: cannot mount database in EXCLUSIVE mode .
- k短路-洛谷P2483 [SDOI2010]魔法猪学院
- 百度Hi Csrf蠕虫攻击
- 48 个 Linux 面试问题和答案
- 关于sentaurus使用感
- 如何使用思维导图?思维导图绘制方法介绍
- java怎么输出无损高清音乐_MP3转换器如何将无损FLAC音频转换成MP3音乐
- 多无线路由器AP使用同一个SSID号无缝连接漫游
- Hui-iconfont字符图标不显示或显示异常。
- html div flex,CSS中flex布局详解
- C++ 总结 基本成员函数
- 『推箱子』苏晓辉の转专业面试作品 · 纪念品
- docker-compose环境变量
- 区块链软件开发公司谈分布式账本与区块链账本的区别