【问题标题】:Proper flutter/dart formatting正确的颤振/飞镖格式
【发布时间】:2025-12-05 20:50:01
【问题描述】:

我正在编写一些颤动的代码。代码将右大括号堆叠在同一行。此外,当我在 VSCode 中运行“格式化文档”时,它还会将大括号堆叠在一行上。

像这样(见最后一行)...

return Container(
    width: 200,
    child: CupertinoTextField(
        maxLength: 10,
        textCapitalization: TextCapitalization.characters,
        focusNode: focusNode,
        decoration: BoxDecoration(
            border: Border.all(color: Colors.white.withOpacity(0))),
        style: accentTextStyle,
        placeholder: "NAME",
        textAlign: TextAlign.center,
        keyboardAppearance: Brightness.dark,
        controller: _textController,
        onChanged: (s) {
          navigation.update();
          if (s == '') {
            program.name = 'UNNAMED${navigation.programsCounter}';
            return;
          }
          program.name = s.toUpperCase();
        }));

但在 Flutter 文档和示例代码中,所有示例都使用以下格式(大括号位于单独的行中)。

return Container(
  width: 200,
  child: CupertinoTextField(
    maxLength: 10,
    textCapitalization: TextCapitalization.characters,
    focusNode: focusNode,
    decoration: BoxDecoration(
        border: Border.all(color: Colors.white.withOpacity(0))),
    style: accentTextStyle,
    placeholder: "NAME",
    textAlign: TextAlign.center,
    keyboardAppearance: Brightness.dark,
    controller: _textController,
    onChanged: (s) {
      navigation.update();
      if (s == '') {
        program.name = 'UNNAMED${navigation.programsCounter}';
        return;
      }
      program.name = s.toUpperCase();
    }
  )
);

什么是正确的格式?另外,“格式化文档”是否使用 dart 扩展来获得正确的格式?

【问题讨论】:

标签: flutter dart visual-studio-code code-formatting


【解决方案1】:

您可以在大括号的末尾使用逗号(,)。然后“格式文档”将分隔每个大括号的行。试试这个:

return Container(
 width: 200,
 child: CupertinoTextField(
    maxLength: 10,
    textCapitalization: TextCapitalization.characters,
    focusNode: focusNode,
    decoration: BoxDecoration(
        border: Border.all(color: Colors.white.withOpacity(0))),
    style: accentTextStyle,
    placeholder: "NAME",
    textAlign: TextAlign.center,
    keyboardAppearance: Brightness.dark,
    controller: _textController,
    onChanged: (s) {
      navigation.update();
      if (s == '') {
        program.name = 'UNNAMED${navigation.programsCounter}';
        return;
      }
      program.name = s.toUpperCase();
    },
   ),
  );

编辑:

好的,您正在寻找合适的方法。正如official document 中提到的,您应该使用尾随逗号。

为了获得良好的自动格式化,我们建议您采用可选的尾随逗号。

【讨论】:

    【解决方案2】:

    您也可以通过在大括号之间添加commas 并点击缩进按钮来获得相同的缩进:

    • VS 代码:alt + shift + f
    • Android Studio:ctrl + alt + l

    对我来说非常好:)

    添加逗号,如:

    onChanged: (s) {
              navigation.update();
              if (s == '') {
                program.name = 'UNNAMED${navigation.programsCounter}';
                return;
              }
              program.name = s.toUpperCase();
            },),);
    

    缩进后:

        onChanged: (s) {
          navigation.update();
          if (s == '') {
            program.name = 'UNNAMED${navigation.programsCounter}';
            return;
          }
          program.name = s.toUpperCase();
        },
      ),
    );
    

    【讨论】:

    • 但这并不能真正回答问题。
    • 先生,没有正确的格式。适合你的就看你自己了。我刚刚添加了如何实现格式良好的代码。 P.S 我没有从任何 Flutter 工程师那里听到有关格式的信息。他们推荐了我与您分享的解决方案 :) 干杯,美好的一天 :)
    • 没有正确的格式,它是 dartfmt 项目指定的格式,它是一个固执己见的格式化程序。所以我很好奇VSCode是否使用这个,以及哪种格式匹配。
    • 我认为它可能是 .dart 扩展名,但如果您添加 commas,它将以正确的方式格式化它们,以 //Container 结尾,如 cmets 以获得更多说明 :)