Coding/Learn/dart/dart named redirecting constructors
Dart & Flutter Engineering Complete Course
01.Introduction & Execution Architecture
02.Syntax, Statements & Code Organization
03.Variables, Type Inference, final & const
04.Core Built-In Types: int, double, num, bool, String
05.String Interpolation, Multiline & Raw Strings
06.Operators: Arithmetic, Type Test, Ternary & Cascade
07.Conditional Branching: if, else if, else & Guards
08.Loops: standard for, for-in, while & do-while
09.Switch Statements, Switch Expressions & Exhaustiveness
10.Loop Control: break, continue & Labeled Jumps
11.Pattern Matching & Destructuring in Dart 3
12.Error Handling: try, catch, on, finally & assert
13.Functions, Return Types & Arrow Syntax (=>)
14.Named Parameters & the required Keyword
15.Optional Positional Parameters & Default Values
16.Anonymous Functions, Lambdas & typedefs
17.Lexical Scope & Stateful Closures
18.Synchronous Generators: sync* and yield
19.Lists: Fixed-Length, Growable & Index Operations
20.Sets: Unique Values & Set Theory Algebra
21.Maps: Key-Value Dictionaries & Lookups
22.Collection-if, Collection-for & Spread Operators
23.Iterables & Higher-Order Methods: map, where, fold
24.Generics: Type Parameters, Bounds & Methods
25.Classes & Objects: Members, Instance Methods & this
26.Constructors: Initializing Formals & Initializer Lists
27.Named, Redirecting & Factory Constructors
28.Const Constructors & Canonical Instance Caching
29.Getters, Setters & Private Fields (_)
30.Inheritance, Method Overriding (@override) & super
31.Abstract Classes & Method Contracts
32.Implicit Interfaces & the implements Keyword
33.Mixins: Multi-Source Composition with with & on
34.Extension Methods: Extending External APIs
35.Extension Types: Zero-Cost Inline Wrappers in Dart 3.3
36.Enhanced Enums with Fields, Methods & Patterns
37.Records: Anonymous Composite Tuples in Dart 3
38.Class Modifiers: sealed, final, base & interface
39.Sound Null Safety: Core Architecture
40.Nullable Types (Type?) & Non-Nullable Invariants
41.Null-Aware Operators: ?., ??, ??=, ?.. & ?[]
42.Null Assertion Operator (!) & Safe Invariants
43.The late Keyword: Lazy Initialization & Late Final
44.Type Promotion & Flow Analysis
45.Event Loop & Microtask Queue Architecture
46.Futures, async & await: Asynchronous Foundations
47.Future Combinators: wait, any, delayed & timeout
48.Streams: Asynchronous Data Flows & StreamControllers
49.Stream Transformers & Asynchronous Generators (async*)
50.Isolates: Multi-Core Concurrency & Isolate.run()
51.Packages & pubspec.yaml: Dependency Management
52.Libraries, Namespaces & Barrel Exports
53.Unit Testing with package:test & Matchers
54.Async Testing, Stream Tests & Fixtures
55.Effective Dart Guidelines & Linter Optimization
56.Comprehensive Dart Exercises & Algorithm Challenges
57.& Flutter Architecture Assessment & Knowledge Check
58.Capstone Project: Reactive State Machine & Stream Event Hub
59.Mastery Certification & Verified Graduate Credential
Course Certificate0%

Complete all lessons to earn

LearnNamed, Redirecting & Factory Constructors
27 / 59 0%
Lesson 27 of 59
5 mins read

Named, Redirecting & Factory Constructors

PreviousNext Lesson
In Plain English

Dart supports multiple constructor variations: **Named Constructors** (`User.fromJson()`, `Point.origin()`) provide clear semantic instantiation pathways; **Redirecting Constructors** (`Point.origin() : this(0, 0);`) delegate to another constructor; and **Factory Constructors** (`factory User.cached()`) return existing cached instances or subtypes without allocating a new object.

The Mental Model

"A named constructor is like having different specialized entrances to a stadium: the VIP Entrance, Media Gate, and General Admission all lead inside, but each prepares you differently."

Deep Dive: How It Works

Named Constructors: Allows a class to have multiple distinct constructors with descriptive names (e.g. `DateTime.now()`, `DateTime.utc()`).

Redirecting Constructors: Forwards calls to another constructor in the same class using `: this(...)`.

Factory Constructors (`factory`): Does not necessarily create a new instance; can return cached singletons, instantiate child subclasses, or parse JSON payloads.

Syntax Blueprint

class Point {
  final double x, y;
  Point(this.x, this.y);
  // Named constructor
  Point.origin() : this(0, 0); // Redirecting
  // Factory constructor
  factory Point.fromJson(Map<String, double> json) {
    return Point(json["x"] ?? 0, json["y"] ?? 0);
  }
}

Named, redirecting, and factory constructor patterns.

PointCore Rules to Remember

Point star
Named Clarity: Descriptive constructor names eliminate ambiguous parameter overloading.
Point star
Redirecting Forwarding: Consolidates initialization logic in a single primary generative constructor.
Point star
Factory Flexibility: Enables singleton caching, subtype polymorphism, and parsed instantiation.

Common Beginner Traps & How to Fix Them

Mistake:Trying to access `this` inside a `factory` constructor body before returning an instance.

Why it happens: A factory constructor has no `this` receiver until it explicitly returns an object.

How to fix: Construct and return the instance: `return MyClass._internal();`.

Pro Tip: Use `factory` constructors for singleton service managers and parsing JSON DTO models.

Live Interactive Example

Hit Run Code to see it live
Named and Factory Constructors in Action
Python 3.12
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Output Console
Click "Run Code" to view the rendered output.
How it works: Instantiated server configurations via redirecting named constructor and factory parser.

Your Turn: Micro Challenge

No pressure! Edit the starter code below and test your solution with instant feedback.

Micro Exercise

Create Point with Named Origin Constructor

  • PointCreate class `Point` with `final int x, y; Point(this.x, this.y);`.
  • PointAdd redirecting constructor `Point.origin() : this(0, 0);`.
  • PointIn `main()`, instantiate `final p = Point.origin();` and print `Point: (${p.x}, ${p.y})`.
1
2
Sandbox Output
Click "Run & Check" to test your solution.

Finished reading and practicing?

Mark this lesson as completed to update your course progress.

PreviousNext Lesson
Overview100 SheetLearnCertificates