Administrator
Administrator
Published on 2025-06-06 / 11 Visits
0
0

dart语法

flutter开发必学的编程语言

变量&常量

var和变量类型不能同时存在

var name = "alice"; // 变量,自动推断为String类型
final int age = 18; //不可变变量
const double PI = 3.1415926; // 编绎时常量
late String address; //延迟初始化,稍后赋值。赋值前不可用,否则报错崩溃
String name = "asd"; //省略var

可空变量

int? age = 10; //可空变量
int? age2; //默认值为null

age = null; //可以赋予null

列表:List

  List<int> list = [];  //List<int>
  var list1 = <int>[];  //List<int>
  var list2 = [];       //List<dynamic>

  // print(list);          // [1, 2, 3]
  // print(list.length);   //3
  // list.isEmpty;         //长度为0时返回true
  // list.first; //第一个元素
  // list.last; //最后一个元素

集合:Set

所有成员不可重复

  Set<int> list1 = {1,2,3,4};
  var list2 = <int> {1,2,3,4};

映射/字典:Map

Map<String, int> map1 = {'age': 20, "a": 10};
var map2 = <String, int> {'age': 20, "a": 10};

Iterator:迭代器

list map set等都有迭代器

  Map<String, int> map1 = {'age': 20, "a": 10};
  var iterator = map1.entries;
  for (var value in iterator) {

  }

  //声明可迭代的变量
  Iterable<int> i1 =  [1,2,3];
  Iterable<MapEntry<String, int>> i2 =  [
    MapEntry('age', 10)
  ];

Future:async/await

Future类似js中的Promise

Future<String> future1() async {
  await Future.delayed(Duration(seconds: 3));
  return "1213";
}

void main() async {
  var res = await future1(); //类型是String,不用await是Future<String>
  print(res);
}

Stream

逐步、异步的生成多个值。async*搭配yield

Stream<int> getCount(int max) async* {
  for (var i = max; i >= 0; i--) {
    await Future.delayed(Duration(seconds: 2)); //async*中可以使用await
    yield i;
  }
}

void main() async {
  var a = await getCount(5).toList();
  print(a); // 等待约10秒后打印:[5, 4, 3, 2, 1, 0],toList时会等待所有值生成完成,类型:List<int>

  getCount(5).listen((value) {
    print(value); //依次打印5 4 3 2 1 0
  });

  await for (var value in getCount(5)) {
    print(value); //依次打印5 4 3 2 1 0
  }
}

函数的多种写法

//顶级函数 Top-Level
int parseFloat() {
  // ....
  return 123;
}

// 单一表达式时使用箭头函数
int square(int x) => x * x;

class Person {
  int p = 0;
  void test() {}
  void test2() => p * 2;
}

void main() async {
  var list = <int>[1, 2, 3];
  var list2 =
      list.map((item) {
        return item * 2;
      }).toList(); //匿名函数,一般用于传递给高阶函数作为参数;或组件(widget)的事件回调
  print(list2);
}

操作符&运算符

默认值

    int? a;
    var b = a ?? 0; //a为null时提供默认值
    print(b);

级联

  var a =
      <int>[1, 2, 3]
        ..add(4)
        ..add(5);
  print(a); //[1,2,3,4,5]

三元

  var a = 1;
  a > 0 ? '大于0' : '不大于0';

语言特性

extension

为已存在的类添加方法或属性

extension CustomStringMethod on String {
  String get prefixFive {
    return length >= 5 ? substring(0, 5) : '长度不足5位';
  }

  int parseInt() => int.parse(this);
}

void main() async {

  String b = "123";
  print(b.prefixFive); // '长度不足5位'
  print(b.parseInt()); // 123
}


Comment