dart-best-practices
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseDart Best Practices
Dart开发最佳实践
1. When to use this skill
1. 何时使用此技巧
Use this skill when:
- Writing or reviewing Dart code.
- Looking for guidance on idiomatic Dart usage.
在以下场景使用本技巧:
- 编写或评审Dart代码时。
- 寻求符合Dart语言习惯的使用指导时。
2. Best Practices
2. 最佳实践
Multi-line Strings
多行字符串
Prefer using multi-line strings () over concatenating strings with and
, especially for large blocks of text like SQL queries, HTML, or
PEM-encoded keys. This improves readability and avoids
lint errors by allowing natural line breaks.
'''+\nlines_longer_than_80_charsAvoid:
dart
final pem = '-----BEGIN RSA PRIVATE KEY-----\n' +
base64Encode(fullBytes) +
'\n-----END RSA PRIVATE KEY-----';Prefer:
dart
final pem = '''
-----BEGIN RSA PRIVATE KEY-----
${base64Encode(fullBytes)}
-----END RSA PRIVATE KEY-----''';优先使用多行字符串()而非通过和拼接字符串,尤其是处理SQL查询、HTML或PEM编码密钥等大段文本时。这提升了可读性,并且通过自然换行避免了的Lint错误。
'''+\nlines_longer_than_80_chars应避免:
dart
final pem = '-----BEGIN RSA PRIVATE KEY-----\n' +
base64Encode(fullBytes) +
'\n-----END RSA PRIVATE KEY-----';推荐:
dart
final pem = '''
-----BEGIN RSA PRIVATE KEY-----
${base64Encode(fullBytes)}
-----END RSA PRIVATE KEY-----''';Robust extractions of values from a Map with Switch Expressions
使用Switch表达式从Map中安全提取值
When parsing structures or JSON (e.g., from ), use switch
expressions with object patterns for deep validation and extraction. This is
clearer and safer than manual checks or casts.
MapjsonDecodeisasAvoid (Unsafe Access):
dart
final json = jsonDecode(stdout);
if (json is Map &&
json['configuration'] is Map &&
json['configuration']['properties'] is Map &&
json['configuration']['properties']['core'] is Map) {
return json['configuration']['properties']['core']['project'] as String?;
}
return null;Prefer (Deep Pattern Matching):
dart
return switch (jsonDecode(stdout)) {
{
'configuration': {
'properties': {'core': {'project': final String project}},
},
} =>
project,
_ => null,
};This pattern cleanly handles deeply nested structures and nullable fields
without the complexity of verbose blocks or the risk of runtime cast
errors.
if-else解析结构或JSON(例如通过获取的内容)时,使用带对象模式的switch表达式进行深度验证和提取。这比手动检查或类型转换更清晰、更安全。
MapjsonDecodeisas应避免(不安全的访问方式):
dart
final json = jsonDecode(stdout);
if (json is Map &&
json['configuration'] is Map &&
json['configuration']['properties'] is Map &&
json['configuration']['properties']['core'] is Map) {
return json['configuration']['properties']['core']['project'] as String?;
}
return null;推荐(深度模式匹配):
dart
return switch (jsonDecode(stdout)) {
{
'configuration': {
'properties': {'core': {'project': final String project}},
},
} =>
project,
_ => null,
};这种模式无需冗长的块,也不会有运行时类型转换错误的风险,能清晰处理深度嵌套结构和可空字段。
if-elseLine Length
行长度
Avoid lines longer than 80 characters, even in Markdown files and comments.
This ensures code is readable in split-screen views and on smaller screens
without horizontal scrolling.
Prefer:
Target 80 characters for wrapping text. Exceptions are allowed for long URLs
or identifiers that cannot be broken.
即使在Markdown文件和注释中,也要避免行长度超过80个字符。这确保代码在分屏视图和小屏幕上无需横向滚动即可阅读。
推荐:
目标行长度为80个字符时换行。对于无法拆分的长URL或标识符,可以例外。