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.
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.
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
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.
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
To remove the warning in that file
// ignore_for_file: prefer_const_constructors
SizedBox();
To remove the warning in that single line:
// ignore: prefer_const_constructors
SizedBox();
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);
}
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')),
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);
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
To resolve this issue.
Open analysis_options.yaml file
rules:
prefer_const_constructors: false
prefer_const_literals_to_create_immutables: false
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