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

问题描述 投票:0回答:4

更新到 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 constants
4个回答
2
投票

在任何使用静态数据的数据类型或小部件上使用 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 --dry-run'

'dart fix --apply'

2
投票

这是

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

禁用个别规则

include: package:lints/recommended.yaml

linter:
  rules:
    avoid_shadowing_type_parameters: false
    await_only_futures: true

有关更多信息,请阅读此分析选项


1
投票

当您创建一个小部件,并且能够在其前面加上

const
前缀时,该小部件将不会重建。框架知道不要重建此类小部件,因为它可以知道对象没有更改。常量对象在编译时解析,并且由于称为规范化的过程,如果两个或多个对象具有相同的参数并且是常量,它们将引用同一个实例(它们是同一个)。

例如,如果您有

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

然后在您调用

setState
的地方,
MyWidget
将不会被重建,因为它已经在编译时解析,并且框架也不会调用其
build
方法,这是有意义的,因为没有参数传递给
MyWidget 
(此处没有)由于发布重建而发生了变化,因此配置仍然相同。

此外,如果您在其他地方调用

cosnt MyWidget();
,您仍然会引用相同的对象/实例,因此它是更优化的。

底线是,如果您能够以

const
为前缀,那么您绝对应该这样做。他们添加了 lint 规则,以便人们添加
cosnt
构造函数,并能够使用
cosnt
调用他们的小部件/类并利用上面提到的东西。


0
投票

只需在

analysis_options.yaml

中禁用以下规则
 rules:
    prefer_const_constructors: false
    prefer_const_constructors_in_immutables: false
    prefer_const_literals_to_create_immutables: false
© www.soinside.com 2019 - 2024. All rights reserved.