我可以在下面的 flutter 代码中删除 const 吗?

Can I remove const in the below flutter code?

更新到 flutter 2.5 后,const 修饰符被添加到默认代码中,并且有一些地方需要添加 const,而我们之前不必这样做。那么添加const有什么区别呢?

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const HomePage(),
    );
  }
}

这是flutter_lint,它在flutter中默认使用。从 Flutter 版本 2.3.0 开始,使用 flutter create 创建的 Flutter 应用程序、程序包和插件已设置为使用此程序包中定义的 lints。

禁用个别规则

include: package:lints/recommended.yaml

linter:
  rules:
    avoid_shadowing_type_parameters: false
    await_only_futures: true

如需了解更多信息,请阅读此内容 analysis option

当您创建一个小部件,并能够为其添加前缀 const 时,该小部件将不会重建。框架知道不重建这样的小部件,因为它可以告诉对象没有改变。常量对象在编译时解析,并且由于称为规范化的过程,如果两个或多个对象具有相同的参数并且是常量,它们将引用相同的实例(它们是相同的)。

例如,如果您有

@override
Widget build() {
  const MyWidget();
}

然后你在某个地方调用setStateMyWidget不会被重构,因为它已经在编译时解析了,框架也不会调用它的build方法,这使得有意义,因为传递给 MyWidget 的参数(这里是 none)没有因为发布重建而改变,所以配置仍然相同。

此外,如果您在其他地方调用 cosnt MyWidget();,您仍然会引用相同的 object/instance,因此它更优化。

底线是,如果您能够使用 const 作为前缀,那么您绝对应该这样做。他们添加了 lint 规则,以便人们添加 cosnt 构造函数并能够使用 cosnt 调用他们的 widgets/classes 并利用上面提到的东西。

在任何使用静态数据的数据类型或小部件上使用 const 关键字是一种很好的做法。

但是,如果您想要删除它,您可以编辑您的 analysis_options.yaml 文件并添加以下内容:

open analysis_option.yaml file & under linter > rules disable 



> prefer_const_constructor.
>     
>         linter:
>           rules:
>             prefer_const_constructors: false

然后,在设置 prefer const constructors: false 之后,您需要在 IDE 终端中 运行 命令如下:

'dart fix'

如果您看到这样的日志 => **

"This tool looks for and fixes analysis issues that have associated automated fixes."

** 然后试试这个

'dart fix --dry-run'

'dart fix --apply'