Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dart: prefer constant constructors

Tags:

flutter

dart

I am new to the dart(flutter) language.

I am getting this line

prefer const with constant constructors.

I don't know what's that and how to resolve that.

like image 769
Suraj Virkar Avatar asked Sep 27 '19 14:09

Suraj Virkar


People also ask

How do I get rid of prefer const with constant constructors in flutter?

To avoid the prefer const with constant constructors warning add this rule prefer_const_constructors : false to the analysis_options. yaml file.

Why is a dart const a constructor?

Dart supports the keyword const for object instantiation. If an object is declared as being instantiated via the const keyword, it's assigned a value at compile time. A constant is an instance that is initialized with one of the following: A value of a primitive type.

How do you avoid const in flutter?

How to Ignore 'prefer const constructors' message in the current file only: To ignore this message in a specific file only, add the following line anywhere in your dart script file. We have added this line after importing, you can add anywhere you want in the file where you want to ignore 'const' error warning.

What is const constructor in flutter?

A const constructor is an optimization! The compiler makes the object immutable, allocating the same portion of memory for all Text('Hi!') objects. But not Text(Math. random()) though, as its value can't be determined at compile time!


2 Answers

This post is taken from here with modifications

Recently the flutter team created a new package called flutter_lints and it is added to your analysis_options.yaml by default.

To know more about the flutter lints package see this document(Introduction to flutter lints package).

There are several ways to remove this prefer const with constant constructors warning.

You can add the ignore line comment at the top of the file. if you want to remove the warning from the file.

// ignore_for_file: prefer_const_constructors
import 'dart:async';
import 'package:flutter/material.dart';

else if you want to remove the warning to that particular line, add the ignore line comment at the top of the line.

AppBar(        
    // ignore: prefer_const_constructors
    title:Text('Register'),
  ),

This is the simplest way to disable the rule.

Another one is you can simply remove the following line from the analysis_options.yaml file.

include: package:flutter_lints/flutter.yaml

But it's better to keep that line and add some rules in the analysis_options.yaml file(it's my personal opinion based on my research).

To avoid the prefer const with constant constructors warning add this rule prefer_const_constructors : false to the analysis_options.yaml file.

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

There are other rules that may help you to make your code good. You can add some of the following rules if you want(from 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
like image 182
Senthur Kumaran Avatar answered Oct 21 '22 07:10

Senthur Kumaran


Adding the const keyword in front of the constructor should cause the warning to go away. If a class is immutable, it is usually a good idea to make its constructor a const constructor.

Good Version:

@immutable
class A {
  final a;
  const A(this.a);
}

Bad Version:

@immutable
class A {
  final a;
  A(this.a);
}
like image 25
Pankaj Nikam Avatar answered Oct 21 '22 06:10

Pankaj Nikam