35

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.

Suraj Virkar
  • 511
  • 1
  • 4
  • 13

8 Answers8

76

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
iDecode
  • 22,623
  • 19
  • 99
  • 186
Senthur Kumaran
  • 1,135
  • 1
  • 7
  • 18
  • 6
    Smartly copied from [here](https://stackoverflow.com/a/67753298/12483095) without giving any credits to the original poster. – iDecode Oct 09 '21 at 16:20
  • 1
    Sorry buddy @iDecode, This is the first question I answered in the stack. Thanks to this, my reputation rose from 1 to 100. At that time, I'm not sure how to refer others in the answer. Later, I forget to edit the post. I will be editing the answer right away. I hope you will forgive me. – Senthur Kumaran Oct 11 '21 at 05:09
  • How can I solve all of these issues instead of one by one? For dart we have https://stackoverflow.com/questions/62802330/is-there-a-way-to-automatically-fix-all-of-the-possible-lint-warnings-in-the-who – giorgio79 Oct 17 '21 at 05:04
  • 2
    I think you should not get rid of the warning but instead solve it. There are reasons why const constructors are preferred and it's easy to fix by putting "const" in front of the Text(...). – novas1r1 Apr 01 '22 at 15:07
  • I found this post explaining the performance reasons of preferring const constructors: https://medium.com/nerd-for-tech/flutter-performance-analysis-of-const-constructor-d2a72fd8a043 ✌️ – josue.0 Mar 22 '23 at 23:40
16

It is because of the flutter_lints package which is implicitly added to new projects created after Flutter 2.3.0.

Three possible solutions to this problem.

  1. To remove the warning from the whole project.

    Open analysis_options.yaml file and add the following linter rule:

    include: package:flutter_lints/flutter.yaml
    
    linter:
      rules:
        prefer_const_constructors: false
    
  2. To remove the warning in that file

    // ignore_for_file: prefer_const_constructors
    SizedBox();
    
  3. To remove the warning in that single line:

    // ignore: prefer_const_constructors
    SizedBox();
    
iDecode
  • 22,623
  • 19
  • 99
  • 186
13

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);
}
Pankaj Nikam
  • 665
  • 7
  • 22
9

A simple solution is to add the word 'const' in the right place : So replace :

appBar: AppBar(title: Text('Orange Valley CAA')),

with

appBar: AppBar(title: const Text('Orange Valley CAA')),
Francis
  • 91
  • 1
  • 1
1

When using stateless class, the widgets state inside can not be changed so we need to add 'const' word like so

const Home({Key? key}) : super(key: key);
Nathanial
  • 2,177
  • 1
  • 15
  • 34
0

if you are using version sdk: ">=2.16.1 <3.0.0" you got this error

Before

appBar: AppBar(
  title:Text("Quiz App"),
),

After

 appBar: AppBar(
  title:Const Text("Quiz App"),
),

adding Const for constant

Sarthak Raval
  • 1,001
  • 1
  • 10
  • 23
0

To resolve this issue.

Open analysis_options.yaml file

rules:

prefer_const_constructors: false
prefer_const_literals_to_create_immutables: false
Ramesh Nepali
  • 101
  • 1
  • 5
0

if your parent widget is stateless you gonna get that warning. simply do by adding a const before each widget that displays the warning. E.g

// before
 home: Scaffold(
   appBar: AppBar(title: Text("My App"),
   ),
//after
 home: Scaffold(
   appBar: AppBar(title: const Text("My App"),
   ),

the const means this is a constant and wouldn't be changes

Dennis
  • 99
  • 4