Dart:更喜欢常量构造函数

Sur*_*kar 35 dart flutter

我是 dart(flutter)语言的新手。

我得到这条线

更喜欢 const 和常量构造函数。

我不知道那是什么以及如何解决。

Sen*_*ran 77

这篇文章摘自这里并进行了修改

最近,flutter 团队创建了一个名为flutter_lintsanalysis_options.yaml的新包,并且默认将其添加到您的包中。

要了解有关 flutter lints 包的更多信息,请参阅此文档(flutter lints 包简介)。

有多种方法可以消除此prefer const with constant constructors警告。

您可以在文件顶部添加忽略行注释。如果您想从文件中删除警告。

// ignore_for_file: prefer_const_constructors
import 'dart:async';
import 'package:flutter/material.dart';
Run Code Online (Sandbox Code Playgroud)

否则,如果您想删除该特定行的警告,请在该行的顶部添加忽略行注释。

AppBar(        
    // ignore: prefer_const_constructors
    title:Text('Register'),
  ),
Run Code Online (Sandbox Code Playgroud)

这是禁用该规则的最简单方法。

另一种是您可以简单地从文件中删除以下行analysis_options.yaml

include: package:flutter_lints/flutter.yaml
Run Code Online (Sandbox Code Playgroud)

但最好保留该行并在analysis_options.yaml文件中添加一些规则(这是我根据我的研究得出的个人意见)。

为了避免出现prefer const with constant constructors警告,请将此规则添加prefer_const_constructors : falseanalysis_options.yaml文件中。

linter:
  rules:
    prefer_const_constructors : false
    # avoid_print: false  # Uncomment to disable the `avoid_print` rule
    # prefer_single_quotes: true  # Uncomment to enable the `prefer_single_quotes` rule
Run Code Online (Sandbox Code Playgroud)

还有其他规则可以帮助您使代码变得更好。如果您愿意,您可以添加以下一些规则(来自pedantic)。

linter:
  rules:
    - always_declare_return_types
    - always_require_non_null_named_parameters
    - annotate_overrides
    - avoid_init_to_null
    - avoid_null_checks_in_equality_operators
    - avoid_relative_lib_imports
    - avoid_return_types_on_setters
    - avoid_shadowing_type_parameters
    - avoid_single_cascade_in_expression_statements
    - avoid_types_as_parameter_names
    - await_only_futures
    - camel_case_extensions
    - curly_braces_in_flow_control_structures
    - empty_catches
    - empty_constructor_bodies
    - library_names
    - library_prefixes
    - no_duplicate_case_values
    - null_closures
    - omit_local_variable_types
    - prefer_adjacent_string_concatenation
    - prefer_collection_literals
    - prefer_conditional_assignment
    - prefer_contains
    - prefer_equal_for_default_values
    - prefer_final_fields
    - prefer_for_elements_to_map_fromIterable
    - prefer_generic_function_type_aliases
    - prefer_if_null_operators
    - prefer_inlined_adds
    - prefer_is_empty
    - prefer_is_not_empty
    - prefer_iterable_whereType
    - prefer_single_quotes
    - prefer_spread_collections
    - recursive_getters
    - slash_for_doc_comments
    - sort_child_properties_last
    - type_init_formals
    - unawaited_futures
    - unnecessary_brace_in_string_interps
    - unnecessary_const
    - unnecessary_getters_setters
    - unnecessary_new
    - unnecessary_null_in_if_null_operators
    - unnecessary_this
    - unrelated_type_equality_checks
    - unsafe_html
    - use_full_hex_values_for_flutter_colors
    - use_function_type_syntax_for_parameters
    - use_rethrow_when_possible
    - valid_regexps
Run Code Online (Sandbox Code Playgroud)

  • 巧妙地从[此处](/sf/answers/4742730891/)复制,而不向原始海报提供任何学分。 (6认同)
  • 抱歉,伙计@iDecode,这是我在堆栈中回答的第一个问题。多亏了这个,我的声誉从 1 上升到了 100。当时,我不知道如何在答案中引用其他人。后来我忘记编辑帖子了。我将立即编辑答案。我希望你能原谅我。 (2认同)
  • 我认为你不应该摆脱警告,而应该解决它。首选 const 构造函数是有原因的,并且通过将“const”放在 Text(...) 前面很容易修复。 (2认同)

iDe*_*ode 16

这是因为flutter_lintsFlutter 2.3.0 之后创建的新项目中隐式添加了该包。

此问题的三种可能的解决方案。

  1. 从整个项目中删除警告。

    打开analysis_options.yaml文件并添加以下 linter 规则:

    include: package:flutter_lints/flutter.yaml
    
    linter:
      rules:
        prefer_const_constructors: false
    
    Run Code Online (Sandbox Code Playgroud)
  2. 删除该文件中的警告

    include: package:flutter_lints/flutter.yaml
    
    linter:
      rules:
        prefer_const_constructors: false
    
    Run Code Online (Sandbox Code Playgroud)
  3. 要删除该行中的警告:

    // ignore_for_file: prefer_const_constructors
    SizedBox();
    
    Run Code Online (Sandbox Code Playgroud)

  • 谢谢。我选择了选项 1。 (2认同)

Pan*_*kam 13

在构造函数前面添加const关键字应该会导致警告消失。如果一个类是不可变的,那么将其构造函数设置为 const 构造函数通常是一个好主意。

好版本:

@immutable
class A {
  final a;
  const A(this.a);
}
Run Code Online (Sandbox Code Playgroud)

错误版本:

@immutable
class A {
  final a;
  A(this.a);
}
Run Code Online (Sandbox Code Playgroud)


小智 9

一个简单的解决方案是在正确的位置添加“const”一词:因此替换:

appBar: AppBar(title: Text('Orange Valley CAA')),
Run Code Online (Sandbox Code Playgroud)

appBar: AppBar(title: const Text('Orange Valley CAA')),
Run Code Online (Sandbox Code Playgroud)