Dart基础
<h3>一、变量:</h3>
<h4>1、变量声明:</h4>
<ul>
<li>推断类型:声明一个任意类型的变量,将字符串传入,则将该变量推断为String类型
<pre><code>var name = 'Jack';</code></pre></li>
<li>动态(对象)类型类型:对象不限定为单个类型
<pre><code>dynamic any1 = 'hello';
dynamic any2 = 12;
dynamic any3 = {
'name':'Jack',
'age':12
}</code></pre></li>
<li>显示声明类型:
<pre><code>String name = 'Jack';
int age = 12;</code></pre></li>
</ul>
<h4>2、默认值:</h4>
<blockquote>
<p>所有未初始化的变量默认值是 <strong>null</strong></p>
</blockquote>
<pre><code>int age;//null</code></pre>
<h4>3、常量:</h4>
<ul>
<li>Final:值只能被设置一次
<pre><code>final name = 'Jack';
final String firstName = 'Jack';</code></pre></li>
<li>Const:值在编译时就已经固定
<pre><code>const pi = 3.14;
//pi = 3.1415;//error</code></pre></li>
</ul>
<h3>二、内建类型:(基本数据类型)</h3>
<h4>1、Number</h4>
<pre><code>> 1. int: 整数值不大于64位
> 2. double: 64位(双精度)浮点数</code></pre>
<h4>2、String</h4>
<pre><code>> 1.通过单引号或者双引号创建
> 2.连续三个单引号或者三个双引号实现字符串模板创建
> 3.通过 ${expression} 的方式内嵌表达式,如果表达式只有一个标识符,{}可以省略
> 4.== 运算符用来测试两个对象是否相等。 在字符串中,如果两个字符串包含了相同的编码序列,那么这两个字符串相等,即:使用了内嵌表达式的字符串与纯字符串也相等。
> 5.字符串用 + 连接
> 6.使用 r 前缀,可以创建 “原始 raw” 字符串,'\'不再是转义,${}不是表达式</code></pre>
<h4>3、Bealoon</h4>
<pre><code>> 只有字面量 true 和 false 是布尔类型,检查值是否为真时需要明确判断,`if(a==0)`、`assert(a.isEmpty)`、`assert(a.isNaN)`等</code></pre>
<h4>4、List(Array)</h4>
<pre><code>> 1.长度:list.length,索引从0开始
> 2.在 List 字面量之前添加 const 关键字,可以定义 List 类型的编译时常量,此时该List不可修改</code></pre>
<ul>
<li>
<p>Set</p>
<blockquote>
<p>1.元素唯一且无需的集合:{"hello","world"}
2.要创建一个空集,要使用前面带有类型参数的<code>{}</code>,或者将<code>{}</code>赋值给Set类型</p>
<pre><code>var name = <String>{};
Set<String> sex = {};
//var name = {}; //这样会是创建一个Map,而不是Set,相当于 Map<dynamic,dynamic> name = {}</code></pre>
<p>3.使用<code>add()</code>或<code>addAll()</code>为已有的Set添加元素:</p>
<pre><code>var firstSet = <String>{};
var addSet = {'hello','world'};
firstSet.add('dart');
firstSet.addAll(addSet);</code></pre>
<p>4.使用<code>.length</code>获取Set中的元素个数
5.在Set字面量前面增加<code>const</code>来创建一个Set常量,不可修改</p>
</blockquote>
</li>
<li>
<p>Map</p>
<blockquote>
<p>1.关联keys和values的对象,key和value可以是任何类型的对象
2.在一个Map中,一个key只能出现一次,value无限制
3.Map的读取、赋值与JavaScript相似
4.在Map字面量前面添加<code>const</code>来创建Map常量</p>
</blockquote>
</li>
<li>Rune(用于在字符串中表示 Unicode 字符)</li>
<li>Symbol</li>
</ul>
<h2>三、函数</h2>
<blockquote>
<p>函数也是对象,类型为Function,可以被赋值给变量或作为参数传递给其他函数,也可以把Dart类的实例当做方法来调用</p>
</blockquote>
<pre><code>```
返回值类型 函数名(参数类型 参数1,...){
//函数体
return 返回值;
}
返回值类型 函数名(参数类型 参数) => 返回值;
```</code></pre>
<h4>1、 可选参数:命名参数或位置参数</h4>
<ul>
<li>
<p>命名可选参数:</p>
<pre><code>enableFlags(bold: true, hidden: false);
// Sets the [bold] and [hidden] flags ...
void enableFlags({bool bold, bool hidden}) {...}
//使用 `required` 表示此参数是必填参数
//required 被定义在 meta package 中,`package:meta/meta.dart` 或 `package:flutter/material.dart`
const Scrollbar({Key key, @required Widget child})</code></pre>
</li>
<li>
<p>位置可选参数:将参数放在<code>[]</code>内表示参数是可选的</p>
<pre><code>String say(String from,String msg,[String device]){
var result = '$from says $msg';
if(device != null) {
result = '$result with a $device;
}
return result;
}
</code></pre>
</li>
<li>默认参数</li>
</ul>