从零学习Flutter(一):初识Dart
Fluter是Google推出的跨平台开发App的一套框架,很多人都说,Google出品比属于金品,故,我也来凑凑热闹,Fluter是用Dart写的,所以在用Fluter之前,我们还是有必要简单了解一下Fluter的。之前的一直使用Facebook推出的RN框架写App,感觉RN的hot reload 做的不是那么完美,今年试了一下fluter,感觉他的hot reload比RN的好多了,另外,Fluter用dart写,dart算是强类型吧,比es6要爽的多,代码容错率大大提高。
废话不多说,简单介绍一下。
class Bicycle {
int cadence;
int speed;
int gear;
int _speed=;
Bicycle(this.cadence, this.gear);
//Bicycle(this.cadence, this.speed, this.gear);
int get Speed=>_speed;
@override
String toString() => 'Bicycle: $Speed mph';
void applyBrake(int decrement) {
_speed -= decrement;
}
void speedUp(int increment) {
_speed += increment;
}
}
void main() {
var bike =new Bicycle(,); //new Bicycle(2, 3, 1);
print(bike);
print(bike.cadence);
bike.applyBrake();
print(bike.Speed);
}
上面这段代码
1.定义一个class,class不用声明public,因为默认就是public,特别注意:在 Dart 中没有诸如 public、private、protected 这样的关键词
2.申明变量,变量默认是public,eg:int cadence;如果要申明私有变量,在变量前加一个下划线即可,eg:int _cadence;所有未初始化的变量,值都为null,无论int,stringdart中没有属性一说,申明的变量就自带get,set访问器,默认情况下,Dart 会为所有公开的变量提供存取方法,除非你需要提供仅仅可读、可写,或者在某些情况下需要在 getter 方法中进行计算或是在 setter 方法中进行某些值得更新,否则都不需要再重新定义存取方法,如果想定义一个变量为只读,可以这样,eg:int get Speed=>_speed;如果想定义一个变量为可写,可以这样,eg:int set Speed=>_speed;特别注意:在 Dart 中没有诸如 public、private、protected 这样的关键词
3.所有的 Dart 类中都有一个 toString() 方法,你可以复写这个方法来提供更具体的输出信息,修饰符 @override 会告诉分析器你当前是在复写某个成员方法,如果该复写不成功,分析器就会报错,eg:
@override
String toString() => 'Bicycle: $Speed mph';
4.说到这里,提一下dart里的字符串模板,可以在字符串内使用 ${expression} 的方式来实现字符串模板的效果,如果该表达式仅仅是一个标识符,还可以去掉花括号 $variableName
例子如上
5.针对只有一行的方法可以使用 => 来简化方法的书写,=>既可以叫:箭头函数也可以叫Lamada表达式,例子如上
6.再说一下dart 类中的构造函数,dart中构造函数不可以向C#/java里那样直接重载,在构造函数的参数中使用 this 可以直接对实例变量进行赋值,不用再编写多余的代码
eg:下面这两段代码是相同功效的
class Bicycle {
int cadence;
int speed;
int gear;//1.
Bicycle(this.cadence, this.speed, this.gear);}class Bicycle {
int cadence;
int speed;
int gear;//2.Bicycle(int cadence, int speed, int gear) {
this.cadence = cadence;
this.speed = speed;
this.gear = gear;
}}
Rectangle({this.origin = const Point(0, 0), this.width = 0, this.height = 0});
7.dart中的main方法,main()方法是 Dart 的主方法,如果你需要访问命令行传递过来的参数,可以使用main(List<String> args方法,main()方法存在于最外层的作用域,
在 Dart 中你可以在类之外编写代码,变量、方法、存取方法都可以独立于类之外维持生命周期 8.dart2中,方法中调用另一个类中的方法,new 变成可选的,在 Dart 2 中,new 关键字变成了可选的,如果你确信某个变量的值不会再发生改变,你可以使用 final 来代替 var 9.Dart 语言并没有提供interface关键字,但是每一个类都隐式地定义了一个接口 10.dart中的函数编程
String scream(int length) => "A${'a' * length}h!";
main() {
final values = [, , , , , ];
for (var length in values) {
print(scream(length));
}
}
//output
Aah!
Aaah!
Aaaah!
Aaaaaah!
Aaaaaaaaaaah!
Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah!
效果等同于:
将上述代码中的 main() 方法中的 for() {...} 替换为下面的一行代码,它直接使用了链式调用的方式:
values.map(scream).forEach(print);
参考文献:https://codelabs.flutter-io.cn/codelabs/from-java-to-dart-cn/index.html#5
dart官网:https://www.dartlang.org/
从零学习Flutter(一):初识Dart的更多相关文章
- 从零学习Fluter(八):Flutter的四种运行模式--Debug、Release、Profile和test以及命名规范
从零学习Fluter(八):Flutter的四种运行模式--Debug.Release.Profile和test以及命名规范 好几天没有跟新我的这个系列文章,一是因为这两天我又在之前的基础上,重新认识 ...
- 从零学习Fluter(六):Flutter仿boss直聘v1.0重构
今天继续学习flutter,觉得这个优秀的东西,许多方面还需要完善,作为一个后来者,要多向别人学习.俗话说,“学无先后,达者为师”.今天呢,我又重新把flutter_boss这个项目代码 从头到脚看了 ...
- iOS开发者学习Flutter
Flutter for iOS 开发者 本文档适用那些希望将现有 iOS 经验应用于 Flutter 的开发者.如果你拥有 iOS 开发基础,那么你可以使用这篇文档开始学习 Flutter 的开发. ...
- 写一个TODO App学习Flutter本地存储工具Moor
写一个TODO App学习Flutter本地存储工具Moor Flutter的数据库存储, 官方文档: https://flutter.dev/docs/cookbook/persistence/sq ...
- Flutter为什么使用Dart?
老孟导读:关于Flutter为什么使用Dart?这个话题,就像PHP是世界上最好的语言一样,争论从来没有停止过,有很多说法,比如: Google是为了推广Dart,Dart是亲儿子. Flutter团 ...
- 如何高效、快速学习Flutter?如何避坑?(文末送服福利)
稳住,今天是周末,不过我今天要上班....啊..啊... 对于 Flutter 我没有太多的发言权,不过GSY是对 Flutter 充分理解并精深掌握的前辈了,所以转一篇他对 Flutter 的一些解 ...
- 学习Flutter从0开始
一. 认识Flutter 1.1. 什么是Flutter 先看看官方的解释: Flutter is Google's UI toolkit for building beautiful, native ...
- 老贼博客php教程从零学习PHP开始写作,顺祝新同事快乐!
随笔是不是这样写的,好似是吧! 老贼博客php教程从零学习PHP开始写作,顺祝新同事快乐! 谢谢支持,点赞!
- 二、Android学习第二天——初识Activity(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 一. Android学习第二天——初识Activity 昨天程序搭建成功以 ...
随机推荐
- Android端IM应用中的@人功能实现:仿微博、QQ、微信,零入侵、高可扩展
本文由“猫爸iYao”原创分享,感谢作者. 1.引言 最近有个需求:评论@人(没错,就是IM聊天或者微博APP里的@人功能),就像下图这样: ▲ 微信群聊界面里的@人功能 ▲ QQ群聊界面里 ...
- [Swift]LeetCode126. 单词接龙 II | Word Ladder II
Given two words (beginWord and endWord), and a dictionary's word list, find all shortest transformat ...
- shell 删除重复文件脚本
摘自 <Linux Shell脚本攻略>一书,例子在109页,原理在110页,原理讲解的很好哦! 需要了解awk命令.xargs,脚本中所用的命令在Linux Shell脚本攻略一书中都有 ...
- Java如何在运行时识别类型信息?
在日常的学习工作当中,有一些知识是我们在读书的时候就能够习得:但有一些知识不是的,需要在实践的时候才能得到真知——这或许就是王阳明提倡的“知行合一”. 在Java中,并不是所有的类型信息都能在编译阶段 ...
- ASP.NET Core Mvc中空返回值的处理方式
原文地址:https://www.strathweb.com/2018/10/convert-null-valued-results-to-404-in-asp-net-core-mvc/ 作者: F ...
- RabbitMQ学习笔记(二) 工作队列
什么是工作队列? 工作队列(又名任务队列)是RabbitMQ提供的一种消息分发机制.当一个Consumer实例正在进行资源密集任务的时候,后续的消息处理都需要等待这个实例完成正在执行的任务,这样就导致 ...
- asp.net core 系列 11 配置configuration (下)
四. 文件配置提供程序AddIniFile. AddXmlFile.AddJsonFile FileConfigurationProvider 是从文件系统加载配置的基类. 以下配置提供程序专用于特定 ...
- MySQL的可重复读级别能解决幻读吗
引言 之前在深入了解数据库理论的时候,了解到事物的不同隔离级别可能存在的问题.为了更好的理解所以在MySQL数据库中测试复现这些问题.关于脏读和不可重复读在相应的隔离级别下都很容易的复现了.但是对于幻 ...
- JVM(2)--一文读懂垃圾回收
与其他语言相比,例如c/c++,我们都知道,java虚拟机对于程序中产生的垃圾,虚拟机是会自动帮我们进行清除管理的,而像c/c++这些语言平台则需要程序员自己手动对内存进行释放.虽然这种自动帮我们回收 ...
- Vue2.0中的transition组件
组件的过度 Vue1.0中transition做为标签的行内属性被vue支持.但在Vue2.0中.Vue放弃了旧属性的支持并提供了transition组件,transition做为标签被使用. 使用t ...