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核心技术与实战
登录|注册

06 | 基础语法与类型变量:Dart是如何表示信息的?

陈航 2019-07-11
你好,我是陈航。
在专栏的第 2 篇预习文章“Dart 语言概览”中,我们简单地认识了 Dart 这门优秀的程序语言。那么,Dart 与其他语言究竟有什么不同呢?在已有其他编程语言经验的基础上,我又如何快速上手呢?
今天,我们就从编程语言中最重要的组成部分,也就是基础语法与类型变量出发,一起来学习 Dart 吧。

Dart 初体验

为了简单地体验一下 Dart,我们打开浏览器,直接在repl.it 新建一个 main.dart 文件就可以了(当然,你也可以在电脑安装 Dart SDK,体验最新的语法)。
下面是一个基本的 hello world 示例,我声明了一个带 int 参数的函数,并通过字符串内嵌表达式的方式把这个参数打印出来:
printInteger(int a) {
print('Hello world, this is $a.');
}
main() {
var number = 2019;
printInteger(number);
}
然后,在编辑器中点击“run”按钮,命令行就会输出:
Hello world, this is 2019.
和绝大多数编译型语言一样,Dart 要求以 main 函数作为执行的入口。
在知道了如何简单地运行 Dart 代码后,我们再来看一下 Dart 的基本变量类型。

Dart 的变量与类型

在 Dart 中,我们可以用 var 或者具体的类型来声明一个变量。当使用 var 定义变量时,表示类型是交由编译器推断决定的,当然你也可以用静态类型去定义变量,更清楚地跟编译器表达你的意图,这样编辑器和编译器就能使用这些静态类型,向你提供代码补全或编译警告的提示了。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Flutter核心技术与实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(16)

  • 加温后的啤酒
    老师,能详细解释下final和const吗。你说“const,表示变量在编译期间即能确定的值; final 则可以在运行时确定值”。
    那是否能理解为:在编译期间能确定的值 用const或者用final修饰都可以,但是在运行时确定的值,只能用final修饰??

    作者回复: 在定义const常量时,你必须直接赋一个字面量,而不能是一个变量或者公式;
    在定义final常量时,如何赋值就无所谓了,但赋值后就不能再改了。

    2019-07-11
    19
  • TerryGoForIt
    思考题:
    Dart 是支持泛型的,所以可以使用形如 List<dynamic> 和 Map<String, dynamic> 为集合添加不同类型的元素,遍历时判断类型用 is 关键字。

    作者回复: 如果类型是可枚举的,这样做是可以的。但不建议定义容器类型时用dynamic哈,最好还是明确下类型,比如放double和int的可以用num

    2019-07-11
    1
    16
  • 七分呗轻唱
    runtimeType 判断

    作者回复: 可以的。
    如果类型是可枚举的,用"if(v is num)" 或 "if(v is String)"也可以

    2019-07-11
    3
  • davidzhou
    所有皆为对象,就可以通过反射机制获取对象的类型,不过,list和map不做类型约束的话,在读取里面数据会有很多坑,代码也不够健壮

    作者回复: 棒棒哒。纠正一个小问题:这里不是反射,是运行时类型。另外Flutter是不支持Dart 的反射的哈。

    2019-07-14
    2
  • 于留月
    可以使用List<dynamic> 和 Map<dynamic>支持多种类型内部元素,遍历集合时,可以根据泛型确认数据类型

    作者回复: 可以的。不过不太建议用dynamic,如果是int和double,用num即可

    2019-07-11
    2
  • Phony Lou
    抛砖引玉哈,直接拿各个item的runtimeType属性,简单代码如下

    main() {
      var arr = [1,2,'s'];
      arr.forEach(
        (v) => print('The value is ${v}, and the type is ${v.runtimeType}')
      );
    }

    作者回复: 可以的。
    如果类型是可枚举的,用"if(v is num)" 或 "if(v is String)"也可以

    2019-07-11
    1
    1
  • Young
    类,方法参数,返回值都可以指定泛型,判断单个元素的类型可以使用is

    作者回复: 可以的

    2019-07-11
    1
  • moran
    老师好,const和final可不可以理解为赋值后,值就不可更改?

    作者回复: final可以,const是声明后

    2019-11-12
  • sixgod
    用dynamic类型和object有什么区别吗

    作者回复: dynamic可以当任意类型使用

    2019-10-12
  • 陶先森来了
    我用Android Studio安装了Dart的安装包,版本是2.2.1的,但是我的项目是2.2.2以上的,请问如何升级Dart呢?还有就是能否单独安装Dart SDK?

    作者回复: 通常我们并不需要单独安装Dart SDK,flutter会自带(bin/cache/dart-sdk目录),并且会锁死flutter对应的dart版本。如果你想试用最新的功能,可以把flutter切到dev channel,dev channel没有锁死Dart版本,你可以自行替换

    2019-09-02
  • 晓冰
    对于Map和List 我在写swift时也是需要指定确定类型的,同一个字典或者数组类型一般都要一样,如果不一样处理起来麻烦,自己的程序就不要给自己挖坑了 哈哈。 只有在一种情况下我才会使用Any 就是提交服务器数据的时候,由于配置的数据类型不可能完全一样。

    作者回复: 赞

    2019-08-29
  • Eagle~
    文中的“实际上,你打开官方文档或查看源码,就会发现这些常见的运算符也是继承自 num:”不是很理解,为什么运算符能继承呢?

    作者回复: 参考了C++的实现

    2019-08-16
  • lf
    老师,flutter源码中构造函数都是用const,为什么呢

    作者回复: 常量构造函数,初始化完就不让改了

    2019-08-01
  • 春阳
    List 指定 length 后,默认数值都为null ,这是由于未初始化的变量都是 null
    特性,并且这时候可以在安全下标内进行赋值,但是不指定 length 的 List 则无法指定下标赋值,因为超出了下标边界。
    2019-07-17
  • 薛敬飞
    帮忙解释一下评论区中Dynamic?为啥不建议用这个?

    作者回复: 为了类型安全呀

    2019-07-13
  • 呼呼
    升级到最新的flutter 版本,打包生成ipa,app打开是空白的,请教一下,这个是什么原因呢?

    作者回复: debug环境正常吗

    2019-07-12
    1
收起评论
16
返回
顶部