IF 表达式
一个 if 语句包含一个布尔表达式和一条或多条语句。
1 | // 传统用法 |
我们也可以把 IF 表达式的结果赋值给一个变量。
1 | val max = if (a > b) { |
这也说明我也不需要像Java那种有一个三元操作符,因为我们可以使用它来简单实现:
1 | val c = if (condition) a else b |
select * from learn
一个 if 语句包含一个布尔表达式和一条或多条语句。
1 | // 传统用法 |
我们也可以把 IF 表达式的结果赋值给一个变量。
1 | val max = if (a > b) { |
这也说明我也不需要像Java那种有一个三元操作符,因为我们可以使用它来简单实现:
1 | val c = if (condition) a else b |
Android官方为开发者提供了许多丰富的UI控件,Material 组件就是包含了这些控件的一套工具,多数时候使用它可以满足我们日常开发UI的需求,提高效率。目前Android Material 组件已经更新了1.2.0稳定版,赶紧来了解一波。
导入依赖,就可以开始了。
1 | implementation 'com.google.android.material:material:1.2.0' |
我们平时写布局,当遇到按钮需要圆角、或者描边等,通常的方法是新建一个xml文件,在shape标签下写,然后通过android:background或setBackground(drawable)设置。
这本来没什么问题,但是UI设计师会喜欢看起来和别人不一样的效果,也许是为了审(zhuang)美(bi),例如这个页面用4dp的圆角,那个页面用10dp的圆角,要有描边,颜色还不太一样……如果我们每个界面都新建个xml写shape,那么后期项目大了,维护起来就像无底洞……
那么有没有这样一个控件,能在xml直接配置圆角、描边属性,满足平时开发的基本UI需求?当然有,GitHub上第三方的库大把。不过Google官方在SDK28的时候也推出了一个新控件 —— MaterialButton,但是我发现很多人还不知道,今天就来安利下。
先来看一波效果图:
Kotlin 的基本数值类型包括 Byte、Short、Int、Long、Float、Double 等。不同于 Java 的是,字符不属于数值类型,是一个独立的数据类型。
类型 | 位宽度 |
---|---|
Double | 64 |
Float | 32 |
Long | 64 |
Int | 32 |
Short | 16 |
Byte | 8 |
下面是所有类型的字面常量:
Kotlin 同时也支持传统符号表示的浮点数值:
123.5
, 123.5e10
123.5f
你可以使用下划线使数字常量更易读:
1 | val oneMillion = 1_000_000 |
Kotlin 文件以 .kt 为后缀。
代码文件的开头一般为包的声明:
1 | package com.runoob.main |
kotlin源文件不需要相匹配的目录和包,源文件可以放在任何文件目录。
以上例中 test() 的全名是 com.runoob.main.test、Runoob 的全名是 com.runoob.main.Runoob。
如果没有指定包,默认为 default 包。
有多个包会默认导入到每个 Kotlin 文件中:
Kotlin 命令行编译工具下载地址:https://github.com/JetBrains/kotlin/releases/tag/v1.1.2-2,目前最新为 1.1.2-2。
你可以选择一个最新的稳定版下载。
下载完成后,解压到指定目录,然后将 bin 目录添加到系统环境变量。bin 目录包含编译和运行 Kotlin 所需的脚本。
在 OS X、Linux、Cygwin、FreeBSD 和 Solaris 系统上也可以使用更简单的安装方法,命令如下:
1 | $ curl -s https://get.sdkman.io | bash |
在 OS X 下,你可以使用 Homebrew 安装:
1 | $ brew update |
如果你是 MacPorts 用户,可以使用以下命令安装:
1 | $ sudo port install kotlin |
Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。
Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。
在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言。
Kotlin 程序文件以 .kt 结尾,如:hello.kt 、app.kt。
1 | package hello // 可选的包头 |
1 | class Greeter(val name: String) { |
经常性的,我们需要监视页面的切换,用以在合适的时候对控件进行动画暂停或者资源释放。
举个栗子:
相机拍照是我们需要经常用到的功能,但是当我们在切换到相机配置页面时,需要暂停当前相机预览,这种情况下我们就需要监视页面的路由变化情况,又或者用户回到应用桌面,此时也需要对相机进行暂停,返回又恢复相机。
在这里主要关系到下面两个方面的:
先看看RouteAware是如何定义的?
1 | /// An interface for objects that are aware of their current [Route]. |
Flutter Boost 是闲鱼团队开发的一个 Flutter 混合开发框架,项目背景可以看看闲鱼的这篇文章:码上用它开始Flutter混合开发——FlutterBoost。
文章中主要讲述了多引擎存在一些实际问题,所以闲鱼目前采用的混合方案是共享同一个引擎的方案。而 Flutter Boost 的 Feature 如下:
Flutter Boost 采用共享引擎的模式来实现,主要思路是由 Native 容器 Container 通过消息驱动 Flutter 页面容器 Container,从而达到 Native Container 与 Flutter Container 的同步目的。简单的理解,闲鱼想做到把 Flutter 容器做成浏览器的感觉。填写一个页面地址,然后由容器去管理页面的绘制。在 Native 侧我们只需要关心如果初始化容器,然后设置容器对应的页面标志即可。
鉴于网上没有相关的接入文档和使用教程,我这几天也恰好抽空研究了一下,遂整理成文,仅供参考。由于篇幅原因,本文只研究 Android 端的接入与源码,iOS 的部分后续有机会则补充文章来讲解。
注:本文接入的 Flutter Boost 版本为 1.12.13,对应支持的 Flutter SDK 版本为 1.12.13-hotfixes,是目前最新的版本。但 Flutter Boost 版本更新之后,接入方式和使用方式可能会有一些改变,故参考本文时请认准 1.12.13 版本。
FlutterUnit.apk 下载 | FlutterUnit mac版 下载 | Github仓库地址 |
---|---|---|
Android下载链接: http://photo.toly1994.com/release/FlutterUnit.apk
Mac下载链接: http://photo.toly1994.com/release$flutter_unit_mac.zip
当前Flutter 版本
1 | a1@toly ~ % flutter --version |