dart常用语法详解/数组list/map数据/class类详解

Dart 语法详细示例

1️⃣ 变量声明

复制代码
void main() {
  // 显式类型声明
  int age = 25;
  double height = 1.75;
  String name = 'Alice';
  bool isStudent = true;

  // 隐式类型 (var 或 dynamic)
  var city = 'Beijing'; // 类型由赋值决定
  dynamic anything = 100; // 可以更改类型
  anything = 'Now a String';

  print('$name, $age years old, lives in $city');
}

2️⃣ 常量

复制代码
const pi = 3.1415; // 编译时常量
final now = DateTime.now(); // 运行时常量

3️⃣ 函数

复制代码
// 普通函数
int add(int a, int b) {
  return a + b;
}

// 箭头函数
int multiply(int a, int b) => a * b;

// 可选参数
void greet(String name, [String greeting = 'Hello']) {
  print('$greeting, $name!');
}

// 命名参数
void showUser({required String name, int age = 0}) {
  print('Name: $name, Age: $age');
}

void main() {
  print(add(2, 3));
  greet('Alice');
  showUser(name: 'Bob', age: 25);
}

4️⃣ 控制流语句

复制代码
void main() {
  int num = 10;

  // if-else
  if (num > 5) {
    print('Big number');
  } else {
    print('Small number');
  }

  // for loop
  for (int i = 0; i < 5; i++) {
    print('i: $i');
  }

  // while loop
  int count = 0;
  while (count < 3) {
    print('count: $count');
    count++;
  }

  // switch
  String grade = 'A';
  switch (grade) {
    case 'A':
      print('Excellent');
      break;
    case 'B':
      print('Good');
      break;
    default:
      print('Try harder');
  }
}

5️⃣ 集合类型 (List, Set, Map)

复制代码
void main() {
  // List
  List<int> numbers = [1, 2, 3, 4];
  numbers.add(5);

  // Set
  Set<String> fruits = {'apple', 'banana'};
  fruits.add('orange');

  // Map
  Map<String, String> user = {'name': 'Alice', 'city': 'Paris'};
  user['age'] = '30';

  print(numbers);
  print(fruits);
  print(user);
}

6️⃣ 类与对象

复制代码
class Person {
  String name;
  int age;

  Person(this.name, this.age);

  void sayHello() {
    print('Hello, my name is $name');
  }
}

void main() {
  var p = Person('Tom', 30);
  p.sayHello();
}

7️⃣ 继承与多态

复制代码
class Animal {
  void makeSound() => print('Animal sound');
}

class Dog extends Animal {
  @override
  void makeSound() => print('Woof!');
}

void main() {
  Animal a = Dog();
  a.makeSound(); // Woof!
}

9️⃣ 异步编程 (Future & async/await)

复制代码
Future<String> fetchData() async {
  await Future.delayed(Duration(seconds: 2)); // 模拟网络延迟
  return 'Data loaded!';
}

void main() async {
  print('Fetching data...');
  String data = await fetchData();
  print(data);
}

1️⃣0️⃣ 扩展运算符与空安全

复制代码
void main() {
  List<int>? a = [1, 2, 3];
  List<int> b = [0, ...?a]; // 空安全展开运算符
  print(b); // [0, 1, 2, 3]

  String? name;
  String displayName = name ?? 'Guest'; // 空值处理
  print(displayName); // Guest
}
语法特性 示例
变量声明 var, final, const
条件语句 if, switch
循环 for, while, do-while
集合 List, Set, Map
class, extends
函数 普通函数, 箭头函数
异常处理 try-catch-finally
异步 async, await, Future
空安全 ?, ??, !, ...?

Dart 数据结构:List、Map、Set 操作详解

1️⃣ List (列表/数组) 操作

复制代码
void main() {
  // 创建
  List<int> nums = [10, 20, 30];

  // 查
  print(nums[0]);  // 取第一个元素
  print(nums.length); // 获取长度
  print(nums.contains(20)); // 是否包含某个元素

  // 增
  nums.add(40);       // 尾部添加
  nums.insert(1, 15); // 指定位置插入
  nums.addAll([50, 60]); // 批量添加
  print(nums);

  // 删
  nums.remove(20);    // 删除指定元素
  nums.removeAt(0);   // 删除指定位置
  nums.removeLast();  // 删除最后一个
  nums.clear();       // 清空
  print(nums);

  // 改
  nums = [1, 2, 3];
  nums[0] = 100;
  print(nums);

  // 遍历
  nums.forEach((e) => print('元素: $e'));

  // map (映射)
  var newNums = nums.map((e) => e * 2).toList();
  print(newNums); // [200, 4, 6]

  // where (过滤)
  var filtered = nums.where((e) => e > 2).toList();
  print(filtered); // [100, 3]
}

2️⃣ Map (键值对) 操作

复制代码
void main() {
  // 创建
  Map<String, int> scores = {'Tom': 90, 'Alice': 85};

  // 查
  print(scores['Tom']); // 取值
  print(scores.containsKey('Alice')); // 是否包含 key
  print(scores.containsValue(85));    // 是否包含 value

  // 增
  scores['Bob'] = 75; // 新增/更新
  scores.addAll({'Jack': 80, 'Lucy': 95});
  print(scores);

  // 删
  scores.remove('Tom');
  print(scores);
  scores.clear(); // 清空
  print(scores);

  // 改
  scores = {'Tom': 90, 'Alice': 85};
  scores['Tom'] = 100;
  print(scores);

  // 遍历
  scores.forEach((key, value) {
    print('$key: $value');
  });

  // map (映射)
  var updated = scores.map((k, v) => MapEntry(k, v + 5));
  print(updated);
}

3️⃣ Set (集合) 操作

复制代码
void main() {
  // 创建
  Set<String> fruits = {'apple', 'banana', 'orange'};

  // 查
  print(fruits.contains('apple')); // 是否包含
  print(fruits.length);            // 长度

  // 增
  fruits.add('grape');
  fruits.addAll({'pear', 'mango'});
  print(fruits);

  // 删
  fruits.remove('banana');
  print(fruits);
  fruits.clear();
  print(fruits);

  // 改 (Set 没有直接"改",可以先删再加)
  fruits = {'apple', 'banana'};
  if (fruits.contains('banana')) {
    fruits.remove('banana');
    fruits.add('watermelon');
  }
  print(fruits);

  // 遍历
  fruits.forEach((f) => print(f));
}

4️⃣ 常用操作对比速查表

操作 List Map Set
创建 [1,2,3] {'a':1, 'b':2} {'a', 'b'}
list[0] map['a'] set.contains('a')
list.add() / insert() map['c'] = 3 / addAll() set.add() / addAll()
remove() / removeAt() remove() / clear() remove() / clear()
list[i] = val map[key] = val (先删再加)
遍历 forEach / for forEach / for forEach / for
高阶函数 map(), where(), any() map(), forEach() map(), where()

数据遍历

1️⃣ 遍历 List

复制代码
void main() {
  List<String> fruits = ['apple', 'banana', 'orange'];

  // 1. for 循环
  for (int i = 0; i < fruits.length; i++) {
    print('水果: ${fruits[i]}');
  }

  // 2. for-in 循环 (简洁写法)
  for (var fruit in fruits) {
    print('水果: $fruit');
  }

  // 3. forEach (高阶函数)
  fruits.forEach((fruit) {
    print('水果: $fruit');
  });

  // 4. map/where (生成新集合)
  var upperFruits = fruits.map((f) => f.toUpperCase()).toList();
  print(upperFruits);
}

2️⃣ 遍历 Map

复制代码
void main() {
  Map<String, int> scores = {'Tom': 90, 'Alice': 85, 'Bob': 78};

  // 1. forEach 遍历
  scores.forEach((key, value) {
    print('$key 的分数是 $value');
  });

  // 2. for-in 遍历 keys
  for (var key in scores.keys) {
    print('key: $key, value: ${scores[key]}');
  }

  // 3. for-in 遍历 values
  for (var value in scores.values) {
    print('value: $value');
  }

  // 4. entries 遍历
  for (var entry in scores.entries) {
    print('${entry.key}: ${entry.value}');
  }
}

3️⃣ 遍历 Set

复制代码
void main() {
  Set<String> colors = {'red', 'green', 'blue'};

  // 1. for-in 循环
  for (var color in colors) {
    print('颜色: $color');
  }

  // 2. forEach 高阶函数
  colors.forEach((color) {
    print('颜色: $color');
  });

  // 3. map 生成新集合
  var upperColors = colors.map((c) => c.toUpperCase()).toSet();
  print(upperColors);
}

4️⃣ 高阶函数遍历 (List/Set/Map 通用)

方法 说明 示例
forEach 遍历每个元素 list.forEach((e) => print(e));
map 转换每个元素 (返回新集合) list.map((e) => e*2).toList()
where 过滤符合条件的元素 (新集合) list.where((e) => e>5).toList()
any 是否有任意元素符合条件 list.any((e) => e>10)
every 是否所有元素都符合条件 list.every((e) => e>0)
reduce 聚合处理 (累计) list.reduce((a, b) => a + b)
fold 自定义聚合 (带初始值) list.fold(0, (a, b) => a + b)

结合 Flutter 界面 (ListView.builder) 的 完整遍历案例

比如我们有一个水果列表 List,在页面上展示出来:

复制代码
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  final List<String> fruits = ['苹果', '香蕉', '橙子', '葡萄', '西瓜'];

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('水果列表')),
        body: ListView.builder(
          itemCount: fruits.length,
          itemBuilder: (context, index) {
            return ListTile(
              leading: Icon(Icons.local_grocery_store),
              title: Text(fruits[index]),
              trailing: Icon(Icons.arrow_forward),
              onTap: () {
                print('你点击了 ${fruits[index]}');
              },
            );
          },
        ),
      ),
    );
  }
}
  • 使用 ListView.builder 高效渲染列表。
  • itemCount 表示项目数量,itemBuilder 每个项目如何显示。
  • fruits[index] 是遍历列表数据的核心。

假设我们有一个 Map 列表,每个元素是一个对象(如水果和价格):

复制代码
final List<Map<String, dynamic>> fruits = [
  {'name': '苹果', 'price': 5},
  {'name': '香蕉', 'price': 3},
  {'name': '橙子', 'price': 4},
];

$$页面展示: body: ListView.builder( itemCount: fruits.length, itemBuilder: (context, index) { var fruit = fruits[index]; return ListTile( title: Text('${fruit['name']}'), subtitle: Text('价格: ${fruit['price']} 元/斤'), leading: Icon(Icons.shopping_cart), ); }, ) ## Dart 中 class 全面详解 ## 1️⃣ 基本结构 class Person { String name; // 属性 int age; // 构造函数 Person(this.name, this.age); // 方法 void sayHello() { print('Hi, I am $name and I am $age years old.'); } } void main() { var p = Person('Alice', 25); p.sayHello(); } * class 关键字定义类。 * 类中可以包含:属性(字段) 构造函数 方法 * 实例化类用 var p = Person(...)。 ### 2️⃣ 构造函数详解 class Dog { String name; Dog(this.name); // 简写,等价于 Dog(String name) { this.name = name; } } void main() { var dog = Dog('Buddy'); print(dog.name); } ##### 命名构造函数 class Point { int x, y; Point(this.x, this.y); Point.origin() : x = 0, y = 0; // 命名构造函数 Point.fromList(List coords) : x = coords[0], y = coords[1]; } void main() { var p1 = Point(2, 3); var p2 = Point.origin(); var p3 = Point.fromList([5, 6]); print('${p1.x}, ${p1.y}'); print('${p2.x}, ${p2.y}'); print('${p3.x}, ${p3.y}'); } ### 3️⃣ 继承、重写(Override) class Animal { void speak() { print('Animal speaks'); } } class Dog extends Animal { @override void speak() { print('Woof!'); } } void main() { var a = Animal(); var d = Dog(); a.speak(); d.speak(); } ### 4️⃣ Getter \& Setter class Circle { double _radius; Circle(this._radius); double get area => 3.14 * _radius * _radius; set radius(double r) { if (r > 0) { _radius = r; } } } void main() { var c = Circle(5); print(c.area); c.radius = 10; print(c.area); } ### 5️⃣ 抽象类(abstract class) abstract class Shape { double area(); } class Rectangle extends Shape { double width, height; Rectangle(this.width, this.height); @override double area() => width * height; } void main() { var r = Rectangle(10, 5); print(r.area()); } ### 6️⃣ 接口(interface)和多重继承(Dart 没有真正的多继承) > Dart 中所有类都是隐式接口。 class Flyable { void fly() => print('Flying'); } class Swimmable { void swim() => print('Swimming'); } class Duck implements Flyable, Swimmable { @override void fly() => print('Duck is flying'); @override void swim() => print('Duck is swimming'); } void main() { var d = Duck(); d.fly(); d.swim(); } ### 7️⃣ 静态成员 (static) class MathUtils { static double pi = 3.14159; static double square(double x) => x * x; } void main() { print(MathUtils.pi); print(MathUtils.square(4)); } ### 8️⃣ 工厂构造函数(factory constructor) class Logger { static final Map _cache = {}; final String name; factory Logger(String name) { return _cache.putIfAbsent(name, () => Logger._internal(name)); } Logger._internal(this.name); void log(String msg) { print('[$name]: $msg'); } } void main() { var l1 = Logger('App'); var l2 = Logger('App'); print(identical(l1, l2)); // true l1.log('Hello'); } ### 9️⃣ 扩展方法 (Extension) extension StringExtension on String { String greet() => 'Hello, $this!'; } void main() { print('Alice'.greet()); // Hello, Alice! } ### 完整示例汇总 class Person { String name; int _age; Person(this.name, int age) : _age = age; void sayHello() => print('Hi, I am $name'); int get age => _age; set age(int a) { if (a > 0) _age = a; } static String species = 'Human'; static void printSpecies() => print('Species: $species'); } void main() { var p = Person('Tom', 30); p.sayHello(); print('Age: ${p.age}'); p.age = 35; print('New Age: ${p.age}'); Person.printSpecies(); } ### 结语 | 关键点 | 示例 | |---------------|------------------------------| | 类定义 | `class ClassName {}` | | 构造函数 | `Class(this.a, this.b)` | | 属性 (字段) | `String name;` | | 方法 | `void sayHi() {}` | | 继承 | `class Sub extends Super {}` | | 抽象类 | `abstract class Shape {}` | | Getter/Setter | `get`, `set` | | 静态成员 | `static` | | 工厂构造函数 | `factory` | | 接口实现 | `implements` | | 扩展方法 | `extension` |

相关推荐
恋猫de小郭5 分钟前
Flutter 官方多窗口体验 ,为什么 Flutter 推进那么慢,而 CMP 却支持那么快
android·前端·flutter
小纭在努力1 小时前
【算法设计与分析】实验——改写二分搜索算法,众数问题(算法分析:主要算法思路),有重复元素的排列问题,整数因子分解问题(算法实现:过程,分析,小结)
数据结构·python·学习·算法·算法设计与分析·实验报告·实验
kingmax542120085 小时前
【洛谷P9303题解】AC- [CCC 2023 J5] CCC Word Hunt
数据结构·c++·算法·广度优先
bai_lan_ya6 小时前
数据结构-排序-排序的七种算法(2)
数据结构·算法·排序算法
独家回忆3648 小时前
每日算法-250601
数据结构·算法
小蜜蜂嗡嗡9 小时前
flutter项目迁移空安全
javascript·安全·flutter
蒙奇D索大10 小时前
【数据结构】图论核心算法解析:深度优先搜索(DFS)的纵深遍历与生成树实战指南
数据结构·算法·深度优先·图论·图搜索算法
鑫鑫向栄10 小时前
[蓝桥杯]缩位求和
数据结构·c++·算法·职场和发展·蓝桥杯
Tony__Ferguson10 小时前
简述八大排序(Sort)
数据结构·算法·排序算法
鑫鑫向栄10 小时前
[蓝桥杯]外卖店优先级
数据结构·c++·算法·职场和发展·蓝桥杯