我可以在下面的 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();
}
然后你在某个地方调用setState
,MyWidget
不会被重构,因为它已经在编译时解析了,框架也不会调用它的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'
更新到 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();
}
然后你在某个地方调用setState
,MyWidget
不会被重构,因为它已经在编译时解析了,框架也不会调用它的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'