查找并使用软件包来构建Dart和Flutter应用 Find and use packages to build Dart and Flutter apps
常用开源库大纲
原生平台有关的第三方库
由于开发中会用到一些三方的sdk,但是国内的sdk目前还没有支持Flutter,我在pub上面收集了一些相关的三方库,也不知道效果如何,待检验,欢迎各位试用给出反馈
地图(地图显示、定位、经纬度等)
库名 | 描述 | GitHub链接 |
---|---|---|
map_view | iOS和Android上显示谷歌地图的Flutter插件 | [ |
](https://pub.dartlang.org/packages/map_view) |
| flutter_map | 基于leaflet的Flutter地图包 | johnpryan/flutter_map |
| location | 处理Android和iOS上的位置
它还提供位置更改时的回调 | Lyokone/flutterlocation |
| latlong | 计算通用的纬度和经度的轻量级库 | MikeMitterer/dart-latlong |
二维码
库名 | 描述 | GitHub链接 |
---|---|---|
scan | 扫描小部件树中的qrcode和条形码。 从pat解码qrcode和条形码图像 |
|
qr_flutter | QR.Flutter是一个Flutter库,基于QR-Dart,可通过Widget或自定义Paint进行简单快速的QR码渲染。可配置的输出大小、填充、背景和前景颜色。可以导出图像数据。不需要Internet连接 | lukef/qr.flutter |
barcode_scan | 用于扫描2D条形码和QRCodes的Flutter插件 | mintware-de/flutter_barcode_reader |
qrcode_reader | 使用相机读取二维码的Flutter插件 | villela/flutter_qrcode_reader |
WebView(Flutter和JavaScript交互)
库名 | 描述 | GitHub链接 |
---|---|---|
flutter_webview_plugin | 允许Flutter与原生Webview进行通信的插件 | dart-flitter/flutter_webview_plugin |
图表库
库名 | 描述 | GitHub链接 |
---|---|---|
charts-common | Material Design风格的图表库 | google/charts |
charts-flutter | 通用的图表库组件 | google/charts |
flutter_circular_chart | 让你使用flutter轻松创建的动画圆形图控件的库 | xqwzts/flutter_circular_chart |
权限库(移动端App需要申请权限,必备)
库名 | 描述 | GitHub链接 |
---|---|---|
simple_permissions | 用于android和ios的请求权限的库 | Ethras/flutter_simple_permissions |
flutter_simple_permissions | 权限申请的库 |
统计(统计App的有关数据,比如日活跃量、用户量、下载量、在线时长等)
库名 | 描述 | GitHub链接 |
---|---|---|
flutter_umeng_analytics | 这个库集成了友盟统计sdk(网友写的,并非官方的) | pedia/flutter_umeng_analytics |
janalytics | 极光统计SDK的Flutter官方版本 | |
- | 目前友盟的U-App移动统计还没有推出Flutter版本的插件库 | - |
分享和登陆(QQ、微信、微博等平台的分享和登陆)
库名 | 描述 | GitHub链接 |
---|---|---|
sharesdk | ShareSDK官方推出的功能的Flutter插件,用于分享、登陆等社交功能 | |
share | 支持分享的flutter插件 | flutter/plugins |
flutter_qq | 这个库集成了QQ登录、QQ分享、QQ空间分享 | marekchen/flutter_qq |
flutter_wechat | 这个库集成了微信,支持微信登录、分享、支付 | pj0579/flutter_wechat |
- | 极光针对Android和iOS各自都有SDK,只是目前极光还没有把分享和登陆集成到Flutter里 | |
- | 目前友盟的U-Share社会化分享还没有推出Flutter版本的插件库 |
推送(把服务端的消息推送到移动设备上必备的)
库名 | 描述 | GitHub链接 |
---|---|---|
jpush-flutter | 极光推送官方的插件库 | jpush/jpush-flutter-plugin |
mobpush | Mob官方的推送插件。使用此插件能够帮助您在使用 Flutter 开发应用时,快速地实现推送功能 | MobClub/MobPush-for-Flutter |
- | 目前友盟的U-push推送还没有推出Flutter版本的插件库 | - |
IM(即时通讯(聊天)等使用场景)
库名 | 描述 | GitHub链接 |
---|---|---|
rongcloud_im_plugin | 基于融云 iOS/Android 平台的 IMLib SDK | rongcloud/rongcloud-im-flutter-sdk rongcloud/imkit-flutter-quickstart |
jmessage-flutter | 极光官方推出的IM聊天、社交功能的插件 | jpush/jmessage-flutter-plugin |
RTC(音视频会议通话等使用场景)
库名 | 描述 | GitHub链接 |
---|---|---|
rongcloud_rtc_plugin | 基于 融云 iOS/Android 平台的 RTCLib SDK | rongcloud/rongcloud-rtc-flutter-sdk |
Agora-Flutter-Quickstart | 声网官方集成的RTC SDK示例 | AgoraIO-Community/Agora-Flutter-Quickstart |
- | 目前极光的JMRTC还没有推出Flutter版本的插件库。(极光针对Android和iOS各自都有SDK,只是目前极光还没有把JMRTC集成到Flutter里面) | - |
视频播放(本地视频、网上视频、或者rtmp源格式)
库名 | 描述 | GitHub链接 |
---|---|---|
my_aliplayer | 集成了阿里云播放器,可以用来播放视频,也可以播放rtmp格式 | hyz1992/my_aliplayer |
支付(使用支付宝、微信支付等支付方式)
库名 | 描述 | GitHub链接 |
---|---|---|
flutter_alipay | 这个库继承了支付宝,兼容android和ios | best-flutter/flutter_alipay |
目前的做法是:自己去把支付宝和微信分别集成 |
SMS(短信验证码)
库名 | 描述 | GitHub链接 |
---|---|---|
mobsms | 为开发者提供全球通用的短信验证码工具。使用此插件能够帮助您在使用Flutter开发应用时,快速地实现获取验证码功能 | |
jverify | 极光认证整合了三大运营商的网关认证能力,为开发者提供了一键登录和号码认证功能,目前极光把这些集成到Flutter里 | jpush/jverify-flutter-plugin |
网页页面跳转到App具体页面(APP的链接化)
库名 | 描述 | GitHub链接 |
---|---|---|
moblink | MobLink提供Web与APP直接跳转的完全免费产品服务,实现网页间直接跳转升级为APP间直接跳转。 | |
- | 极光有一个JMLink SDK,目前有Android和iOS版,还没有Flutter版本,坐等完善。 | - |
一个好玩的库
库名 | 描述 | GitHub链接 |
---|---|---|
pwa | 基于Dart的PWA应用程序的库 | isoos/pwa |
数据有关的第三方库
网络请求(加载网络数据,发送数据到服务端)
库名 | 描述 | GitHub链接 |
---|---|---|
http | 该软件包包含一组高级函数和类,可以轻松使用HTTP资源。它与平台无关,可以在命令行和浏览器上使用 | dart-lang/http |
dio | Dart的一个强大的Http客户端,支持拦截器、全局配置、FormData、请求取消、文件下载、超时等 | flutterchina/dio |
http_multi_server | dart:io HttpServer包装器,用于处理来自多个服务器的请求 | dart-lang/http_multi_server |
jaguar_retrofit | Dart版本的Retrofit库,用于实现一个HTTP客户端API生成器。(我给它点评:666!思想都是相通的) | Jaguar-dart/client |
类型编解码的库(字符编解码)
库名 | 描述 | GitHub链接 |
---|---|---|
html_unescape | 用于解决HTML编码字符串的Dart库。支持所有命名字符引用(如 ) 小数字符引用(如á) 十六进制字符引用(如á) |
filiph/html_unescape |
gbk2utf8 | 官方的http还不能支持中文gbk的解析,这个项目就是为了解决gbk转成utf-8编码的 | jzoom/gbk2utf8 best-flutter/gbk2utf8 |
序列化
- 手动序列化 使用 dart:convert 的内置解码器。包括传入 JSON 原始字符串给 JSON.decode() 方法,然后从 Map
中查询你需要的数据,详情案例点击查看 - 自动序列 | 库名 | 描述 | GitHub链接 | | —- | —- | —- | | json_serializable | 提供Dart Build System构建器以处理JSON | dart-lang/json_serializable | | built_value | runtime依赖项 | google/built_value.dart | | built_value_generator | dev依赖项 | google/built_value.dart | | built_value_test | test依赖项 | google/built_value.dart |
JSON解析(json解析成Map或对象)
库名 | 描述 | GitHub链接 |
---|---|---|
codable | 用于将动态结构化数据(JSON,YAML)转换为Dart类型的库 | stablekernel/dart-codable |
Dson | DSON是一个将Dart对象转换为JSON的库。(用于web)这个库是Dartson的一个分支,但又有不同 | drails-dart/dson luisvt/dson |
Github上面的库或者IDE插件
- json_to_dart 根据json生成Dart实体类
- JSONFormat4Flutter 这是一个Android Studio的辅助插件,将JSONObject格式的String解析成Dart的实体类
- JsonToDartWeb 是一个全平台的json转Dart的工具,支持包括:Win、Mac、Web以及(Linux待测试)
几个常用Json库的比较
方式 | 大小 (js) | 序列化 (dart) | 反序列化 (dart) | 序列化 (js) | 反序列化 (js) |
---|---|---|---|---|---|
https://github.com/drails-dart/dart-serialise | |||||
json_serializable | 80 KB | 9.09 ms | 6.61 ms | 8.23 ms | 8.12 ms |
Serializable | 79 KB | 6.1 ms | 6.92 ms | 4.37 ms | |
DSON | 94 KB | 12.72 ms | 11.15 ms | 16.64 ms | 17.94 ms |
Dartson | 86 KB | 9.61 ms | 6.81 ms | 8.58 ms | 7.01 ms |
Manual | 86 KB | 8.29 ms | 5.78 ms | 10.7 ms | 7.9 ms |
Interop | 70 KB | 61.55 ms | 14.96 ms | 2.49 ms | 2.93 ms |
Jaguar_serializer | 88 KB | 8.57 ms | 6.58 ms | 10.31 ms | 8.59 ms |
Jackson (Groovy) | 496 ms | 252 ms | n/a | n/a |
反序列化(将Dart文件转换成json字符串)
库名 | 描述 | GitHub链接 |
---|---|---|
Dartson | 一个Dart库,可用于将Dart对象转换为JSON字符串 | eredo/dartson |
让JSON在手机上可视化的插件(可以体验一下)
库名 | 描述 | GitHub链接 |
---|---|---|
json_table | 这个Flutter软件包提供了一个Json Table小部件,用于直接显示json(Map)中的表。还支持列切换 | apgapg/json_table |
flutter_json_widget | 这是一个用于显示Json对象的组件,可以查看Json的内容(相当于Flutter版的JsonViewer的工具) | demdog/flutter_json_widget |
编解码、加密解密(AES、RSA等)有关的库
库名 | 描述 | GitHub链接 |
---|---|---|
ninja | 在Dart的Converter和Codec接口上完善的AES以及RSA加密解密算法的库。 | ninja-dart/ninja |
archive | 为各种存档和压缩格式提供编码器和解码器,如zip,tar,bzip2,gzip和zlib。(不知道移动端能否用得到,文档说服务端和web端可以用。) | brendan-duncan/archive |
系统平台有关的库(设备信息、蓝牙、wifi、文件等)
库名 | 描述 | GitHub链接 |
---|---|---|
分享(官方的库) | ||
share | 用于通过平台共享UI共享内容,使用Android上的ACTION_SEND意图和iOS上的UIActivityViewController | flutter/plugins |
获取本地文件 | ||
path_provider | 用于获取Android和iOS文件系统上的常用位置,例如temp和app数据目录 | flutter/plugins |
读写sp文件 | ||
shared_preferences | 用于读写简单键值对的Flutter插件。包装iOS上的NSUserDefaults和Android上的SharedPreferences | flutter/plugins |
网络状态有关 | ||
connectivity | 用于发现Android和iOS上的网络状态(WiFi和移动/蜂窝)连接 | flutter/plugins |
设备信息 | ||
device_info | 提供有关设备(品牌,型号等)的详细信息,以及应用程序正在运行的Android或iOS版本 | flutter/plugins |
蓝牙 | ||
flutter_blue | 这是跨平台的蓝牙sdk | pauldemarco/flutter_blue |
flutter_ble_lib | 这是一个支持蓝牙连接的flutter库。它里面使用RxAndroidBle和RxBluetoothKit作为本地库 | Polidea/FlutterBleLib |
国际化和本地化(多国语言版本)
库名 | 描述 | GitHub链接 |
---|---|---|
intl | 这个包提供国际化和本地化功能,包括消息翻译、复数和性别、日期/数字格式和解析以及双向文本 | dart-lang/intl |
图片加载和缓存
使用Image.network,或者使用下面这个库:
库名 | 描述 | GitHub链接 |
---|---|---|
cached_network_image | Flutter库来加载和缓存网络图像。也可以与占位符和错误小部件一起使用 | Baseflow/flutter_cached_network_image |
数据存储、缓存有关的库
库名 | 描述 | GitHub链接 |
---|---|---|
sqflite | SQLite的Flutter插件,一个自包含的高可靠性嵌入式SQL数据库引擎 | tekartik/sqflite |
file_cache | 为flutter package项目缓存Json,Buffer,FileCacheImage | pedia/file_cache |
路由(导航切换)
库名 | 描述 | GitHub链接 |
---|---|---|
fluro | 最好用的路由导航框架。功能:简单的路线导航;函数处理程序(映射到函数而不是路径);通配符参数匹配;查询字符串参数解析;内置常用转换;简单的定制转换创建。 | theyakka/fluro |
消息传递通信有关
库名 | 描述 | GitHub链接 |
---|---|---|
flutter_local_notifications | 一个跨平台的显示本地notifications的插件 | MaikuB/flutter_local_notifications |
local_notifications | 这个库能让你在Android和iOS上创建Notifications很简单 | |
url_launcher | 用于在Android和iOS上启动URL。支持网络,电话,短信和电子邮件方案 | flutter/plugins |
firebase_messaging | 一款跨平台的消息传递解决方案,可让您在Android和iOS上可靠地传递消息 | FirebaseExtended/flutterfire |
event_bus | 一个使用Dart流进行解耦应用程序的简单事件总线的库 | marcojakob/dart-event-bus |
视频 & 音频处理
库名 | 描述 | GitHub链接 |
---|---|---|
video_player | Flutter官方的视频库(也可以用于直播),用于在Android和iOS上与其他Flutter窗口小部件一起显示内嵌视频。支持主流直播流。该库底层使用的ExoPlayer播放器。更多关于ExoPlayer播放器支持的视频格式资料请看官方文档ExoPlayer播放器支持的视频格式 | flutter/plugins |
video_launcher | 视频播放器 | |
flute_music_player | 基于Flutter的材料设计音乐播放器与音频插件播放本地音乐文件. | iampawan/Flute-Music-Player |
audioplayer | 一个播放远程或本地音频文件Flutter音频插件 | rxlabz/audioplayer |
audioplayers | 这是rxlabz的audioplayer的一个分支,不同之处在于它支持同时播放多个音频并显示音量控制。 | luanpotter/audioplayer |
Rx系列
异步任务流的操作、(注:Rx是一种思想,各类常用语言都有这个技术,如:RxJava、RxKotlin、RxJs、RxSwift等
库名 | 描述 | GitHub链接 |
---|---|---|
rxdart | RxDart是一种基于ReactiveX的谷歌Dart反应性函数编程库。谷歌Dart自带了一个非常不错的流API;RxDart没有尝试提供这个API的替代方案,而是在它上面添加了一些功能 | ReactiveX/rxdart |
rx_widgets | rx_widgets是一个包含基于流的Flutter Widgets和Widget帮助程序/便利类的程序包,它们有助于反应式编程风格,特别是与RxDart和RxCommands结合使用 | escamoteur/rx_widgets |
rx_command | RxCommand是针对事件处理程序的基于Reactive Extensions(Rx)的抽象。它基于ReactiveUI框架的ReactiveCommand。它大量使用了RxDart包 | fluttercommunity/rx_command |
UI界面展示有关第三方库
弹窗和提示窗有关的库
库名 | 描述 | GitHub链接 |
---|---|---|
font_awesome_flutter | 图标字体的一个库 | fluttercommunity/font_awesome_flutter |
fluttertoast | 用于Android和ios的toast消息库 | PonnamKarthik/FlutterToast |
camera | 谷歌官方的相机库。用于在Android和iOS上获取有关和控制相机的信息。支持预览相机馈送和捕捉图像,可以用来视频录制,新增对拍照的方向的处理 | flutter/plugins |
图标有关的开源库
库名 | 描述 | GitHub链接 |
---|---|---|
cupertino_icons | Cupertino的图标组件库 | flutter/cupertino_icons |
flutter_launcher_icons | 一个命令行工具,简化了更新Flutter应用程序启动图标的任务。 完全灵活,您可以选择要更新启动图标的平台,如果需要,可以选择保留旧的启动图标,以防将来某个时候还原旧图标 | fluttercommunity/flutter_launcher_icons |
富文本
库名 | 描述 | GitHub链接 |
---|---|---|
flutter_html_view | Flutter没有默认的支持来显示html,所以需要三方的包来显示。这个包可以将html呈现给原生的Widget。(目前支持的标签比较少) | PonnamKarthik/FlutterHtmlView |
flutter_html_textview | 将html呈现为一个Widget,在textview中呈现html | https://pub.dev/packages/flutter_html_textview |
MarkDown
库名 | 描述 | GitHub链接 |
---|---|---|
flutter_markdown | 官方的MarkDown库,它支持原始MarkDown格式,但没有内联Html格式。 | flutter/flutter_markdown |
markdown | 用Dart编写的便携式Markdown库。它可以在客户端和服务器上将Markdown解析为HTML。 | dart-lang/markdown |
html2md | 将html转换为Dart中的MarkDown. | jarontai/html2md |
动画有关的库
库名 | 描述 | GitHub链接 |
---|---|---|
flutter_villains | 页面切换动画的一个库,简化动画操作,你只需要管理好UI就可以了 | Norbert515/flutter_villains |
flutter_spinkit | 加载数据时的各种渐变进度动画(比如:菊花进度、圆环进度、旋转进度等) | jogboms/flutter_spinkit |
progress_indicators | 有一些很酷的动画进度指示器可以使用 | wal33d006/progress_indicators |
针对Android和ios平台的UI适配库
库名 | 描述 | GitHub链接 |
---|---|---|
platform_aware | 为自动适应当前平台而包装的Flutter组件,不需要对iOS和Android进行代码更改。所有小部件都依赖于Theme.of(context).platform来确定当前活动平台的平台。你可以使用Flutter Inspector动态地更改平台 | jmgprog/platform_aware |
native_widgets | 为避免重复代码,只编写一次代码就可以支持两个平台并自动根据平台自动使用对应风格组件,Android将使用材料设计,iOS将使用Cupertino风格的小部件 | community/native_widgets |
日历库(主要是用于显示和操作日历)
库名 | 描述 | GitHub链接 |
---|---|---|
flutter_calendar | 适用于Flutter的日历小组件 | apptreesoftware/flutter_calendar |
calendarro | Flutter的日历组件库。 这个库提供了多种自定义组件的方法 | adamstyrc/calendarro |
日期,时间,日期时间,icon,自定义数据的选择器(很全面)
库名 | 描述 | GitHub链接 |
---|---|---|
flutter_picker | 一个日期,时间,日期时间,icon,自定义数据的选择器,可以居中弹窗,也可以在底部弹出。(目前来看是最全面的一个选择器控件。该插件支持ios和android平台,使用的是ios的风格的UI效果) | yangyxd/flutter_picker |
图片选择的库
库名 | 描述 | GitHub链接 |
---|---|---|
image_picker | 适用于iOS和Android的Flutter插件,用于从图像库中拾取图像,并使用相机拍摄新照片。(功能正在完善中) | flutter/plugins |
flutter_multiple_image_picker | 一个新的Flutter插件,用于从图库中选择多个图像。 | mtellect/FlutterMulti-ImagePicker |
联系人选择的库
库名 | 描述 | GitHub链接 |
---|---|---|
contact_picker | 使用此插件,Flutter应用程序可以地址簿中选择联系人,并将联系人信息返回给应用程序,并且不需要用户的任何特殊权限。目前该插件仅支持选择电话号码 | goderbauer/contact_picker |
颜色选择的库
库名 | 描述 | GitHub链接 |
---|---|---|
flutter_color_picker | 一个简单的颜色选择器,类似于安卓的selector的功能,可以在点击控件时,给控件设置选择器效果 | dart-flitter/flutter_color_picker |
material_color_picker | 这个是Flutter的颜色选择器,基于Google Docs颜色选择器。这个用于选择颜色,你想用哪一个颜色,可以弹窗自由选择 | |
material_pickers | 这个是Flutter的颜色选择器,基于Google Docs颜色选择器。这个用于选择颜色,你想用哪一个颜色,可以弹窗自由选择 | |
flutter_colorpicker | 这是一个HSV的颜色选择器 | mchome/flutter_colorpicker |
轮播图有关的库(以及Tab PagerView有关的库)
库名 | 描述 | GitHub链接 |
---|---|---|
flutter_swiper | Flutter最强大的siwiper, 多种布局方式,无限轮播,Android和IOS双端适配 | best-flutter/flutter_swiper jzoom/flutter_swiper |
infinity_page_view | Flutter无限页面视图 | jzoom/infinity_page_view |
carousel | 一个简单的轮播组件(待完善) | gbrvalerio/carousel |
page_transformer | 用于在Flutter中创建漂亮的PageView视差效果的示例项目 | alvinlee001/page-transformer |
导航栏有关的库(库)
库名 | 描述 | GitHub链接 |
---|---|---|
navigation_bar | 一个简易的底部导航栏 | zhangruiyu/navigation_bar |
列表有关的库
库名 | 描述 | GitHub链接 |
---|---|---|
flutter_pagewise | 一次加载一页(或批处理)内容(也称为延迟加载) | AbdulRahmanAlHamali/flutter_pagewise |
lazy_load_scrollview | ScrollView的包装器,可以启用延迟加载,当到达页面底部时将触发回调 | QuirijnGB/lazy-load-scrollview |
状态响应管理
库名 | 描述 | GitHub链接 |
---|---|---|
provider | Provider 状态管理 | rrousselGit/provider |
Scope Model | scope_model 状态管理 | brianegan/scoped_model |
Redux | flutter_redux 状态管理 | brianegan/flutter_redux |
BLoC | flutter_bloc 状态管理 | felangel/bloc/tree/master/packages/flutter_bloc |
RxDart | flutter_rxdart 状态管理 | |
Mobx | flutter_mobx 状态管理 | mobxjs/mobx.dart |