Flutter 与 Dart- 入门
Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作。在全世界,Flutter 正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。
为什么采用 dart
Flutter 采用 Dart 语言进行开发,而并非 Java,Javascript 这类热门语言,这是 Flutter 团队对当前热门的 10 多种语言慎重评估后的选择。因为 Dart 囊括了多数编程语言的优点,它更符合 Flutter 构建界面的方式
Flutter vs ReactNative 框架对比
ReactNative
采用 Javascript 开发,需学 React,成本高
需要 JavaScript 桥接器,实现 JS 到 Native 转化,性能耗损
访问原生 UI,频繁操作易出性能问题
支持线上动态性,可有效避免频繁更新版本
Flutter
采用 Dart 开发,可直接编译成 Native 代码(易学)
自带 UI 组件和渲染器,仅依赖系统提供的 Canvas(无桥接耗损)
暂不支持线上动态性
Flutter 是革命性的
Flutter 将 UI 组件和渲染器从平台移动到应用程序中,这使得它们可以自定义和可扩展。Flutter 唯一要求系统提供的是 canvas,以便定制的 UI 组件可以出现在设备的屏幕上,以及访问事件(触摸,定时器等)和服务(位置、相机等)。
Dart 程序(绿色)和执行数据编码和解码的原生平台代码(蓝色,适用于 iOS 或 Android)之间仍然有一个接口,但这能比 JavaScript 桥接器快几个数量级。
Flutter 的特性
快速开发
毫秒级的热重载,修改后,您的应用界面会立即更新。使用丰富的、完全可定制的 widget 在几分钟内构建原生界面。
富有表现力和灵活的 UI
Flutter 内置美丽的 Material Design 和 Cupertino(iOS 风格)widget、丰富的 motion API、平滑而自然的滑动效果和平台感知,为您的用户带来全新体验。
原生性能
Flutter 包含了许多核心的 widget,如滚动、导航、图标和字体等,这些都可以在 iOS 和 Android 上达到原生应用一样的性能。
热重载
Flutter 最受欢迎的功能之一是其快速,保留程序状态的热重载 (hot reload)。 您可以在 Flutter 应用程序运行时对其进行更改,重新加载应用程序的代码,将其从之前的操作位置继续下去。一次热重载通常用不到一秒钟。 如果您的应用遇到错误,您通常可以修复错误,然后继续,就像错误从未发生过。 即使你必须完全重新加载,它也是很快速的。
Flutter 开发环境搭建
在Flutter中文网上,关于搭建开发环境的教程已经写得比较详细了
Windows 及 Linux 上配置开发环境跟 Mac 上类似,都是 clone 代码,配置环境变量,运行flutter doctor
,配置 IDE 这几步,具体配置过程就不赘述了,大家可以参考 Flutter 中文网中的教程
Dart 编程语言快速入门
Dart 是 Google 推出的一门编程语言,吸收了现代编程语言的高级特性,目前 Dart 的版本是 Dart2,官网是:www.dartlang.org/
Developers at Google and elsewhere use Dart to create high-quality, mission-critical apps for iOS, Android, and the web. With features aimed at client-side development, Dart is a great fi
t for both mobile and web apps.
Dart 致力于客户端开发,非常适合移动和 Web 应用程序。
Dart 语言的特性
Productive(生产力高,Dart 的语法清晰明了,工具简单但功能强大)
Fast(执行速度快,Dart 提供提前优化编译,以在移动设备和 Web 上获得可预测的高性能和快速启动。)
Portable(易于移植,Dart 可编译成 ARM 和 X86 代码,这样 Dart 移动应用程序可以在 iOS、Android 和其他地方运行)
Approachable(容易上手,充分吸收了高级语言特性,如果你已经知道 C++,C 语言,或者 Java,你可以在短短几天内用 Dart 来开发)
Reactive(响应式编程)
Dart 的一些重要概念
在 Dart 中,一切都是对象,所有的对象都是继承自
Object
Dart 是强类型语言,但可以用
var
或?dynamic
来声明一个变量,Dart 会自动推断其数据类型,dynamic
类似 c#没有赋初值的变量都会有默认值
null
Dart 支持顶层方法,如
main
方法,可以在方法内部创建方法Dart 支持顶层变量,也支持类变量或对象变量
Dart 没有
public
?protected
?private
等关键字,如果某个变量以下划线(_
)开头,代表这个变量在库中是私有的
Dart 一些语法特点
如果熟悉 java 或者 c#,只需要注意下面的一些语法特性即可,其他的都比较类似,不用特意关注。
命名参数
sayHello({String name}) {print("hello, my name is $name");}
sayHello2({name: String}) {print("hello, my name is $name");}
main() {// 打印 hello, my name is zhangsansayHello(name: 'zhangsan');
// 打印 hello, my name is wangwusayHello2(name: 'wangwu');}
####参数默认值
// 位置参数的默认值 int sum(int a, int b, [int c = 3]) {return a + b + c;}
####匿名函数
test(Function callback) {callback("hello");}
main() {test((param) {// 打印 helloprint(param);});}
####is 和 c#一样, is 运算符用于判断一个变量是不是某个类型的数据
// is!则是判断变量不是某个类型的数据 var s = "hello";print(s is String); // truevar num = 6;print(num is! String); // true
####??= 和 ?.运算符??=运算符 如果 ??= 运算符前面的变量为 null,则赋值,否则不赋值
var param1 = "hello", param2 = null;param1 ??= "world";param2 ??= "world";print("param1 = param2"); // param2 = world
####?.运算符
var str1 = "hello world";var str2 = null;print(str1?.length); // 11print(str2?.length); // nullprint(str2.length); // 报错
####运算符(级联操作)使用..调用某个对象的方法(或者成员变量)时,返回值是这个对象本身,这样就能方面实现链式调用:
class Person {eat() {print("I am eating...");}
sleep() {print("I am sleeping...");}
study() {print("I am studying...");}}
main() {// 依次打印// I am eating...// I am sleeping...// I am studying...new Person()..eat()..sleep()..study();}
####不一样的 try/catch
// try catch 语句 try {print(1 ~/ 0);} catch (e) {// IntegerDivisionByZeroExceptionprint(e);}try {1 ~/ 0;} on IntegerDivisionByZeroException { // 捕获指定类型的异常 print("error"); // 打印出 error} finally {print("over"); // 打印出 over}
####类(Class)不需要用 private, protected, public 等修饰成员变量或成员函数构造函数可以不用方法体,自动对应
评论