2019-02-27

参考[快速熟悉Dart语法](https://www.jianshu.com/p/3d927a7bf020

1、关于 runApp()

上面的实例代码中使用了 runApp() 方法,runApp 方法接收的指定参数类型为

Widget,即: runApp(Widget)。在 Flutter 的组件树(widget tree)中,会根据我们在 runApp 方

法传入的 Widget 作为整个 App 的 根控件(root widget)。

2、关于 Widget
本实例中,控件树(widget tree)包含两个控件:1. Center 控件使其子控件处于

中间位置; 2.Text控件打印文本内容。runApp 方法强制将根控件覆盖屏幕,这意味着文本“你好

,世界!”将显示在屏幕中心。
Flutter 布局的机制的核心就是在 widget。控件(Widget) 定义一

个元素(Element)的配置,在Flutter框架的层次结构中处于核心层。
所有的布局 widget 都有一个

child属性(例如:Center 或 Container), 或者一个children 属性,如果他们需要一个 widget

列表(例如 Row, Column, ListView 或者 Stack) 。

一、注释

Dart的注释分为3种:单行注释、多行注释、文档注释。

/* todo:待完成  多行注释可以嵌套。 */
文档注释以///或者/**开头。可以通过dartdoc命令导出文档。

二、关键字(56个)

if
superdo
switch
assert
else
in
this
enum
is
throw
true
break
new
try
case
extends
null
typedef
catch
var
class
false
void
const
final
rethrow
while
continue
finally
return
with
for
default
其中内置标志符有:(17个)
abstract
deferred
as
dynamic
covariant
export
external
factory
get
implements
import
library
operator
part
set
static
typedef
Dart2相对于Dart1新增的,支持异步功能的关键字有:(6个)
async
async*
await
sync*
yield
yield*

三、变量和常量

(一)变量的声明,可以使用 var、Object 或 dynamic 关键字。
创建变量并初始化变量实例:如果对象不限于单一类型(没有明确的类型),请使用Object或

dynamic关键字
var name = '张三' ;
Object name = '张三';
dynamic name = '李四';
String name = '张三' ; //代替var name = '张三';

    //测试 数字类型的初始值是什么?
    int intDefaultValue;
    // assert 是语言内置的断言函数,仅在检查模式下有效
    // 在开发过程中, 除非条件为真,否则会引发异常。(断言失败则程序立刻终止)
    assert(intDefaultValue == null);
    print(intDefaultValue);//打印结果为null,证明数字类型初始化值是null

如果您从未打算更改一个变量,那么使用 final 或 const,不是var,也不是一个类型。
一个 final 变量只能被设置一次;const 变量是一个编译时常量。(Const变量是隐式的final。)

static const speed = 100;//常量如果是类级别的,请使用 static const.flnal 或者 const 不

能和 var 同时使用,

    const speed = 100; //速度(km/h)变量是一个编译时常量。(Const变量是隐式的final。)
    const double distance = 2.5 * speed; // 距离 = 速度 * 时间

    final speed2 = 100; //速度(km/h)  // 一个final变量,只能被设置一次。
    final double distance2 = 2.5 * speed2; // 距离 = 速度 * 时间

四、特殊数据类型

numbers 数字 num有两个子类 int 和 double。math库
strings 字符串 使用单引号或双引号来创建一个字符串。单引号或者双引号里面嵌套使用引号。

单引号里面嵌套单引号,或者//双引号里面嵌套双引号,必须在前面加反斜杠。三引号可多行字符

串;声明raw字符串(前缀为r);toUpperCase()函数,把字母全部变成大写。==操作符测试两个对

象是否相等。assert是断言

var height = 48.0;
print('当前标题的高度是$height'); //当前标题的高度是48.0
String name = "张三";
print("$name"+"是我们的部门经理"); // 张三是我们的部门经理
String replaceStr = 'Android Studio';
assert('你知道' +
        '${replaceStr.toUpperCase()}'
          + '最新版本是多少吗?' ==
          '你知道ANDROID STUDIO最新版本是多少吗?'); 

booleans 布尔;它有两个值,分别是:true和false
// 检查是否为空字符串
var emptyStr = '';
assert(emptyStr.isEmpty);

// 检查是否小于等于0
var numberStr = 0;
assert(numberStr <= 0);

// 检查是否为null
var nullStr;
assert(nullStr == null);

// 检查是否为NaN
var value = 0 / 0;
assert(value.isNaN);

lists list集合(也称为数组);必须单独学习List constantList = const[10,3,15];
maps map集合Map companys = {'first': '阿里巴巴', 'second': '腾讯', 'fifth': '百度'};

runes 字符(用于在字符串中表示Unicode字符)

var clapping = '\u{1f44f}';
print(clapping);
print(clapping.codeUnits);
print(clapping.runes.toList());

//使用String. fromCharCodes显示字符图形
Runes input = new Runes(
'\u2665 \u{1f605} \u{1f60e} \u{1f47b} \u{1f596} \u{1f44d}');
print(new String.fromCharCodes(input));

#五、运算符

~/ 取商 %符号表示取余 三目运算符??

#六、控制流程语句

if(条件语句){
内容体
}else{
内容体
}

for(初始值;判断条件;循环后的语句){
内容体
}

for(int i=0;i<10;i++){
print(i);
}

var array = [];
for(var i=0;i<10;i++){
array.add(()=> print(i));
}

var numbers = [1,2,3,4,5,6,7,8,9];
numbers.foreach((number)=> print(number));

var list = [1,2,3];
for(var data in list){
print(data);
}

Dart的for循环里面可以使用标记:(比较有特色的地方)
continue 标记名称从内部循环直接跳转到外部循环的下一轮循环
break标记也可以用于跳出代码块。if (entry is Bad) break errorChecks; // 跳出代码块

//////////////
//以下两种描述是等价的:

// 使用 continue
for (int i = 0; i < 10; i++) {
if (i.isEven) continue;
print(i);
}

// 使用 break.
for (int i = 0; i < 10; i++) {
labels: {
// isEven 当且仅当该整数为偶数时才返回true
if (i.isEven) break labels;
print(i);
}
}

//////////////
void switchExample(int foo) {
switch (foo) {
case 0:
print("foo is 0");
break;
case 1:
print("foo is 1");
continue shared; // Continue使用在被标记为shared的子句中
shared:
case 2:
print("foo is either 1 or 2");
break;
}
}
/////////////
while(判断条件){
内容体
}

//////////

do{
内容体
} while(判断条件);
////////
while(a>5){
print(a);
}
//////
do{
print(a);
} while(a>5);
/////
while(a>5){
if(b>5){
print(a);
break;
}
}
/////
while(a>5){
if(b<10){
print(b);
continue;
}
}
//////////////////
// 第一个是满足条件就进入 第二个是foreach遍历
arrays
.when((c)=>c.counts >=5)
.foreach((c)=>c.next());
///////////////
switch case每一条非空case字子句以break结束
////////////////
// 确保变量具有非空值
assert(text != null);
// 确保值小于100
assert(number < 100);
// 确保这是一个 https 网址
assert(urlString.startsWith('https'));
/////////////////
// 确保变量具有非空值
assert(text != null);
// 确保值小于100
assert(number < 100);
// 确保这是一个 https 网址
assert(urlString.startsWith('https'));
assert(urlString.startsWith('https'),'URL ($urlString) should start with "https".');

#七、异常

throw FormatException('Expected at least 1 section');
void distanceTo(Point other) => throw UnimplementedError();
无论是否抛出异常,要确保某些代码运行,请使用finally子句

try {
breedMoreLlamas();
} finally {
// 即使抛出异常 也会执行这句代码.
cleanLlamaStalls();
}
该finally子句在任何匹配的catch子句之后运行:
try {
breedMoreLlamas();
} catch (e) {
// 首先会处理异常
print('Error: $e');
} finally {
// 然后执行这句语句
cleanLlamaStalls();
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容