【问题标题】:Can I remove const in the below flutter code?我可以在下面的颤动代码中删除 const 吗?
【发布时间】:2021-11-19 07:23:49
【问题描述】:

更新到 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


    【解决方案1】:

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

    例如,如果你有

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

    然后在某处调用setStateMyWidget 将不会被重构,因为它已经在编译时解析,并且框架也不会调用它的build 方法,这是有道理的,因为没有传递给MyWidget(此处没有)已因发布重建而更改,因此配置仍然相同。

    此外,如果您在其他地方调用 cosnt MyWidget();,您仍将引用相同的对象/实例,因此它更优化。

    底线是,如果您能够以const 为前缀,那么您绝对应该这样做。他们添加了 lint 规则,以便人们添加 cosnt 构造函数,并能够使用 cosnt 调用他们的小部件/类,并利用上述内容。

    【讨论】:

      【解决方案2】:

      这是flutter_lint,它在颤振中默认使用。从 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

      【讨论】:

        猜你喜欢
        • 2014-04-30
        • 2021-04-03
        • 2012-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 2014-02-13
        • 2016-09-28
        相关资源
        最近更新 更多