03. Flutter基础视频-Dart基础语法

82 阅读4分钟

AS创建空的Dart工程

我们先用Android Studio创建一个Empty Project工程

Screen Shot 2023-01-05 at 10.23.06.png 然后选择file->Project Structure->Modules->+号新建一个Modules->选择dart SDK路径->finish Screen Shot 2023-01-05 at 10.25.29.png Screen Shot 2023-01-05 at 10.27.50.png

Screen Shot 2023-01-05 at 10.59.30.png

hello world

void main() {
  var a;
  print(a);
  a = 'hello world';
  print(a);
  final c = 999;
}
/* Dart中的变量常量
 使用var声明一个变量,可以赋值不同的类型
 var 声明的变量如果没有初始化,那么他的值为null

 使用final声明的一个只能赋值一次的变量 !
 他是最终变量
 */

字符串

/* Dart 中的字符串
使用单引号和双引号都可以创建字符串
三个引号或双引号,创建多行字符串
 */
void stringDemo() {
  String str = 'shark_ha\nzed';
  print(str);
  String str1 = "shark_ha\nzed";
  print(str1);

  String str2 = '''shark_ha
  zed''';
  print(str2);
  print(str1+str2);
  
  print(str1*2); /// 相当于str1复制了两份
  
  int a = 10;
  int b = 20;
  print('a + b = ${a + b}'); /// a + b = 30

  int c = 30;
  print('a + b = $c'); /// a + b = 30

  String str3 = "shark\nshark";
  String str4 = r"shark\nshark"; /// 如果只是想让\n表示字符,只需要在字符前家r
  print(str3);
  print(str4);

  /*打印结果
shark_ha
zed
shark_ha
zed
shark_ha
  zed
  * */
}

Dart中的list列表


/* Dart中的列表
* 创建可变list var list1 = [1,2,3];
* 创建不可变list var list2 = const [1,2,3];
* */
void listDemo() {
  var list1 = [1, 2, 3, 'hank'];  /// 用const修饰就是不可变的了 var list1 = const [1, 2, 3, 'hank'];
  print(list1);       /// [1, 2, 3, hank]
  print(list1[3]);    /// hank
  list1[3] = 'shark';
  print(list1);       /// [1, 2, 3, shark]
  print(list1.length);  /// 4 数组长度

  list1.add('kody');  /// 添加元素
  print(list1); /// [1, 2, 3, shark, kody]
  list1.insert(1, 'cat');  /// 插入元素
  print(list1); /// [1, cat, 2, 3, shark, kody]
  list1.remove('cat');  /// 删除元素
  print(list1); /// [1, 2, 3, shark, kody]

  list1.clear();
  print(list1); ///[]

  var list4 = [1,2,7,4,5,6,3,8];
  list4.sort();  ///排序
  print(list4); ///[1, 2, 3, 4, 5, 6, 7, 8]
  print(list4.sublist(4,7)); ///[5, 6, 7]  获取4,到7位置的数据
}

Dart中的Map健值对

/* Dart中的Map健值对
* 创建可变的Map: var json1 = {'one': 'shark', 'tow': 'zed'};
* 创建可变的Map: var json1 = const {'one': 'shark', 'tow': 'zed'};
* */
void mapDemo() {
  var json1 = {'one': 'shark', 'tow': 'zed'};
  print(json1);   /// {one: shark, tow: zed}
  print(json1['one']);   /// shark
  json1['one'] = 'kody';
  print(json1);  /// {one: kody, tow: zed}

  var json2 = const {'one': 'shark', 'tow': 'zed'};
  // json2['one'] = 'hah'; 会报错
  print(json2.length);  ///长度
  print(json2.values);  /// 有哪些值
  print(json2.keys);  /// 有哪些健

  var list = ['hank', 'shark', 'kody'];
  print(list.asMap());  /// asMap(); 直接数组转成健值对 {0: hank, 1: shark, 2: kody}
}

Dart中的运算符

/* Dart中的运算符
* 赋值运算 ??=
* 条件表达式 ??
* */
void operatorDemo() {
  var a;
  a ??= 10;  /// 当a为空的时候a会赋值10;
  a ??= 5;  /// 此时a不会赋值5
  print(a);   /// 10

  var b;
  b = 5;
  print(b ?? a); /// 打印 5 如果左边有值返回左边,没有就返回 右边!
}

Dart中的方法

/* Dart中的方法
* 方法也是一个对象
* 返回值和参数类型可以省略
* 当方法的执行语句只有一句的时候,可以使用箭头函数 => 表达式
* 可选参数: 定义可选参数就必须带上形参的名字和类型
* 匿名方法:没有方法名称和方法!
* 闭包: closure
*   定义在函数里面的函数就是闭包,闭包也是一个对象
*   闭包的作用:可以访问外部函数的局部变量
* */
void closureDemo() {
  var func = funA();
}
funA() {
  int count = 0;
  return () => print(count++);/// 这个匿名函数就是一个闭包
}

void functionDemo() {
  var fun = funA();
  fun();  /// 0
  fun(); /// 1
  fun();   /// 2
  fun(); /// 3

  var fun2 = funA();
  fun2();  /// 0
  fun2(); /// 1
  fun2();   /// 2
  fun2(); /// 3

  print('function');  /// function
  print(sum(1, 10));  /// 11
  print(sum2(1, 10));  /// 11
  print(sum3(2, 10));  /// -8
  print(sum4(1, c: 5, b: 3));  /// 9
  print(sum4(1, c: 5));  /// 6

  var hello = printHello; /// 方法也是一个对象
  hello();    /// hello

  var list = [1,2,3,4];
  list.forEach(print); /// 1 2 3 4

  forEachDemo(list, print);   /// 1 2 3 4
  forEachDemo(list, (var a) {
    b++;
    print('元素$b = $a');
  });   /// /// 1 2 3 4

  list.forEach(printElement);
  /*
元素1 = 1
元素2 = 2
元素3 = 3
元素4 = 4
* */
  var func = () {
    print('匿名方法');
  };
  func();   /// 匿名方法

  /// 立即执行方法,函数
  (() {
    print('立即执行函数');
  })();  /// 立即执行函数
}


forEachDemo(List list, void func(var element)) {
  for(var e in list) func(e);
}

int b = 0;
printElement(var a) {
  b++;
  print('元素$b = $a');
}

printHello() => print('hello');

int sum(int a, int b) {
  return a + b;
}
/// 也可以
sum2(a, b) => a + b;
/// 还可以
sum3(a, b) => a == 1 ? a + b : a - b;
/// 可选参数
sum4(a, {b, c}) {
  b ??= 0;
  c ??= 0;
  return a + b + c;
}
/// 可选参数 int? 告诉了编译器,我处理了后面为空的情况
sum5(a, {int? b, int? c}) {
  b ??= 0;
  c ??= 0;
  return a + b + c;
}
/// 可选参数 直接设置默认值
sum6(a, {int b = 0, int c = 0}) {
  return a + b + c;
}

demo