深入了解 Dart 语言:从基础到进阶

深入了解 Dart 语言:从基础到进阶

Dart 是由 Google 开发的一种现代化编程语言,特别为构建客户端应用程序而设计,尤其是在 Flutter 框架中得到了广泛应用。本文将带你了解 Dart 的基本概念、其在 Flutter 中的应用,以及如何开始使用 Dart 进行开发。

一、Dart 简介

1. Dart 的特点

  • 跨平台:Dart 允许开发者编写一次代码,运行在多种平台上,包括 Android、iOS、Web 和桌面。
  • 现代化语言特性:支持面向对象编程(OOP),具有强大的类型系统、异步编程支持(async/await),以及丰富的标准库。
  • 高性能:Dart 代码可以编译为原生机器代码或 JavaScript,支持快速启动和高性能执行。

2. Dart 的历史

  • 2007年:Dart 项目由 Google 启动,最初是为了替代 JavaScript。
  • 2011年:Dart 1.0 版本发布,开始支持基本的编译和运行功能。
  • 2017年:Dart 2.0 发布,带来了更强的类型系统和性能优化,Flutter 也在此时开始采用 Dart 作为主要语言。

二、安装 Dart 环境

1. 安装 Dart SDK

  • Windows / macOS / Linux

    访问 Dart 的官网下载安装包:Dart SDK 下载。

    • 下载并解压 SDK。
    • 将 Dart 的 bin 目录添加到系统的 PATH 环境变量中。

2. 验证安装

在终端(或命令提示符)中运行以下命令,检查 Dart 是否安装成功:

dart --version

输出类似于:

Dart SDK version: 2.15.1 (stable) on "macos_x64"

三、Hello Dart:你的第一个 Dart 程序

1. 创建 Dart 文件

在任意目录下创建一个 hello.dart 文件,输入以下代码:

void main() {print('Hello, Dart!');
}

2. 运行 Dart 程序

在终端中执行以下命令来运行你的 Dart 程序:

dart run hello.dart

输出结果:

Hello, Dart!

四、Dart 语言基础

1. 变量与数据类型

Dart 支持多种数据类型,包括整数、浮点数、字符串、布尔值等。变量使用 var 或显式声明类型。

void main() {var name = 'Dart';int age = 10;double price = 19.99;bool isAvailable = true;print('Name: $name, Age: $age, Price: $price, Available: $isAvailable');
}

2. 控制流语句

  • 条件语句
void main() {int score = 80;if (score > 60) {print('Passed');} else {print('Failed');}
}
  • 循环语句
void main() {for (var i = 0; i < 5; i++) {print('i = $i');}var list = [1, 2, 3, 4, 5];for (var item in list) {print('Item: $item');}
}

3. 函数

Dart 支持函数式编程,函数是第一类对象。

int add(int a, int b) {return a + b;
}void main() {var sum = add(10, 20);print('Sum: $sum');
}

4. 类与对象

Dart 是一种面向对象的语言,支持类和对象的定义。

class Person {String name;int age;Person(this.name, this.age);void sayHello() {print('Hello, my name is $name and I am $age years old.');}
}void main() {var person = Person('Alice', 30);person.sayHello();
}

5. 异步编程

Dart 提供了 asyncawait 关键字来简化异步编程。

Future<void> fetchData() async {await Future.delayed(Duration(seconds: 2));print('Data fetched');
}void main() async {print('Fetching data...');await fetchData();print('Done');
}

五、在 Flutter 中使用 Dart

Flutter 是基于 Dart 的框架,用于快速开发高性能的跨平台应用。以下是如何开始使用 Dart 和 Flutter 的步骤:

1. 安装 Flutter

  • 访问 Flutter 官网 并下载 Flutter SDK。
  • 解压后,将 flutter/bin 添加到系统的 PATH 环境变量。

2. 验证 Flutter 安装

在终端中运行:

flutter doctor

确保所有的依赖都已正确安装。

3. 创建一个 Flutter 项目

在终端中运行:

flutter create my_flutter_app
cd my_flutter_app

4. 运行 Flutter 应用

确保你有一个模拟器或真实设备可用,运行以下命令:

flutter run

5. 编写 Dart 代码

lib/main.dart 文件中,编写一个简单的 Flutter 应用:

import 'package:flutter/material.dart';void main() {runApp(MyApp());
}class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(title: 'Flutter Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: MyHomePage(),);}
}class MyHomePage extends StatefulWidget {_MyHomePageState createState() => _MyHomePageState();
}class _MyHomePageState extends State<MyHomePage> {int _counter = 0;void _incrementCounter() {setState(() {_counter++;});}Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('Flutter Demo Home Page'),),body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[Text('You have pushed the button this many times:',),Text('$_counter',style: Theme.of(context).textTheme.headline4,),],),),floatingActionButton: FloatingActionButton(onPressed: _incrementCounter,tooltip: 'Increment',child: Icon(Icons.add),),);}
}

6. 运行应用

在终端中,确保模拟器或设备已经启动,然后运行:

flutter run

六、进阶学习资源

  • 官方文档:Dart 官方文档
  • Flutter 教程:Flutter 官方文档
  • 在线课程:Udemy、Coursera 和 YouTube 上有许多优质课程。

七、结语

Dart 是一种强大且易于学习的编程语言,特别是在构建现代化应用程序方面表现出色。无论是开发 Flutter 应用,还是进行其他类型的开发,Dart 都提供了丰富的功能和良好的开发体验。希望本文能帮助你更好地理解和使用 Dart。如果你有任何问题或建议,欢迎在评论区留言交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/26145.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

别再忽视数组排序的重要性了

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

线稳源极跟随 线性电源前端降压

功率MOSFET线性电源涉及跟随.ms14 根本原理是Vgs对Id的控制&#xff0c;Vgs越大&#xff0c;Id越大&#xff0c;反之亦然。 观察转移特性曲线&#xff0c;结合接线图可知&#xff0c;电路稳定后&#xff0c;如果负载电阻增大&#xff0c;则Vsgnd增大&#xff0c;由于Vggnd有稳…

ONNX2NCNN工具

最近部署很多onnx转ncnn的操作&#xff0c;发现还是需要有页面操作会比较好&#xff0c;而且需要查询onnx的图&#xff0c;所以写了一个工具来搭配使用 建议搭配Netron 来使用 打开模型 选择打开-》选择onnx模型 显示基础信息 查询onnx模型图 展示信息 点击“展示信息”&…

力扣2594.修车的最少时间

力扣2594.修车的最少时间 二分答案 class Solution {public:long long repairCars(vector<int>& ranks, int cars) {ranges::sort(ranks);auto check [&](long long x) -> bool{long long res 0;for(auto v : ranks){long long k sqrt(x/v);res k;if(r…

vb.net小demo(计算器、文件处理等/C#也可看)

Demo1&#xff1a;使用窗体控件实现一个简易版计算器 Public Class Form1Private Sub Button_1_Click(sender As Object, e As EventArgs) Handles Button_1.ClickCalSubBox.Text Button_1.TextEnd SubPrivate Sub Button_2_Click(sender As Object, e As EventArgs) Handles …

B端系统的颜值问题:成也框架,败也框架!

B端UI框架和前端框架的出现&#xff0c;让系统的搭建就像堆积木一样&#xff0c;十分的容易了。这也一下子把程序员的设计和审美水平拔高到了UI框架能够达到的高度。伴随而来的则是系统的堆砌、同质化、糟糕的体验&#xff0c;以及各种违和的组件被生搬硬套的绑定在一块&#x…

nosql数据库的特点

NoSQL简介 NoSQL是一种不同于关系数据库的数据库管理系统设计方式,是对非关系型数据库的统称,它所采用的数据模型并非传统关系数据库的关系模型,而是类似键/值、列族、文档等非关系模型。NoSQL数据库没有固定的表结构,通常也不存在连接操作,也没有严格遵守ACID约束。因此…

前端只允许一次函数调用

如果你正在进行前端开发&#xff0c;并且只想允许一次函数调用&#xff0c;你可以使用JavaScript的闭包结构创建一个只能被调用一次的函数。这样的函数有时被称为单次调用函数&#xff08;“one-time call” functions&#xff09;或一次性函数&#xff08;“once” functions&…

网页自动关闭

将【<body 】标签内容复制到网页内容中 <!DOCTYPE html><html><head><title>自动关闭的网页</title></head><body onload"setTimeout(closePage, 5000)"><script>function closePage() {window.close();}</s…

虚拟机开启网络代理设置

前言&#xff1a; 不管是物理主机还是实验环境中的VMware虚拟机&#xff0c;有时候总要访问一些镜像网站或者资源网站拉取一些学习资料&#xff0c;但由于国内外网络环境的差异和网络安全的问题。总是会被阻拦。物理机相对比较容易一些&#xff0c;今天我们来说一说虚拟机应该…

YOLOv8模型训练参数详细解析

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

VSTO Word.net 如何在另外的工程内添加CustomTaskPane

其他工程肯定是不能直接添加CustomTaskPane面板的&#xff0c;但我们可以在ThisAddIn 中先把对应的panel给新建出来再进行隐藏。步骤如下&#xff1a; 1.在另外工程中定义public static CustomTaskPane currMainForm;把需要隐藏的界面赋值给currMainForm&#xff1b; 2.在另外…

酷暑骄阳,热情似火丨deepin校园联盟走进湖北大学,共话开源新篇章

内容来源&#xff1a;deepin&#xff08;深度&#xff09;社区 炎炎夏日&#xff0c;骄阳似火&#xff0c;6月11日&#xff0c;deepin校园联盟湖北大学站交流活动如期举行。在湖北大学计算机与信息工程学院&#xff0c;deepin(深度)社区研发工程师王溢学为热情似火的学子们开展…

手写图片懒加载

参考来自前辈 Aidan路修远i 的文章面试官&#xff1a;请你手写一下&#xff01;懒加载 - 掘金 (juejin.cn) Hello.vue <template><div><!-- src里面为空&#xff0c;data-original里面写图片真正的url(此处省略) --><img src"" data-origina…

【LeetCode滑动窗口算法】长度最小的子数组 难度:中等

我们先看一下题目描述&#xff1a; 解法一&#xff1a;暴力枚举 时间复杂度&#xff1a;o(n^3) class Solution { public:int minSubArrayLen(int target, vector<int>& nums){int i 0, j 0;vector<int> v;for (;i < nums.size();i){int sum nums[i];fo…

HarmonyOS(34) @Track使用指南

Track Track概述使用案例使用条件 Track概述 Track是class对象的属性装饰器。当一个class对象是状态变量时&#xff08;也就是使用State修饰时&#xff09;&#xff0c;Track装饰的属性发生变化&#xff0c;只会触发该属性关联的UI更新&#xff1b;而未被标记的属性不能在UI中…

Elasticsearch-IndexTemplate和DynamicTemplate 有什么区别

Elasticsearch中的Index Template和Dynamic Template是两种不同的概念&#xff0c;它们在索引管理中扮演不同的角色&#xff1a; ### Index Template&#xff08;索引模板&#xff09; 1. **目的**&#xff1a;用于定义新索引的默认设置&#xff0c;包括映射、设置、别名等。 …

Eclipse的下载和安装

Eclipse的下载和安装过程可以归纳为以下几个步骤&#xff1a; 一、下载Eclipse 访问Eclipse的官方网站&#xff1a;http://www.eclipse.org/downloads/。在页面上&#xff0c;你会看到多个下载选项&#xff0c;包括“Download x86_64”等&#xff0c;选择适合你操作系统的版本…

python-windows10普通笔记本跑bert mrpc数据样例0.1.048

python-windows10普通笔记本跑bert mrpc数据样例0.1.000 背景参考章节获取数据下载bert模型下载bert代码windows10的cpu进行训练进行预测注意事项TODOLIST背景 看了介绍说可以在gpu或者tpu上去微调,当前没环境,所以先在windows10上跑一跑,看是否能顺利进行,目标就是训练的…