Dart/Flutter自动格式化时如何保留链式函数调用的换行?
Dart自动格式化保留链式调用换行的解决方法
方案1:通过语法标记强制保留换行
Dart官方格式化工具dart format默认会合并长度未超过行宽限制的链式调用,你只需要在链式调用的首个表达式末尾加一行单行注释,就能强制让后续的点调用保留换行,修改后的示例代码如下:
final list = Stream.fromIterable([1, 2, 3]); list // 任意注释内容都可以,仅用于标记不合并后续链式调用 .map((a) => a * 2) .map((b) => b * 3) .reduce((a, b) => a + b);
添加注释后再使用CTRL+ALT+L格式化,就不会再合并链式调用的手动换行。
方案2:修改Android Studio格式化配置
你可以直接调整IDE的Dart格式化规则,全局生效:
- 按下
CTRL+ALT+S打开设置面板,依次进入Languages & Frameworks->Dart->Formatter - 在
Wrapping and Braces分类下找到Chained method calls选项,将其值修改为Wrap always - 勾选同分类下的Keep line breaks when formatting相关的子选项,保存配置即可
方案3:修改项目级格式化规则
如果仅需要对当前项目生效,可以在项目根目录的analysis_options.yaml文件中添加如下配置:
include: package:flutter_lints/flutter.yaml linter: rules: - prefer_trailing_comma: true # 开启尾部逗号规则,链式调用加尾部逗号也会自动保留换行 dart: format: line_length: 80 # 可根据需求调整行宽阈值,超过阈值的链式调用会自动换行
开启尾部逗号规则后,你只需要给链式调用的最后一个方法加尾部逗号,格式化时也会自动保留换行,示例:
final list = Stream.fromIterable([1, 2, 3]); list .map((a) => a * 2) .map((b) => b * 3) .reduce((a, b) => a + b,); // 尾部加逗号即可保留换行
内容的提问来源于stack exchange,提问作者Haruspik
相关产品推荐
相关产品推荐

