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

news/2025/7/5 12:26:18

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-elseif (num > 5) {print('Big number');} else {print('Small number');}// for loopfor (int i = 0; i < 5; i++) {print('i: $i');}// while loopint count = 0;while (count < 3) {print('count: $count');count++;}// switchString grade = 'A';switch (grade) {case 'A':print('Excellent');break;case 'B':print('Good');break;default:print('Try harder');}
}

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

void main() {// ListList<int> numbers = [1, 2, 3, 4];numbers.add(5);// SetSet<String> fruits = {'apple', 'banana'};fruits.add('orange');// MapMap<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 {@overridevoid 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')); // 是否包含 keyprint(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️⃣ 常用操作对比速查表

操作ListMapSet
创建[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] = valmap[key] = val(先删再加)
遍历forEach / forforEach / forforEach / 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 遍历 keysfor (var key in scores.keys) {print('key: $key, value: ${scores[key]}');}// 3. for-in 遍历 valuesfor (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 = ['苹果', '香蕉', '橙子', '葡萄', '西瓜'];@overrideWidget 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<int> 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 {@overridevoid 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);@overridedouble 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 {@overridevoid fly() => print('Duck is flying');@overridevoid 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<String, Logger> _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)); // truel1.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/Setterget, set
静态成员static
工厂构造函数factory
接口实现implements
扩展方法extension
文章来源:https://blog.csdn.net/u010843503/article/details/148292659
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-5529227.html

相关文章

day10机器学习的全流程

浙大疏锦行 1.读取数据 import pandas as pd import pandas as pd #用于数据处理和分析&#xff0c;可处理表格数据。 import numpy as np #用于数值计算&#xff0c;提供了高效的数组操作。 import matplotlib.pyplot as plt #用于绘制各种类型的图表# 设置中文字体…

使用Milvus运行一个Milvus单机版实例

使用Docker运行一个Milvus单机版实例 sudo docker run -d \ --name milvus-standalone \ --security-opt seccomp:unconfined \ -e ETCD_USE_EMBEDtrue \ -e ETCD_DATA_DIR/var/lib/milvus/etcd \ -e ETCD_CONFIG_PATH/milvus/configs/embedEtcd.yaml \ -e COMMON_STORAGETYP…

基于stm32风速风向温湿度和瓦斯检测(仿真+代码)

资料下载地址&#xff1a;基于stm32风速风向温湿度和瓦斯检测 一、项目功能 1.风速&#xff0c;风向&#xff0c;温湿度&#xff0c;瓦斯&#xff0c;报警。 2.可以设置温湿度&#xff0c;瓦斯&#xff0c;风速报警阈值。 3.数据上传到云平台。 二、仿真图 三、程序 #inc…

设计模式25——中介者模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 中介者模式&#xff08;Mediat…

OC—UI学习-1

OC—UI学习 UILabel UILabel是UIKit框架中的一个类Label主要参数 text&#xff1a;文本frame&#xff1a;位置框架backgroundcolor&#xff1a;背景颜色textAlignment&#xff1a;设置文本在Label中的位置textColor&#xff1a;文本颜色shadowColor&#xff1a;阴影颜色shado…

Java消息队列应用:Kafka、RabbitMQ选择与优化

Java消息队列应用&#xff1a;Kafka、RabbitMQ选择与优化 在Java应用领域&#xff0c;消息队列是实现异步通信、应用解耦、流量削峰等重要功能的关键组件。Kafka和RabbitMQ作为两种主流的消息队列技术&#xff0c;各有特点和适用场景。本文将深入探讨Kafka和RabbitMQ在Java中的…

说说线程有几种创建方式

有三种&#xff1a;分别是继承Thread类、实现Runnable接口、实现Callable接口。 第一种需要重写父类Thread的run()方法&#xff0c;并且调用start()方法启动线程。 class ThreadTask extends Thread {public void run() {System.out.println("看完⼆哥的 Java 进阶之路&a…

PostgreSQL 数据完整性检查工具对比:amcheck 与 pg_checksums

PostgreSQL 数据完整性检查工具对比&#xff1a;amcheck 与 pg_checksums PostgreSQL 提供了两种重要的数据完整性检查机制&#xff1a;amcheck 扩展和 pg_checksums 工具。它们在功能定位、检查层次和使用场景上有显著区别。 核心对比概览 特性amcheckpg_checksums检查对象…

node-DeepResearch开源ai程序用于深入调查查询,继续搜索、阅读网页、推理,直到找到答案

​一、软件介绍 文末提供程序和源码下载 node-DeepResearch开源ai程序用于深入调查查询&#xff0c;继续搜索、阅读网页、推理&#xff0c;直到找到答案。 重要提示 与 OpenAI/Gemini/Perfasciity 的“深度研究”不同&#xff0c;我们只专注于通过迭代过程找到正确的答案 。我…

「Python教案」通用序列操作

课程目标 1&#xff0e;知识目标 能够正确使用Python中通用序列操作&#xff0c;例如&#xff0c;索引、切片、连接、重复、成员检测、长度计算等。能够正确将序列操作应用在实际数据处理的中场景。 2&#xff0e;能力目标 能独立编写序列操作代码并进行调试&#xff0c;解…