文章目录

  • 前言
  • 开发环境
  • 问题描述
  • 问题分析
  • 解决方案
  • 总结
  • 最后

前言

在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

问题分析

  1. 示例一分析

查看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:iodart:io库不支持Web平台,依赖dart:io库的Package自然被Pub当作不支持Web平台。

  1. 示例二分析

查看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类型项目的平台支持相关推荐

  1. flutter dart 学习记录

    1.下载flutter sdk 2.AS 安装 dart.flutter插件 3.环境变量的用户变量Path内容追加下载的flutter\bin路径,再添加两个新的变量 export PUB_HOST ...

  2. foxmail联系人插件_软件开发公司_软件外包_项目外包平台支持outlook,foxmail等邮件客户端通讯录同步插件...

    任务需求: 任务名称:邮件客户端通讯录同步插件任务说明:此程序主要作为常用window平台邮件客户端软件如outlook.Foxmail等程序的插件,完成从邮件服务器端数据库中读取邮件通讯录同步到邮件 ...

  3. Flutter Web(一)新建项目和登录页

    flutter开发环境搭建略 如果是新搭建好的环境,需要开启web支持和windows支持 flutter config --enable-windows-desktop flutter config ...

  4. Flutter 动态化 | Flutter + Dart 三端一体化动态化平台实践

    导读 FairPushy 是基于Flutter+Dart三端一体化打造的动态更新平台主要由Web + Server + Native全部使用Flutter+Dart编写,为Flutter动态化场景提供 ...

  5. 用Flutter + Dart快速构建一款绝美移动App

    作者 | Wojciech Kuroczycki 译者 | 弯月 来源 | CSDN(ID:CSDNnews) 如今,与前端或移动相关的新框架层出不穷.所有从事Web开发的人都应该熟悉各种目不暇接的新 ...

  6. Flutter Dart:用数字分组显示大数字

    Flutter & Dart:用数字分组显示大数字 大家好,我是坚果,我的公众号"坚果前端", 用逗号显示大数字作为千位分隔符将增加可读性.这篇简短的文章将向您展示如何借助 ...

  7. 不用掉一根头发!用 Flutter + Dart 快速构建一款绝美移动 App

    作者 | Wojciech Kuroczycki 译者 | 弯月 出品 | CSDN(ID:CSDNnews) 如今这个时代,与前端或移动相关的新框架层出不穷.所有从事Web开发的人都应该熟悉各种目不 ...

  8. Flutter --- Dart简介

    一.简介 由Google主导开发,于2011年10月公开.它的开发团队由Google Chrome浏览器V8引擎团队的领导者拉尔斯·巴克主持,目标在于成为下一代结构化Web开发语言.类似JavaScr ...

  9. Flutter Dart 安装在window系统

    一.系统环境 flutter最低要求 1,windows7 SP1 64位版本以上,我的系统就是windows 7 sp1 64bit 2,git for windows ,没有安装的需要到这里下载  ...

最新文章

  1. 7000p可以加装固态吗_解惑丨地暖不热加装循环泵可以吗?
  2. [转]JDBC中日期时间的处理技巧
  3. linux sed命令整行替换:将`PermitRootLogin`行替换成`PermitRootLogin yes`
  4. WPF Tile=” 变量 UI 双向绑定”x:Class=Problem/
  5. 学霸系统计算机天才,小欢喜:开局获得学霸系统
  6. recovery模式下支持ADB连接和串口操作
  7. 【oracle案例】ORA-01102: cannot mount database in EXCLUSIVE mode .
  8. k短路-洛谷P2483 [SDOI2010]魔法猪学院
  9. 百度Hi Csrf蠕虫攻击
  10. 48 个 Linux 面试问题和答案
  11. 关于sentaurus使用感
  12. 如何使用思维导图?思维导图绘制方法介绍
  13. java怎么输出无损高清音乐_MP3转换器如何将无损FLAC音频转换成MP3音乐
  14. 多无线路由器AP使用同一个SSID号无缝连接漫游
  15. Hui-iconfont字符图标不显示或显示异常。
  16. html div flex,CSS中flex布局详解
  17. C++ 总结 基本成员函数
  18. 『推箱子』苏晓辉の转专业面试作品 · 纪念品
  19. docker-compose环境变量
  20. 区块链软件开发公司谈分布式账本与区块链账本的区别

热门文章

  1. Excel如何快速统计及格人数
  2. 分词,难在哪里?科普+解决方案!
  3. 如何搭建Tesla Occupancy Network的一个基线?
  4. 02.密钥学基本概念
  5. 浪叫兽的自我介绍 (完整版) 讲述一段如何进入大数据行业
  6. unity项目接Steam的 SDK
  7. 最近看过的几本给我印象深刻的书
  8. Braintree 常见问题解决
  9. IBM蓝色加油站软件 大象快跑的加速器
  10. 一文带你体验CentOS7防火墙firewall