dart开发的7个技巧

简介: 1. 你知道吗?Dart 支持字符串乘法。这是一个简单的程序,显示如何使用字符串乘法打印圣诞树:

. 你知道吗?Dart 支持字符串乘法。

这是一个简单的程序,显示如何使用字符串乘法打印圣诞树:

void main() {
  for (var i = 1; i <= 5; i++) {
    print('🎄' * i);
  }
}
// Output:
// 🎄
// 🎄🎄
// 🎄🎄🎄
// 🎄🎄🎄🎄
// 🎄🎄🎄🎄🎄
复制代码

是不是很酷?😉

您可以使用它来检查长字符串如何适合Text小部件:

Text('You have pushed the button this many times:' * 5)
复制代码

2.需要同时执行多个Future吗?使用 Future.wait。

考虑这个模拟 API 类,它告诉我们最新的 COVID 病例数:

// Mock API class
class CovidAPI {
  Future<int> getCases() => Future.value(1000);
  Future<int> getRecovered() => Future.value(100);
  Future<int> getDeaths() => Future.value(10);
}
复制代码

要同时执行所有这些futures,请使用Future.wait. 这需要一个列表或 futures** and returns a future of lists:

final api = CovidAPI();
final values = await Future.wait([
    api.getCases(),
    api.getRecovered(),
    api.getDeaths(),
]);
print(values); // [1000, 100, 10]
复制代码

This is ideal when the futures are independent, and they don't need to execute sequentially.

3. 在 Dart 类中实现“调用”方法,使它们像函数一样可调用。

这是一个示例PasswordValidator类:

class PasswordValidator {
  bool call(String password) {
    return password.length > 10;
  }
}
复制代码

因为该方法名为call,我们可以声明一个类实例并将其用作方法:

final validator = PasswordValidator();
// can use it like this:
validator('test');
validator('test1234');
// no need to use it like this:
validator.call('not-so-frozen-arctic');
复制代码

4. 需要调用回调但前提是它不为空?使用“?.call()”语法。

假设我们有一个自定义小部件类,它应该onDragCompleted在发生特定事件时调用回调:

class CustomDraggable extends StatelessWidget {
  const CustomDraggable({Key key, this.onDragCompleted}) : super(key: key);
  final VoidCallback? onDragCompleted;
  void _dragComplete() {
    // TODO: Implement me
  }
  @override
  Widget build(BuildContext context) {/*...*/}
}
复制代码

要调用回调,我们可以编写以下代码:

void _dragComplete() {
    if (onDragCompleted != null) {
      onDragCompleted();
    }
  }
复制代码

但是有一个更简单的方法(注意使用?.):

Future<void> _dragComplete() async {
    onDragCompleted?.call();
  }
复制代码

5. 使用匿名函数和函数作为参数

在 Dart 中,函数是一等公民,可以作为参数传递给其他函数。

下面是一些定义匿名函数并将其分配给sayHi变量的代码:

void main() {
  final sayHi = (name) => 'Hi, $name';
  welcome(sayHi, 'Andrea');
}
void welcome(String Function(String) greet,
             String name) {
  print(greet(name));
  print('Welcome to this course');
}
复制代码

然后sayHi传递给一个welcome函数,该函数接受一个Function参数并使用它来迎接用户。

String Function(String)是一个函数类型,它接受一个String参数并返回一个String. 因为上面的匿名函数具有相同的签名,它可以直接作为参数传递,也可以通过变量传递sayHi


使用功能等运营商时,这种编码风格是常见的mapwherereduce

例如,这是一个计算数字平方的简单函数:

int square(int value) {
  // just a simple example
  // could be a complex function with a lot of code
  return value * value;
}
复制代码

给定一个值列表,我们可以映射它们以获得平方:

const values = [1, 2, 3];
values.map(square).toList();
复制代码

这里我们square作为参数传递,因为它的签名正是 map 操作符所期望的。这意味着我们不需要用匿名函数扩展它:

values.map((value) => square(value)).toList();
复制代码

6. 您可以使用 collection-if 和 spreads 与lists, sets AND maps

当您将 UI 作为代码编写时,Collection-if 和 spreads 非常有用。

但是您知道您也可以将它们与maps一起使用吗?

考虑这个例子:

const addRatings = true;
const restaurant = {
  'name' : 'Pizza Mario',
  'cuisine': 'Italian',
  if (addRatings) ...{
    'avgRating': 4.3,
    'numRatings': 5,
  }
};
复制代码

这里我们声明一个restaurantmaps,只添加avgRatingnumRatings键值对,如果addRatingstrue。因为我们要添加多个键值对,所以我们需要使用扩展运算符 ( ...)。

7. 需要以空安全的方式遍历map吗?使用.entries

假设你有map:

const timeSpent = <String, double>{
  'Blogging': 10.5,
  'YouTube': 30.5,
  'Courses': 75.2,
};
复制代码

以下是如何编写循环以使用所有键值对运行一些代码:

for (var entry in timeSpent.entries) {
  // do something with keys and values
  print('${entry.key}: ${entry.value}');
}
复制代码

通过迭代entries变量,您可以以空安全的方式访问所有键值对。

这比这更简洁,更不容易出错:

for (var key in timeSpent.keys) {
  final value = timeSpent[key]!;
  print('$key: $value');
}



相关文章
|
9月前
|
Dart 编译器 API
Dart笔记:Dart 库
Dart笔记:Dart 库
217 0
|
5月前
|
Dart
如何在 Flutter 项目中使用 Dart 语言?
如何在 Flutter 项目中使用 Dart 语言?
156 58
|
4月前
|
Dart 开发者 Windows
flutter:dart的学习
本文介绍了Dart语言的下载方法及基本使用,包括在Windows系统上和VSCode中的安装步骤,并展示了如何运行Dart代码。此外,还详细说明了Dart的基础语法、构造函数、泛型以及库的使用方法。文中通过示例代码解释了闭包、运算符等概念,并介绍了Dart的新特性如非空断言操作符和延迟初始化变量。最后,提供了添加第三方库依赖的方法。
49 12
|
开发框架 Dart Java
Flutter中Dart语言常用知识
@[TOC](目录) Flutter 是一种使用 Dart 语言开发的跨平台移动应用程序框架。在 Flutter 中,Dart 语言是主要的编程语言,它提供了许多强大的功能和语法糖,可以让开发者更轻松地构建高性能、美观的应用程序。下面是 Flutter 中 Dart 语言的一些详细介绍和代码示例: # 1. 变量和数据类型 在 Dart 语言中,变量不需要声明,可以直接赋值。Dart 语言支持多种数据类型,包括整数、浮点数、布尔值、字符串、列表、映射等。例如: ```dart int a = 10; double b = 3.14; bool c = true; String
128 0
|
Dart 测试技术 JavaScript
《深入浅出Dart》Dart测试
单元测试和集成测试 Dart的生态系统提供了一个完善的测试框架来进行代码的单元测试和集成测试。以下是一些基本的测试知识。 Dart单元测试 单元测试是在软件开发中进行的最小单元的测试。在Dart中,我们可以使用内置的test包来进行单元测试。 安装测试包 首先,我们需要在pubspec.yaml中添加test的依赖:
195 0
|
Dart JavaScript 前端开发
《深入浅出Dart》Dart模块化
Dart模块化详解 在大型软件项目中,模块化是必不可少的,它可以帮助我们更好地组织和管理代码,提高代码的可读性和可维护性。在Dart中,模块化是通过库(libraries)来实现的。 库的定义与使用
144 0
|
JSON Dart 编译器
Dart简单介绍
Dart是一种面向对象、用于构建高性能应用程序的编程语言,它具有快速开发、易于维护和可移植性等特点,因此在 Flutter 应用程序开发方面越来越受欢迎。在这篇文章中,我们将深入探讨 Dart 语言的一些技术思考。 类型系统
Dart简单介绍
|
Dart JavaScript 前端开发
Numbers——Dart
Dart中的数字类型有两种,int和double。
|
Dart
在 dart 中使用 equatable
在 dart 中使用 equatable
203 0
|
自然语言处理 Dart JavaScript
Flutter之搞定Dart(一)
Google为Flutter选择了Dart就已经是既定的事实,无论你多么想用你熟悉的语言,比如JavaScript、Java、Swift、C++等来开发Flutter,至少目前都是不可以的。 在讲解Dart的过程中,我会假定你已经有一定的编程语言基础,比如JavaScript、Java、Python、C++等。
407 0
Flutter之搞定Dart(一)