Flutter核心技术与实战
陈航
美团点评高级技术专家
立即订阅
6150 人已学习
课程目录
已完结 47 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (3讲)
开篇词 | 为什么每一位大前端从业者都应该学习Flutter?
免费
01 | 预习篇 · 从0开始搭建Flutter工程环境
02 | 预习篇 · Dart语言概览
Flutter开发起步 (3讲)
03 | 深入理解跨平台方案的历史发展逻辑
04 | Flutter区别于其他方案的关键技术是什么?
05 | 从标准模板入手,体会Flutter代码是如何运行在原生系统上的
Dart语言基础 (3讲)
06 | 基础语法与类型变量:Dart是如何表示信息的?
07 | 函数、类与运算符:Dart是如何处理信息的?
08 | 综合案例:掌握Dart核心特性
Flutter基础 (13讲)
09 | Widget,构建Flutter界面的基石
10 | Widget中的State到底是什么?
11 | 提到生命周期,我们是在说什么?
12 | 经典控件(一):文本、图片和按钮在Flutter中怎么用?
13 | 经典控件(二):UITableView/ListView在Flutter中是什么?
14 | 经典布局:如何定义子控件在父容器中排版的位置?
15 | 组合与自绘,我该选用何种方式自定义Widget?
16 | 从夜间模式说起,如何定制不同风格的App主题?
17 | 依赖管理(一):图片、配置和字体在Flutter中怎么用?
18 | 依赖管理(二):第三方组件库在Flutter中要如何管理?
19 | 用户交互事件该如何响应?
20 | 关于跨组件传递数据,你只需要记住这三招
21 | 路由与导航,Flutter是这样实现页面切换的
Flutter进阶 (17讲)
22 | 如何构造炫酷的动画效果?
23 | 单线程模型怎么保证UI运行流畅?
24 | HTTP网络编程与JSON解析
25 | 本地存储与数据库的使用和优化
26 | 如何在Dart层兼容Android/iOS平台特定实现?(一)
27 | 如何在Dart层兼容Android/iOS平台特定实现?(二)
28 | 如何在原生应用中混编Flutter工程?
29 | 混合开发,该用何种方案管理导航栈?
30 | 为什么需要做状态管理,怎么做?
31 | 如何实现原生推送能力?
32 | 适配国际化,除了多语言我们还需要注意什么?
33 | 如何适配不同分辨率的手机屏幕?
34 | 如何理解Flutter的编译模式?
35 | Hot Reload是怎么做到的?
36 | 如何通过工具链优化开发调试效率?
37 | 如何检测并优化Flutter App的整体性能表现?
38 | 如何通过自动化测试提高交付质量?
Flutter综合应用 (6讲)
39 | 线上出现问题,该如何做好异常捕获与信息采集?
40 | 衡量Flutter App线上质量,我们需要关注这三个指标
41 | 组件化和平台化,该如何组织合理稳定的Flutter工程结构?
42 | 如何构建高效的Flutter App打包发布环境?
43 | 如何构建自己的Flutter混合开发框架(一)?
44 | 如何构建自己的Flutter混合开发框架(二)?
结束语 (1讲)
结束语 | 勿畏难,勿轻略
特别放送 (1讲)
特别放送 | 温故而知新,与你说说专栏的那些思考题
Flutter核心技术与实战
登录|注册

02 | 预习篇 · Dart语言概览

陈航 2019-07-01
你好,我是陈航。
我们知道,Flutter 开发框架采用的开发语言是 Dart,所以要用好这个框架,我们必须要搞清楚 Dart 语言。
关于新技术的学习,一直以来我都非常认同一个观点:千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样才能从高维度理解问题。所以,为了帮助你更高效地掌握 Dart,以最快的速度具备开发一款 Flutter 应用的能力,今天这篇文章,我会先从 Flutter 开发的角度,和你介绍 Dart 语言出现的历史背景、特性以及未来。
然后,我会在本专栏的“Dart 基础”模块,与你详细分享它的特性、基础语法、类型变量、函数等知识,并和你分享一个使用 Dart 的综合案例,帮你学懂、学会这门语言。
如果你已经对 Dart 有一个初步印象了,也可以跳过这篇预习文章,直接学习后面的内容。

Dart 是什么?

2011 年 10 月,在丹麦召开的 GOTO 大会上,Google 发布了一种新的编程语言 Dart。如同 Kotlin 和 Swift 的出现,分别是为了解决 Java 和 Objective-C 在编写应用程序的一些实际问题一样,Dart 的诞生正是要解决 JavaScript 存在的、在语言本质上无法改进的缺陷。
那么,JavaScript 到底有哪些问题和缺陷呢?JavaScript 之父布兰登 · 艾克(Brendan Eich)曾在一次采访中说,JavaScript“几天就设计出来了”。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Flutter核心技术与实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(33)

  • reven404
    入门简单,精通难. 如何掌握一门语言的精髓呢?

    作者回复: 首先明确,我们学习一门编程语言并不是为了成为语言专家,而是为了解决实际问题。我认为通过1-2天的学习,在了解一门语言是如何表达信息和处理信息之后,语言的基本套路就搞懂了,然后可以根据实际问题上手去实践,找相应成熟的框架和库,边做边学,加深理解。

    2019-07-01
    21
  • 创建昵称
    flutter现在计量单位是什么dp还是px,屏幕适配怎么解决!

    作者回复: 通常是dp

    2019-07-02
    2
    7
  • 不拘小节
    大神请教一个问题,一个ListView,里面套了一个Row,Row有两个Container,第一个Container设置宽高,第二个设置高度,想第二个宽度自适应撑满ListView,有什么方案吗

    作者回复: 试试IntrinsicHeight,这个组件会根据实际情况把子widget的高度调整它本身实际的高度。
    IntrinsicHeight(
              child: Row(children: [
                Container(width: 100,color: Colors.yellow),
                Expanded(flex:1,child: Container(height:300, color: Colors.amber)),
              ]),
            )
     );

    2019-07-03
    4
  • 海斌
    1. 控件布局,写法和可读性给我感觉还是不怎么习惯。
    2. 没有可视化的布局工具,手写布局给人感觉还是比较痛苦。
    3. 不同android设备的兼容性,这个也是困扰我的问题之一,在oppo,vivo上还好好的,在华为手机上就显示不出来。

    作者回复: 这种情况一般是布局约束写的有问题,建议多试试几种不同的分辨率,也关注下运行时异常

    2019-07-02
    3
  • Geek_a9f943
    目前网上关于dart资料都还比较少,请问有关于dart学习的书籍推荐嘛?

    作者回复: 首先明确,我们学习一门编程语言并不是为了成为语言专家,而是为了解决实际问题。语言的知识体系也有所谓的28原则,我认为通过1-2天的学习,在了解一门语言是如何表达信息和处理信息之后,语言的基本套路就搞懂了,然后可以根据实际问题上手去实践。Dart的精髓在于其简洁而强大的语法特性,在解决问题时顺便去读一些Flutter的源码,了解Dart是如何从语言特性上支持这些功能 边做边学,加深理解就可以了。

    所以我不太建议在已经有其他编程语言基础的情况下再去系统的学习Dart,如果对Dart确实很感兴趣,可以参考官方的教程:https://dart.dev/guides/language

    2019-07-02
    3
  • 宋世通
    函数式编程可以多介绍一下吗,fish redux就是函数式设计,代码读起来很困难,毕竟不是Java的面向对象

    作者回复: 会介绍一些,但不会专门讲。状态管理那节会主要讲Provider

    2019-07-02
    1
    3
  • yasuoyuhao
    有了原生開發的經驗與概念,使用 flutter 真是有如神助,概念都是互通的。
    2019-07-02
    3
  • Aron
    原生与flutter混合开发会介绍吗?毕竟大多数项目都是原生的。

    作者回复: 会的

    2019-07-03
    2
  • 公众号:业余草
    Flutter 是不是代表着未来,这是一个后起之秀啊。看的我都想写一些入门教程了!

    作者回复: 加油

    2019-07-02
    2
  • SHERRAN要好好学习
    请问网页开发者入手学习flutter有阻碍吗?我是学生,表示context啥的都不太理解。😢

    作者回复: 懂的基本的前端概念(视图、组件、状态、生命周期、路由)就可以上手了

    2019-07-02
    2
  • 舒大飞
    想请教下,看了dart的单线程执行异步任务,像future这种执行网络请求的话,直接把任务放进event queue同步执行,那么then的任务如何处理,等网络请求返回再放进event queue?整个过程是怎样的,谢谢

    作者回复: 网络调用的执行是由操作系统提供的另外的底层线程做的,和Dart就没关系了。event queue里只会放一个网络调用的最终执行结果(成功或失败)及响应执行结果的处理回调。

    2019-09-22
    1
  • code-artist
    dart没有多线程,通过不同的isolate共享消息队列,这类似于多进程模型。这样不利于利用手机的多核特性吧

    作者回复: 我们的App大多数场景下都是静默状态,单线程对大多数场景已经足够用了:
    1.I/O、网络请求操作系统提供了异步的API
    2.CPU密集型的操作用Isolate即可

    可以看下我之前在GMTC 2019的分享:Event Loop、Future与Isolate - 单线程模型下的Dart异步编程模式

    2019-07-09
    1
    1
  • 朱雯
    这一篇其实我没怎么读懂,说说我的问题吧。
    关于单线程问题:一般来说,多线程用于解决并发问题,Isolate这种不共享内存却类似与线程的东西我怎么看都像进程,多线程对比多线程的优势在于它可以节约资源,那么isolate是否是没有多线程优点呢,如果是为什么要放弃多线程的优点,只是线程安全问题吗。2:一个函数必然执行完成的设计,假如在这个语言种加入了io操作,后面的程序要跑,岂不是要等非常长的时间,这不是又要回到多线程上吗

    作者回复: 我们需要建立起这么一个概念,单线程也是可以异步执行的:
    1.App绝大多数时间都在等待(等待用户交互、等待网络请求返回、等待I/O结果)
    2.等待行为并不是阻塞的,以I/O和网络访问为例,操作系统均提供了非阻塞型API,事件回调告知状态

    如果对这一块内容不清楚的话,可以看下之前我在GMTC 2019上的分享:《Event Loop、Future与Isolate - 单线程模型下的Dart异步编程模式》
    后续分享我也会专门介绍Dart的异步和并发。

    2019-07-05
    1
  • Spring
    您好,对于H5+原生以及RN这种框架来说通过webview他们的优势是可以热更新,大量的H5页面都可以动态改变。然而像Flutter这种框架一套代码打包成Android和IOS,但是却失去了热更新这个大的优点。但是往往热更新是很多公司的诉求,我想知道大佬怎么看?

    作者回复: Flutter确实不支持动态化,而且目前看从官方层面短期内也不会支持的。理由是发布期AOT是Flutter代码执行效率高的保障,不可能改回JIT;另外苹果也不允许除了JSCore之外还有别的VM可以动态执行逻辑。
    这个事情有三个解法:
    1.Flutter可以内嵌webview支持原有的H5
    2.Flutter提高了迭代效率节省了研发资源,对于一些需要快速上线的功能,用Flutter开发完再发一个新版本就行了
    3.业界已经有团队使用JSCore实现动态布局了,预计下半年会有一些较为成熟的方案出现

    2019-07-04
    1
  • YOUNG
    RN最大的优势就是热更新,Flutter会有支持的可能吗?

    作者回复: Flutter高性能的其中一个重要因素就是因为Dart在发布期是AOT,所以Google是不可能改成动态编译的,另外苹果也不允许除了JSCore之外的其他动态编译/解释执行环境。
    不过如果你的诉求是希望能够实现动态界面,目前业界已经有在上层封装DSL实现Flutter动态布局的实践了,可以看看GMTC大会上美团和微信的分享

    2019-07-02
    1
  • zr
    快点更新哦
    2019-07-02
    1
  • MingQ
    我们公司之前也尝试过flutter,有幸参与,其实单纯上手开发的话,还是很快的。基本两三天就可以写代码了,但是掌握高阶语法特性还是需要花很多时间,而且得有项目落地。
    2019-11-11
  • 这得从我捡到一个鼠标垫开始说起
    为什么说dart写布局可读性好 ,一层层的嵌套,怎么看都感觉阅读困难呀

    作者回复: Widget包括了视图、布局、交互、动画等概念,嵌套组装起来会比较方便,如果一开始使用不太适应,可以借助于IDE提供的Editor UI Guides插件辅助阅读/编写。

    2019-08-14
  • sid
    Dart VM 的内存分配策略比较简单,创建对象时只需要在堆...

    极客时间版权所有: https://time.geekbang.org/column/article/104071

    对这句话有所疑问,dart是如何处理堆碎片以及一次分配超大内存的问题呢?

    作者回复: 1.GC会在应用的空闲时间进行内存压缩,从而较少内存碎片来优化内存。
    2.任何时候只用一半,如果一半要满了,活动的对象将会被复制到另一半空间中,一半就会全部清空。

    2019-08-12
  • Element
    很认同作者这种先统揽大局介绍语言的方法, 很多时候都是钻进某个api死学, 不会想到抬起头从高处看看更容易得要领.
    2019-08-08
收起评论
33
返回
顶部