在 Google I/O ’17 上,Google 向我们介绍了 Flutter —— 一款新的用于创建移动应用的开源库。

正如你所想的那样,Flutter 是能够帮助创建拥有漂亮 UI 界面的跨平台移动应用解决方案。Flutter 的界面设计与 web 应用类似,因此,你能够从 Flutter 上找到像使用 HTML/CSS 那样熟悉的感觉。

Google 表示:

Flutter 将会帮你更容易,更快速的开发出界面美观的移动应用。

听起来很美好,但是首先要说的是,我对其他跨平台解决方案,诸如  Xamarin,PhoneGap,Ionic,React Native 等并不是很认可。 大家都知道,这些解决方案互有利弊,很难选择。虽然我并不确定 Flutter 是否会与它们有所不同,但是我很期待。

为什么要用 Flutter ?

你可能会好奇,然后问自己一个问题:

Flutter 有什么创新之处?它是如何工作的?与 React Native 有什么不同之处?

我不会在这里讨论技术问题,因为其他人做得更好。如果你对 Flutter 的工作细节感兴趣,我建议你读读这篇文章:Flutter 的革命性创新是什么?你也可以在“ The Magic of Flutter ”演示中查看 Flutter 概念的总结。

简要来说,Flutter 是一个移动 SDK ,允许我们创建混合移动应用(这样你就可以编写一份代码,在 Android 和 iOS 都可以运行这个应用程序)。你在 Dart 中编写代码,这是一种由谷歌开发的语言,如果你以前用过 Java ,那看它会觉得非常熟悉。你不再需要用 XML 文件构建布局树,而是像这样:

import 'package:flutter/material.dart';

class HelloFlutter extends StatelessWidget {  @override
  Widget build(BuildContext context) {    return new MaterialApp(
      title: "HelloFlutter",
      home: new Scaffold(
        appBar: new AppBar(
          title: new Text("HelloFlutter"),
        ),
        body: new Container(
          child: new RaisedButton(onPressed: _handleOnPressed),
        ),
      ),
    );
  }
}

正如你所看到的,布局是由嵌套的组件(小部件)构建的。核心部件是 MaterialApp(这是整个应用程序),然后我们有了 Scaffold (这是主要的布局结构),然后在里面我们有 AppBar(像 Android 工具栏)和一些容器作为主体。在内部,我们将放置布局小部件 —— 文本、按钮等。

#1 热重载

好的,现在就开始吧!

我们从一个基本的应用开始。我们有三个按钮,它们中的每一个都能改变文本的颜色:

现在,我们将会使用其中一个最酷的特性——热重载。它能让你的网页做到立即重建。看看效果:

回顾下我们具体做了什么?我们变更了一些代码(在按钮上的文本),当我们点击“热重载”(在 IntelliJ IDE 的顶部)并且我们能在短时间内就看到结果。是不是很酷炫?

热重载不仅仅快还智能——如果你有一些数据已经被显示(比如说,这个例子中的文本颜色),你可以在应用运行期间使用热重载改变 UI :内容还是一样的。

#2 全套小部件 (Material Design)

Flutter 的另一个优点是,我们有一个非常丰富的内置 UI 组件的目录。里面有两套小部件—— Material Design(针对 Android )和 Cupertino(适用于 iOS )。你可以选择并轻松实现你想要的任何东西。比如说如果想要创建一个新的浮动动作按钮,则可以像下面这样:

更棒的是,你可以在各个平台上实现任意的小部件。而且如果你已经实现了一些 Material Design 或 Cupertino 小部件,那么它在每个 Android 和 iOS 设备上都是一样的。你不需要担心在众多设备上看起来会有什么不同。

#3 所有东西都是一个小部件

正如你在之前的 gif 中所看到的,创建 UI 非常简单。这得感谢 Flutter 的核心原则 —— 所有东西都是一个小部件。你的 app 类是一个小部件(MaterialApp),你的整体布局结构也是一个小部件(Scaffold),所有东西都是一个小部件(AppBarDrawerSnackBar)。想让视图居中?用 Center 就好(cmd/ctrl+Enter)!

有了 Fluter,创建 UI 就像用许多不同的小部件组合布局一样简单。

Flutter 还有另外一个核心原则,组合优先于继承。这意味着,如果你想要创建一些新的部件(widget),则可以使用几个 Widget 组成新的 Widget ,而不是扩展现有的 Widget 类。

#4 Android / iOS 差异化主题

通常,我们希望我们的 Android 应用与 iOS 应用不同,不仅在颜色上,而且在小部件的尺寸和样式上也有差异。在 Flutter 中可以用主题来实现这个目标:

正如你所看到的,我们为工具栏(AppBar)设置了不同的颜色和高度。我们使用的是 Theme.of(Context).platform 参数来适配当前平台(android/ios):

import 'package:flutter/material.dart';

class HelloFlutter extends StatelessWidget {  @override
  Widget build(BuildContext context) {    return new MaterialApp(
        title: "HelloFlutter",
        theme: new ThemeData(
            primaryColor:
                Theme.of(context).platform == TargetPlatform.iOS
                    ? Colors.grey[100]
                    : Colors.blue),
        home: new Scaffold(
          appBar: new AppBar(
            elevation:
                Theme.of(context).platform == TargetPlatform.iOS
                    ? 0.0
                    : 4.0,
            title: new Text(              "HelloFlutter",
            ),
          ),
          body: new Center(child: new Text("Hello Flutter!")),
        ));
  }
}

#5 非常、非常、非常多的资源

虽然 Flutter 依然在 alpha 版,但 Flutter 的开发社区非常庞大而且参与度很高。正因如此 Flutter 才有了很多资源的支持(类库的形式,就像 Android 中的 Gradle 依赖包)。我们有很多诸如开源图形、HTTP 请求、内容分享、存储参数、访问传感器、部署 Firebase 等等多种多样的类库。当然,每个资源包都支持 Android 和 iOS 。Flutter库列表 - Flutter Awesome

如何开始呢?

如果你喜欢 Flutter ,想自己尝试一下,最好的办法就是打开 Google Codelabs :

我喜欢 Google Flutter的更多相关文章

  1. 作为Web开发人员,我为什么喜欢Google Chrome浏览器

    来源: http://www.cnblogs.com/QLeelulu/archive/2011/08/28/2156402.html 在Google Chrome浏览器出来之前,我一直使用FireF ...

  2. Google Flutter框架:使用VS Code进行开发

    虽然进行安卓开发使用Android studio 比较方便 ,但是因为AS太臃肿而且还有一些404问题,就在打算如何进行高效的Android开发,于是找到了Flutter SDK, 他支持使用IDE进 ...

  3. Google Flutter Clock 大赛优秀项目推荐

    Flutter 在 Google 加持下,如今可以作为跨平台首选了.早在 Flutter 刚刚出现强势苗头,我作为第一批体验了一把,<Flutter 初尝:从 Java 无缝过渡>,不过也 ...

  4. Facebook的React Native之所以能打败谷歌的原因有7个(ReactNative vs Flutter)

    https://baijiahao.baidu.com/s?id=1611028483072699113&wfr=spider&for=pc 如果你喜欢用(或希望能够用)模板搭建应用, ...

  5. Flutter免费(视频)教程汇总

    Flutter学习导航 Flutter简介: Flutter可以轻松快速地构建漂亮的移动应用程序. Flutter是谷歌的移动应用SDK,用于短时间内在iOS和Android上制作高质量的原生界面应用 ...

  6. 无限可能 | Flutter 2 重点更新一览

    我们非常高兴在本周发布了 Flutter 2.自 Flutter 1.0 发布至今已有两年多的时间,在如此短暂的时间内,我们解决了 24,541 个 issue,合并了来自 765 个贡献者的 17, ...

  7. 【老孟Flutter】Flutter 2的新功能

    老孟导读:昨天期待已久的 Flutter 2.0 终于发布了, Flutter Web和Null安全性趋于稳定,Flutter桌面安全性逐渐转向Beta版! 原文链接:https://medium.c ...

  8. Flutter资源

    目录 文章 一开始 HOWTO文档 网站/博客 高级 视频 组件 演示 UI 材料设计 图片 地图 图表 导航 验证 文字和富文本 分析.流量统计 自动构建 风格样式 媒体 音频 视频 语音 存储 获 ...

  9. Flutter 2.2 更新详解

    Flutter 2.2 版已正式发布!要获取新版本,您只需切换到 stable 渠道并更新目前安装的 Flutter,或前往 flutter.cn/docs/get-started 从头开始安装. 虽 ...

随机推荐

  1. cpuset

    本文属于内核文档翻译,翻译时没有遵照原文,添加了一些作者的理解,目的不是为了替代内核文档,可以作为阅读内核文档的引子,作者鼓励读者阅读原有的内核文档.原文参考3.10.514内核文档cpuset.tx ...

  2. js动态创建表单数据

    var formData = new FormData(); formData.append("file",fileList[i]); formData.append(" ...

  3. java相关知识点

    Java基础.语法 1. 简述Java跨平台原理 2. Java的安全性 3. Java三大版本 4. 什么是JVM?什么是JDK? 什么是JRE? 5. Java三种注释类型 6. 8种基本数据类型 ...

  4. 解决关于:TypeError: Class constructor Model cannot be invoked without 'new'

    问题描述:在工作过程中出现 TypeError: Class constructor Model cannot be invoked without 'new' 这个错误 以下是报错代码: class ...

  5. DDD实战进阶第一波(十四):开发一般业务的大健康行业直销系统(订单上下文应用服务用例与接口)

    上一篇文章我们主要讲了订单上下文的领域逻辑,在领域逻辑中完成了订单项的计算逻辑.订单的计算逻辑以及如何生成相应的实体code,这篇文章我们通过 在应用服务中实现一个下单的用例,来将这些领域逻辑以及仓储 ...

  6. Android--UI之DatePicker、TimePicker...

    前言 这一篇博客分别讲解Android平台下,关于日期和时间的几个相关控件.包括DatePicker(日期选择控件).TimePicker(时间选择控件).DatePickerDialog(日期选择对 ...

  7. Spring 依赖注入方式详解(四)

    IoC 简介 平常的Java开发中,程序员在某个类中需要依赖其它类的方法. 通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理. Spring提出了依赖注入的思想 ...

  8. 从面试连跪到收割offer,回顾我的春招面试历程(研发岗位)

    本文首发于自微信公众号[程序员江湖] 作者How 2 Play Life,985 软件硕士,阿里 Java 研发工程师,在技术校园招聘.自学编程.计算机考研等方面有丰富经验和独到见解,目前致力于分享程 ...

  9. 一个前端开发者换电脑的过程(node & 淘宝镜像篇)

    当然,在我们安装了git和vscode之后,我们这个项目,在本地仍然是跑不起来的对吗?这句“npm run dev”就提示着我们需要有一个npm,npm是一个很强大的包管理工具,就像是安卓的应用商店, ...

  10. 2012-2014 三年浙江 acm 省赛 题目 分类

    The 9th Zhejiang Provincial Collegiate Programming Contest A    Taxi Fare    25.57% (166/649)     (水 ...