本文主要介绍Dart开发经常使用的一些语法git
Const 变量在编译时就已经固定。
Final 变量或类变量在第一次使用时被初始化,懒加载。
Const不能定义对象 Final能定义对象github
例:闭包
//能够省略String这个类型声明 final str = "hi world"; //final String str = "hi world"; const str1 = "hi world"; //const String str1 = "hi world";
String str =""" 保留换行的字符串 能够在编译器里换行 """; String str2 =''' 保留换行的字符串 能够在编译器里换行 '''; print(str); print(str2);
double num1 = 1.0; double num2= 1; print(num1.runtimeType); print("----"); print(num2.runtimeType);
Map testMap = {}; testMap["flag"] = true; print(testMap["flag"]);
var promoActive = true; var nav = [ 'Home', 'Furniture', 'Plants', if (promoActive) 'Outlet' ]; print(nav);
在List类型中使用For语句ide
var listOfInts = [1, 2, 3]; var listOfStrings = [ '#0', for (var i in listOfInts) '#$i' ]; print(listOfStrings);
int num = 1; print(num is String); String str = "测试"; print(str is String);
double num = 5; print( num ~/ 2); //5除2取整
String str1 = "str1"; String str2 = "str2"; print("$str1 $str2");
String str = "三目运算符"; print(str == "三目运算符"?"我是true":"我是false" );
int num = 1; double doubleNum =1.0; String str = "1"; print(int.parse(str).runtimeType); print(num.toString().runtimeType); print(doubleNum.toInt().runtimeType);
String str1 = ""; print(str1.isEmpty); String str2 = "1"; print(str2.isEmpty); String str3; //此行代码会报错,null不能调用isEmpty print(str3.isEmpty);
String _privateStr = "私有变量"; _privateFunction(){ print("私有方法"); }
import 'dart:math' as math;
String str; //不合法 if(str){ } //合法 if(str != null){ }
List list1 = [1,2,3]; List list2=[-1,0,...list1]; print(list2); List list3; // ...?运算符 若是为空就不插入 List list4 = [0,...?list3]; print(list4);
级联运算符 (..) 能够实现对同一个对像进行一系列的操做。 除了调用函数, 还能够访问同一对象上的字段属性。函数
var button = Button() // 获取对象。 ..text = 'Confirm' // 调用成员变量。 ..classes.add('important') ..onClick.listen((e) => window.alert('Confirmed!'));
第一句建立对象。获取的对象依次执行级联运算符后面的代码, 代码执行后的返回值会被忽略。
上面的代码等价于:布局
var button = Button(); button.text = 'Confirm'; button.classes.add('important'); button.onClick.listen((e) => window.alert('Confirmed!'));
String str; print(str ?? 1);//若是str为空 返回1 str ??= "1"; //若是str为空 将str赋值为1 print(str); int num = 1; num?.toString();//若是str为空 不执行toString; print(num.runtimeType); int num1; num1?.toString();//若是str为空 不执行toString; print(num1.runtimeType == Null);
Dart属于强类型语言,但能够用var声明变量,Dart对于var声明会自推导出数据类型。实际上var是编译期的语法糖, 而dynamic声明才表示动态类型,dynamic被编译后是一个object类型,在编译期间不对任何的类型进行检查,而是在运行时对类型进行检查。测试
String str = "1"; int num = 1; print(str == num);
String str = "test"; //此行代码会报错 str = 1;
对于只包含一个表达式的函数,可使用简写语法3d
printFunc(String str)=> print(str) ; //等同于 //printFunc(String str) { // print(str); //}
_test(){ execute(() => print("func被执行了")); execute1(callback); } void execute(var func) { func(); } void execute1(var callback){ callback("callback被执行了"); } callback(str){ print(str); }
定义函数时,使用{param1, param2, …},放在参数列表的最后面,用于指定命名参数。例如:code
//设置[bold]和[hidden]标志 void enableFlags({bool bold, bool hidden}) { // ... } 调用函数 enableFlags(bold: true, hidden: false);
Dart 的闭包是定义在方法里面的方法,其特性:
闭包是一个对象
闭包定义在其余方法内部
闭包能够访问外部方法的布局变量,并持有其状态。这是闭包的最大用途,经过闭包的方式把一个方法内部的属性暴露出去,由于方法是能够返回方法的,Dart 中方法也是对象同样能够当作返回值处理对象
sum(){ var num = 0; sum2(){ num++; print(num); } return sum2; // 也能够这么写,匿名的方式用的最多 return (){ num++; print(num); }; } // 多调用闭包几回 void main(){ Function a = sum(); a(); a(); a(); a(); a(); a(); } ~~~~~~~~~~log~~~~~~~~~~ 1 2 3 4 5 6
能够理解sum()就是一个对象,在初始化对象时,数值a已经被肯定为0,再次调用a()时,没有再次执行var num = 0;,由于没有从新初始化类,因此赋值操做不会再执行一次。
上文全部的代码示例都在做者的GiuHub上,https://github.com/jack0-0wu/flutter_demo,里面还包含了一些经常使用flutter功能的展现。
纸上得来终觉浅,绝知此事要躬行。