Flutter 初学者应该知道的 6 个技巧

时间:2022-11-19 00:40:41

Flutter 是一个广受欢迎的跨平台框架,可以创建令人惊叹且强大的移动和 Web 应用程序。

如果您是刚开始使用 Flutter 的开发新手,这里有一些提示和技巧可以帮助您充分利用它:

Flutter 初学者应该知道的 6 个技巧

使用 final 关键字:

在 Dart 中,已初始化且无法更改的变量使用 ​​final​​ 关键字声明。您的代码将变得更加可预测并有助于防止错误。

这是一个例子:

final String name = 'Snehal Singh';

name = 'Snehal Singh'; // 错误:无法为变量‘name’赋值。

在此示例中,我们声明了一个变量名称并为其赋值“Snehal Singh”。由于 ​​name​​ 被声明为 ​​final​​,我们无法将其重新分配给新值。

使用命名参数:

Dart 支持在函数调用中使用命名参数,这可以提高代码的可读性和理解性。

使用命名参数时,您可以更好地控制参数传递给函数的顺序。

这是一个例子:

void greet({String name, String message}) {
print('$name says $message');
}

greet(name: 'Snehal Singh', message: 'Hello, world!'); // Snehal Singh says Hello, world!

在这个例子中,我们定义了一个函数 ​​greet​​,它接受两个命名参数,​​name​​ 和 ​​message​​。然后我们可以调用该函数并以我们喜欢的任何顺序传递参数,只要我们指定参数的名称即可。

使用 null 感知运算符:

Dart 提供了许多可识别 null 的运算符,它们可以使您的代码更短、更高效。

例如,您可以使用 ​​?.​​ 安全地访问可能为 null 的对象的属性。

这是一个例子:

class Person {
final String name;
final int age;

Person({this.name, this.age});
}

final person = Person(name: 'Snehal Singh', age: null);

final name = person?.name ?? 'Unknown';
final age = person?.age ?? -1;

print(name); // Snehal Singh
print(age); // -1

在这个例子中,我们定义了一个类 ​​Person​​,它有两个属性,​​name​​ 和 ​​age​​。我们创建一个 ​​Person​​ 实例并将 ​​null​​ 分配给 ​​age​​ 属性。然后我们使用 null 感知运算符 ​​?.​​ 安全地访问 ​​name​​ 和 ​​age​​ 属性,以及 ​​null​​ 合并运算符 ​​??​​ 提供默认值以防它们为空。

使用扩展方法:

使用扩展方法,Dart 允许您将新方法添加到已有方法的类中。

.如果您想在不更改其源代码的情况下扩展类的功能,这会很有帮助。

这是一个例子:

extension StringExtension on String {
bool get isPalindrome {
final reversed = this.split('').reversed.join('');
return this == reversed;
}
}

print('racecar'.isPalindrome); // true
print('hello'.isPalindrome); // false

在这个例子中,我们在 ​​String​​ 类上定义了一个扩展方法 ​​isPalindrome​​。该方法检查字符串是否为回文并返回 true 或 false。

使用 async/await:

Dart 使用 ​​async​​ 和 ​​await​​ 关键字支持异步编程。

这可以帮助您编写不会阻塞 UI 线程的更具响应性的代码。

这是一个例子:

Future<void> main() async {
print('Fetching data...');
final data = await fetchSomeData();
print('Data received: $data');
}

Future<String> fetchSomeData() async {
await Future.delayed(Duration(seconds: 2)); // 模拟网络延迟
return 'Hello

在此示例中,我们定义了一个标记为异步​​async​​的函数 ​​main​​。在 ​​main​​ 中,我们使用 ​​await​​ 关键字调用函数 ​​fetchSomeData​​。这告诉 Dart 在继续执行 main 函数的其余部分之前等待 ​​fetchSomeData​​ 函数完成。 ​​fetchSomeData​​ 使用​​ Future.delayed​​ 函数模拟网络延迟并返回一个字符串。

当我们运行 ​​main​​ 函数时,我们首先向控制台打印一条消息,表明我们正在获取数据。然后我们调用 ​​fetchSomeData​​ 并等待它完成,然后再将接收到的数据打印到控制台。

使用级联运算符:

Dart 中的级联运算符 (​​..​​) 使您能够将对同一对象的多个方法调用链接在一起。

您的代码可能因此变得更加清晰易读。

这是一个例子:

class Person {
String name;
int age;

void sayHello() {
print('Hello, my name is $name and I am $age years old');
}
}

final person = Person()
..name = 'Snehal Singh'
..age = 30
..sayHello(); // Hello, my name is Snehal Singh and I am 30 years old

在这个例子中,我们定义了一个类 ​​Person​​,它有两个属性,​​name​​ 和 ​​age​​,以及一个方法 ​​sayHello​​。我们创建一个 ​​Person​​ 实例并使用级联运算符 ​​..​​ 来设置 ​​name​​ 和 ​​age​​ 属性,并在单个方法调用链中调用 ​​sayHello​​ 方法。