一应俱全!Flutter优质博文集锦

Flutter是谷歌移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。

开源地址:https://github.com/flutter/flutter

官网:https://flutter.dev/

咸鱼团队的Flutter技术应用:https://www.yuque.com/xytech/flutter/

Flutter入门:https://blog.csdn.net/kmyhy/article/details/80922736

Flutter控件商城:https://pub.dev/flutter

与此同时,CSDN博客上也汇集了一大批优质的Flutter教程、使用体验、问题描述及解决思路分享方面的系列博文,本文从中精心挑选一些优质的博文,以飨读者!

1、基础教程(入门、安装)

1、Flutter 安装和初体验

关于Flutter的安装,参考官方文档中的步骤即可。本文以macOS为例,介绍Flutter在macOS上的安装细节。

2、Flutter 基础知识点总结

在学习Flutter之前,让我们先来认识下什么是Flutter跨平台。Flutter是谷歌开源的一款移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。同时, Flutter可以与现有的代码一起工作,在全世界,Flutter正在被越来越多的开发者和组织使用。

3、Flutter从入门到实战
从环境搭建、安装到案例体验,一套流程走下来看看Flutter怎么学。

4、Flutter项目目录结构及demo代码详解
本篇博客我们就以默认生成的项目为准,着重的介绍一下Flutter项目的目录结构及代码详解。

5、Flutter原理与美团的实践

Flutter本身的特性适合追求iOS和Android跨平台的一致体验,追求高性能的UI交互效果的场景,不适合追求动态化部署的场景。Flutter在Android上已经可以实现动态化部署,但是由于Apple的限制,在iOS上实现动态化部署非常困难,Flutter团队也正在和Apple积极沟通。

美团外卖大前端团队将来也会继续在更多场景下使用Flutter实现,并且将实践过程中发现和修复的问题积极反馈到开源社区,帮助Flutter更好地发展。如果你也对Flutter感兴趣,欢迎加入。

6、Flutter入门进阶之旅:Hello Flutter
好像几乎我们学习或者掌握任何一门编程语言都是Hello word开始的,本篇博文做为Flutter入门进阶的第一篇分享,我们也从最简单的Hello world开始,至于Flutter开发环境的配置,跟关于Dart语言的介绍,不是该专栏要讲解的内容,我就不详细做介绍了,读者可自行google或者百度了解一下。

7、Flutter入门进阶之旅:初识Flutter

Flutter 是一个跨平台(Android 和 iOS)的移动开发框架,使用的是 Dart 语言。

Flutter 的目标是用来创建高性能、高稳定性、高帧率、低延迟的 Android 和 iOS 应用。并且开发出来的应用在不同的平台用起来跟原生应用具有一样的体验。不同的平台的原生体验应该得到保留,让该应用看起来同整个系统更加协调。不同平台的滚动操作、字体、图标 等特殊的特性 应该和该平台上的其他应用保持一致,让用户感觉就像操作原生应用一样。

8、Flutter开发之官网的第一个例子实现

Flutter开发我的收藏列表

  • 准备数据:列表数据使用数组存储,选中的数据可以使用Set存储(因为set可以自动去重)。
  • 界面列表:使用ListView
  • 界面跳转:可以使用Navigator

2、Widget

1、Flutter基础Widget之Text(文本控件)

Text Widget用于显示简单样式文本,它包含一些控制文本显示样式的一些属性,类似于Android中的TextView。

2、Flutter基础Widget之按钮(RaisedButton、FlatButton、OutlineButton,IconButton)

Flutter中给我们预先定义好了一些按钮控件给我们用,常用的按钮如下:

  • RaisedButton :凸起的按钮,其实就是Android中的Material Design风格的Button ,继承自MaterialButton
  • FlatButton :扁平化的按钮,继承自MaterialButton
  • OutlineButton :带边框的按钮,继承自MaterialButton
  • IconButton :图标按钮,继承自StatelessWidget

我们先来看看MaterialButton中的属性,可以看到能设置的属性还是很多的。

3、Flutter Widget之图片(Image)和图标(Icon)

在Flutter中,我们可以使用Image控件来显示图片,一般来讲我们的图片资源都来源于网络或者本地图片,Flutter中的Image也是类似。

4、Flutter Widget之Container、AspectRatio、FittedBox、Offstage

前面的博客中我们介绍了一些常用的Flutter控件例如 文本控件,按钮控件,图片控件等并且单独的用了用、
但是,在开发过程中,我们的这些基本控件一般都是要放到布局中按照一定的顺序及距离进行排列以达到我们想要的效果。
类似于Android中的LinearLayout、RelativeLayout、FrameLayout等
所以,本期我们来看看布局类的控件。

在Flutter中,布局类控件大致分为以下两种

  1. 只有一个子控件布局控件(child)
  2. 可以有多个子控件的布局控件(children)

5、Flutter Widget之 Row、Column、Stack、IndexedStack等

Flutter中包含多个子控件的布局类控件有很多,具体可以查看这个官方文档,本文会结合代码对每个控件进行详细解析。

6、Flutter网格控件GridView

网格布局在移动开发中也经常使用,Flutter 给我们提供了GridView供我们使用,本文我们来看看GridView的使用方法。

7、Flutter TabBar、TabBarView的使用

TabBar和TabBarView到底是什么关系呢,简而言之,TabBar就是导航栏,TabBarView就是导航栏当前所对应的内容区。

说实话,这个效果实现起来并没有我想象中的那么简单,demo跟实际开发差的还是蛮大的,一方面是学习成本,要查看源码,另一方面就是页面的布局,层级嵌套的太深了。。

8、Flutter banner轮播图之Swiper

轮播图简直是不要太常见的功能了。今天来看一下在Flutter中是怎么实现的。

9、Flutter入门进阶之旅:Scaffold 脚手架

在本栏的前面章节的学习中,我们基本上把Flutter中所有的常用布局、组件包括多页面跳转路由都介绍过了,细心的读者可能会发现在前面的课程中我们每次新建一个Flutter Page的时候都会在根布局的build方法中直接return一个Scaffold然后,再通过配置Scaffold中的相关属性来快速的渲染页面布局:没错Scaffold的出现就是为了帮助我们实现基本的 Material Design 布局结构,简化我们页面开发工作,我们可以形象的把Scaffold理解为页面搭建的脚手架。

10、Flutter入门进阶之旅:ListView下拉刷新&上拉加载更多

现实开发中长列表布局几乎是所有APP的标配,几乎你所使用的任何一款app都能找到长列表的身影,而长列表中必不可少的操作肯定是下拉刷新、上拉加载更多。在原生Android中我们一般使用RecyclerView配合support.v4包下面的SwipeRefreshLayout来完成下拉刷新动作,通过给RecyclerView绑定RecyclerView.OnScrollListener()拖动监听事件来判断列表的滑动状态来决定是否进行加载更多的操作,有了原生Android开发的经验,我们完全可以把这个思路同样应用在Flutter中的长列表操作上。下面我们一起来看下Flutter中的下拉刷新跟上拉加载更多吧。

11、Flutter入门进阶之旅:ListView&GridView

在之前讲Layout Widget的文章中,我们掌握了基于不同的场景适当的选择不同的Widget来完成我们的布局要求,但是关于长列表的数据展示我们并没有做展开介绍,而长列表的身影几乎出现在日常生活中的任意一款APP中,鉴于它的重要性,所以我想单独作为一个章节来讲解长列表Widget—ListView&GirdView。

12、Flutter入门进阶之旅:Flutter 路由

跟Web页或者原生APP一样,我们在使用Flutter 开发APP时也会涉及到多页面之间的跳转、参数传递、参数回传等业务,Flutter路由能满足上述我们提到的所有业务类型,此外我们也可以结合Flutter动画给路由跳页时添加个性化的跳页动画操作,我会在后续Flutter动画章节中具体讲解。通过本节专题,读者不仅仅可以自己动手做一些简单的UI,还能利用Fluttter 路由结合之前的课程分享做一些简单的多页面Flutter App。

13、Flutter入门进阶之旅:Flutter 数据存储

相信做过原生Android开发的读者对数据存储并不陌生,在原生Android中我们会把一些轻量级的数据(如用户信息、APP配置信息等)写入SharedPreferences做存储,把需要长期存储的数据写入本地文件或者Sqlite3,当然Flutter中也同样用一套完整的本地数据存储体系,下面我们就一直来了解下上述提到的这3中本地存储方式在Flutter中使用。

14、Flutter入门进阶之旅:Index&Chose

今天我们来一块了解一下各种Index跟Chose控件,像CircularProgressIndicator圆环进度条,
LinearProgressIndicator水平进度条,Slider滑杆,还有Checkbox,Switch等,下面我们就一块来进入今天的分享。

15、Flutter入门进阶之旅:Dialog&Toast

做原生开发的时候,我们都知道要想让一个app做的活灵活现,与用户交互时有更棒的体验,各种样式美轮美奂的对话框跟提示是必不可少的,Flutter在设计对话框的时候充分考虑到了在UI上的体验,帮助我们设计了一整套的基于material design风格的对话框以及轻量级的用于提示的widget。

16、Flutter入门进阶之旅:StatelessWidget & StatefullWidget

在前面的学习中我们接触到了flutter中各种基本组件的使用,也学习了一些常用的布局排版方式,掌握了根据不同的UI widget合理的选用不同的Layout方式进行布局,但是我们好像在前面的学习中所有的UI都是静态的,没有任何交互式的体验,换句话说我们在之前所掌握的flutter知识都是比较死板的静态UI页,缺少了那么一点灵动性,那今天这篇文章就算是一个过渡,今天我会带领大家简单认识下flutter中的动态页。

17、Flutter入门进阶之旅:Button Widget

上一篇博文中我们学习了GestureDetector,了解到借助GestureDetector可以赋予某些本身不具备点击回调的widget点击回调能力,完成跟用户的一些简单手势交互并作出相应的逻辑处理,我们还提到了有些widget像RaisedButton和FloatingActionButton控件本身就有onPressed回调,当用户点击控件时触发回调。本篇博客中我们就把上篇博客中提及到的各种Button归类统一说明一下。

18、Flutter入门进阶之旅:GestureDetector

GestureDetector在Flutter中负责处理跟用户的简单手势交互,GestureDetector控件没有图像展示,只是检测用户输入的手势,并作出相应的处理,包括点击、拖动和缩放。许多控件使用GestureDetector为其他控件提供回调,比如IconButton、RaisedButton和FloatingActionButton控件有onPressed回调,当用户点击控件时触发回调,当用户点击控件时触发回调。

19、Flutter入门进阶之旅:Layout Widget

在Flutter中也给我们提供了各种不同应用场景的layout,我们可以根据UI上排版的需要来选用不同的layout去完成我们对UI的绘制,在这些layout中,有些layout的借鉴了前端的盒子布局模型,有些完全跟原生android思想一致,所以对于我们来说学习起来并没有那么抽象,下面我列出几个常用的layout,并且举例跟大家一块看看Flutter到底是怎么完成Widget的布局的。

20、Flutter入门进阶之旅:Image Widget

今天我们来学习一下另外一个Widget—Image,顾名思义Image是用于展示图片的控件,他跟Text一样,同属于StatelessWidget,关于StatelessWidget跟StatefullWidget我会在稍后的文章中具体讲解,在此读者可暂且忽略这一知识点,在做原生Android开发时,我们可以给ImageView指定不同的图片来源,可以是来源网络、drawable、bitmap、文件等,在Flutter中同样支持加载不同来源的图片,只不过Flutter加载不同资源的图片跟原生Android稍微有点差别,下面我们一起进入本期的主题。

21、Flutter入门进阶之旅:Text Widgets

Text Widgets是Flutter中一个十分常用的一个Widget,类似于Android平台下的TextView,几乎在每个App的UI中都会或多或少的出现它的身影,让我们去一睹Text的风采吧!

22、Flutter入门进阶之旅:文本输入Widget TextField

上一篇文章中我们一起学习了什么是Text跟如何给Text设置字体样式以及Text Widget的一些常用属性Flutter入门进阶之旅: Text Widgets,通过对Text的学习我们了解到Text是用于显示文本的,如果对显示的文本有一些特殊的要求,比如字体样式,文字颜色我们可以通过TextStyle去给Text指定style来做个性化定制,这一点跟原生Android的TextView非常类似,有了文字显示就肯定会有文字输入,今天我们就一起来学习一下Flutter中的文字输入Widget TextField。、

23、Flutter 网络请求封装之Dio(Cookie管理、添加拦截器、下载文件、异常处理、取消请求等)

dio是一个强大的Dart Http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时、自定义适配器等…

24、Flutter ExpansionPanelList使用讲解

ExpansionPanelList是一个item可以打开合并的list控件。在ExpansionPanel中,body 是重点,如果直接是ListView,会不显示,也不报错,以致于这个地方搞了好一会,然后用Container包起来才显示,但是固定高度也是一个限制。

25、Flutter 流式布局之Wrap

一个可以横向或纵向显示的流式布局的widget,使用场景:一行显示不下需要换行的时候。

26、Flutter Chip详解

使用场景:事物的属性或标签,历史搜索记录等。

27、Flutter开发之导航与路由管理

路由(Route),在移动开发中通常用来表示移动应用的页面(Page),具体来说,Route在Android中通常指一个Activity,在iOS中指一个ViewController。

Navigator是一个路由管理的widget,它通过一个栈来管理一个路由widget集合。通常当前屏幕显示的页面就是栈顶的路由,Navigator提供了一系列方法来管理路由栈。

28、Flutter开发之BottomSheetDialog选择组件

BottomSheetDialog、ModalBottomSheetDialog同样也是需要借助showDialog唤起,就跟它名字一样,这两种dialog是从屏幕下方向上弹出的,不同的是BottomSheetDialog默认会铺满全屏显示,而ModalBottomSheetDialog半屏显示,二者都支持随用户手指拖动上下移动。

29、Flutter开发之SnackBar提示组件

SnackBar无论是用法还是功能使用几乎都跟原生Android一样 ,唯一有一点需要留意的是在Scaffold.of(context).showSnackBar()中传递的context必须不能是Scaffold下面的Context。

30、Flutter开发之Tooltip提示组件

Tooltip支持用户传入任意一个child作为显示的Widget,并且在用户长按Widget时,会在上方或者下方出现类似Toast的提示,隔一段时间自动消失,由于使用起来比较简单,很好的用户提示体验。

3、其它

1、Flutter 通过API获取网络数据并解析

直接进入正题,首先我进行网络请求是通过一个工具类,大家可以直接使用。

2、Flutter开发使用PlatformView显示iOS原生View

我们在使用Flutter开发跨平台开发移动APP时,会遇到Flutter的组件满足不了原生的效果,部分控件不如原生控件好用时,就想在Flutter 的Widget 中使用iOS原生View来组合实现良好的效果。PlatformView是 Flutter 官方提供的一个可以嵌入 Android 和 iOS 平台原生 view 的小部件。

3、Flutter开发iOS老项目集成Flutter流程

这一篇讲一下iOS老项目集成Flutter流程。并且实现

  • iOS 页面跳转到 Flutter 页面
  • Flutter 页面跳转到 iOS 页面

4、Flutter开发Flutter与原生OC、Java的交互通信-1

今天讲的:Flutter与原生OC、Java的交互通信 也是一种桥接的方式实现的。类似WebViewJavascriptBridge、JavaScriptCore的方式。Flutter 提供了 platform channels ,来和管理你的 Flutter view 的 ViewController 通信和交互数据。平台管道本质上是一个异步通信机制,桥接了 Dart 代码和宿主 ViewController,以及它运行于的 iOS 框架。你可以用平台管道来执行一个原生的函数,或者是从设备的传感器中获取数据。

5、Flutter开发Flutter与原生OC、Java的交互通信-2

我们上一篇主要讲了Flutter与原生OC、Java的交互通信的机制:平台通道
只实现了Flutter 主动调用OC、Java的方向的通信。并没有实现OC、Java端主动调用Flutter的实现。这里补充一下。

6、

4、问题/解决方案总结

1、Waiting for another flutter command to release the startup lock…解决办法

2、Flutter提示Unable to list devices或Android license status unknown解决办法

3、Flutter报setState() or markNeedsBuild() called during build.错误解决办法

4、Flutter提示Unable to list devices或Android license status unknown解决办法

5、Waiting for another flutter command to release the startup lock…解决办法

6、Flutter BottomNavigationBar不显示(显示白色)?

7、Flutter Unable to locate Android SDK

8、Horizontal viewport was given unbounded height.width.

9、记一次升级Flutter SDK失败的光辉历史

如果您发现其它优质的Flutter博文,欢迎把链接分享到这篇文章的评论处,作者会统一整理收录进来!

发布了155 篇原创文章 · 获赞 961 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/mengyidan/article/details/98499344
今日推荐