在学习 Flutter 之前先学习 Dart

2025-05-24

在学习 Flutter 之前先学习 Dart

鉴于针对移动领域的技术创新“淘金热”,得益于 Flutter、React Native、NativeScript、PhoneGap 等跨平台解决方案,开发应用程序从未如此简单。

Flutter 尤其成功吸引了开发者社区的关注,它以其富有表现力的风格,让构建移动应用的 UI 变得轻松愉悦。它融合了现代开发经验中常见的一些概念,例如响应式编程和 Widget 组合,并以 Dart 平台作为其主要运行基础。

喜欢视频吗?

那么,Dart 是什么?

Dart 是 Google 推出的一门面向对象编程语言,旨在帮助开发者构建现代 Web 应用程序。它涵盖客户端、服务器端,现在还支持 Flutter 的移动端。它配备了一系列工具,包括虚拟机、核心库和包管理仓库,为您的下一个项目提供充足的资源。

尽管 Flutter 越来越受欢迎,但它很容易掩盖 Dart 平台的魅力以及它所提供的功能(独立于 Flutter)。

本文将探讨如何编写 Dart 程序,并探索其部分语言特性。希望本文能为您提供一个概览,帮助您在开发下一个应用时充分领略 Dart 的魅力。

继续阅读我的博客

第一步

以下是 Dart 程序的示例:

class Order {
var _id;
var _reference;
var _date;
Order(id, reference, date) {
this._id = id;
this._reference = reference;
this._date = date;
}
getInfo() {
return 'Your order information:' +
'\n-------------------------------' +
'\n Id: $_id' +
'\n Reference: $_reference' +
'\n Date: $_date' +
'\n-------------------------------';
}
}
void main() {
var order1 = new Order(1, 'ref1', new DateTime.now());
print(order1.getInfo());
// Expected output
// Your order information:
// -------------------------------
// Id: 1
// Reference: ref1
// Date: 2018-04-21 19:06:20.507
// -------------------------------
}

这演示了带有属性和方法的订单蓝图。main()顶层函数是你引导 Dart 应用程序的地方。

在这里,我希望您能够开始看到该语法与其他 OO 语言非常相似,并且如果您使用 Java、C# 甚至 JavaScript( ES2015 及以上版本进行编程,您会感到非常熟悉。

话虽如此,Dart 本身也有一些语言特性,肯定能让你作为开发者更高效。看看我们之前课程的这个调整:

这里做的不多,但是我们现在有一个简写构造函数,可以节省重新分配传递给类属性的参数的重复。

我们还通过从方法中移除加号 (+)来使用相邻的getIntro字符串。哦,对了,在类属性前加上下划线 (_) 可以使它们成为私有的。这很符合惯例,省去了输入 private 关键字的麻烦

好的,让我们看看我们能走多远。我们的构造函数参数是以位置方式定义的。这意味着它们是必需的。Dart 允许我们定义可选参数,有两种形式:可选位置参数可选命名参数。这实际上使我们在定义和使用它们的方式上拥有更好的灵活性:

Order(this._id, this._reference, [date]); // optional positional
Order(this._id, this._reference, {date}); // optional named
Enter fullscreen mode Exit fullscreen mode

及其用法:

new Order(1, 'ref1', new DateTime.now()); // optional positional
new Order(2, 'ref2', date: new DateTime.now()); // optional named
Enter fullscreen mode Exit fullscreen mode

当然,我们可以将其映射到我们的内部属性上,尽管对于可选的命名参数,该属性需要是公共的:

Order(this._id, this._reference, [this.date]); // optional positional
Order(this._id, this._reference, {this.date}); // optional named
Enter fullscreen mode Exit fullscreen mode

我希望到目前为止看起来还算可以预料到。现在让我们在属性上强制执行一些类型信息:

int _id;
String _reference;
DateTime _date;
Enter fullscreen mode Exit fullscreen mode

面向对象语言的另一个常见特性是可以多次声明构造函数,并通过传入的参数数量进行区分。Dart 则提供了命名构造函数,这实际上允许你为构造函数添加命名空间,从而免去了对参数数量的担忧:

Order(this._id, this._reference, [this.date]); // normal
Order.withDiscount(this._id, this._reference, this.code); // named
Enter fullscreen mode Exit fullscreen mode

我们将像这样实例化它:new Order.withDiscount(...)让我们看看到目前为止的重构:

最后一个我想介绍的特性是方法级联。它允许你使用链式调用模式来处理 getter 和 setter,这种模式在 JavaScript 库 jQuery 中很流行。为了演示这一点,我们将另一个名为 的公共属性bookings

int _id;
String _reference;
DateTime _date;
String code;
List<String> bookings;
Enter fullscreen mode Exit fullscreen mode

当我们实例化我们的对象时,我们会这样做:

Order order1 = new Order.withDiscount(1, 'ref1', 'WEEKENDFTW1')
   ..code = 'WEEKENDFTW1'
   ..bookings = ['booking1', 'booking2', 'booking3'];
Enter fullscreen mode Exit fullscreen mode

双句点(..) 展示了级联的运作方式,每次都会返回实例。链式调用适用于 setter 以及方法调用。

这是一个完整的解决方案:

结论

感谢您阅读到最后。学习这些 Dart 概念将在您开始构建 Flutter 应用程序时助您一臂之力,所以这并不会让您感到意外。

首先,不妨尝试修改一下打印输出,添加其他订单信息。完整的示例可以通过在线 Dart 编辑器轻松访问。

进一步阅读


分享就是关爱🤗

如果您喜欢这篇文章,请通过各种社交媒体渠道分享。此外,欢迎关注我的 YouTube 频道(点击小铃铛图标),观看 Dart 相关视频。

订阅我的电子邮件通讯即可下载我的免费 35 页《开始使用 Dart》电子书,并在发布新内容时收到通知。

喜欢、分享并关注我😍以获取有关 Dart 的更多内容。

文章来源:https://dev.to/creativ_bracket/learn-dart-before-you-flutter-2997
PREV
18 个月内完成 3 个 Vue 项目后的体验
NEXT
如何使用 README 创建精美的 Github 个人资料?