Skip to content

Add 'Primary constructor' to glossary#13033

Open
sfshaza2 wants to merge 1 commit intomainfrom
glossary-primary-constructor
Open

Add 'Primary constructor' to glossary#13033
sfshaza2 wants to merge 1 commit intomainfrom
glossary-primary-constructor

Conversation

@sfshaza2
Copy link
Contributor

@sfshaza2 sfshaza2 commented Feb 4, 2026

Adds a definition for 'Primary constructor' to the glossary, focusing on its usage in Dart extension types.

@sfshaza2 sfshaza2 requested a review from a team as a code owner February 4, 2026 22:18
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @sfshaza2, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request enhances the project's documentation by introducing a new glossary term. The addition aims to clarify the concept of "Primary constructor," specifically highlighting its application within Dart's extension types, thereby improving the comprehensibility of related technical documentation.

Highlights

  • Glossary Enhancement: A new entry for "Primary constructor" has been added to the glossary.yml file, providing a detailed definition, short description, relevant links, and categorizing labels.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • src/data/glossary.yml
    • Added a new term 'Primary constructor' including its short and long descriptions, related external links to Dart documentation, and 'dart' and 'language' labels.
Activity
  • No specific review activity or comments have been recorded for this pull request yet.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@sfshaza2 sfshaza2 requested review from conooi and mit-mit February 4, 2026 22:19
Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request adds a definition for 'Primary constructor' to the glossary. The definition is good, but it's slightly outdated as it only mentions extension types. I've suggested an update to include primary constructors for classes, which were introduced in Dart 3.4, and to add a relevant documentation link.

Comment on lines +297 to +309
long_description: |-
A _primary constructor_ is a concise way to declare a constructor
directly in the type declaration.

Currently, this feature is only available for [extension types][].
It allows you to define the underlying representation object
and bind it to a field in one step.

[extension types]: https://dart.dev/language/extension-types
related_links:
- text: "Extension types constructors"
link: "https://dart.dev/language/extension-types#constructors"
type: "external"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The description for primary constructors is slightly outdated. Since Dart 3.4, primary constructors are also available for classes, not just extension types.

I'd suggest updating the description to include classes and adding a link to the relevant documentation for class-based primary constructors to make the glossary entry more accurate and complete.

  long_description: |-
    A _primary constructor_ is a concise way to declare a constructor
    directly in the type declaration.

    Primary constructors can be used with [classes][] and [extension types][].
    For classes, they allow you to define fields and initialize them from
    constructor parameters in one step. For extension types, they allow you
    to define the underlying representation object and bind it to a field.

    [classes]: https://dart.dev/language/constructors#primary-constructors
    [extension types]: https://dart.dev/language/extension-types
  related_links:
    - text: "Primary constructors for classes"
      link: "https://dart.dev/language/constructors#primary-constructors"
      type: "external"
    - text: "Extension types constructors"
      link: "https://dart.dev/language/extension-types#constructors"
      type: "external"

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

'Dart 3.4' is not accurate, the new, generalized primary constructors feature hasn't yet been released, but it's being implemented and will definitely be released.

@flutter-website-bot
Copy link
Collaborator

Visit the preview URL for this PR (updated for commit 885f2ef):

https://flutter-docs-prod--pr13033-glossary-primary-constructo-qinhfcxj.web.app

@conooi conooi requested a review from kallentu February 5, 2026 22:42
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eernstg to review as well.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the heads up!

I'll assume that this glossary entry should describe the primary constructors feature which is about to be released—it doesn't seem particularly useful to have one description of the concept for some weeks, and then updating it substantially to cover the much more general notion of primary constructors that we're about to release.

A _primary constructor_ is a concise way to declare a constructor
directly in the type declaration.

Currently, this feature is only available for [extension types][].
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is inaccurate -- primary constructors can be used for classes, extension types, and enums as well.

Copy link

@eernstg eernstg left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added a few comments.

Perhaps we should postpone landing this PR until the new primary constructors feature has been released?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the heads up!

I'll assume that this glossary entry should describe the primary constructors feature which is about to be released—it doesn't seem particularly useful to have one description of the concept for some weeks, and then updating it substantially to cover the much more general notion of primary constructors that we're about to release.


- term: "Primary constructor"
short_description: |-
A constructor declared as part of the type declaration.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The phrase 'type declaration' is rather vague. It's often used to designate a type annotation (as in "the variable has a type declaration" when talking about declarations like String s = '';), as well as the meaning which is intended here. It would be nice if we could use a phrase which is more precisely denoting a class declaration, a mixin class declaration, an enum declaration, or an extension type declaration.

Next, a class declaration starts at a keyword (often class, but we can also have final class, sealed class, and the like), and it ends at the final } of the class body (or, with the upcoming enhancements, a semicolon which is the entire class body on its own). This implies that every member declaration is also part of "the type declaration". The new thing is that the primary constructor is part of the header of the class declaration, it's not in the body.

Similarly for mixin class declarations etc.

Perhaps this would work:

Suggested change
A constructor declared as part of the type declaration.
A constructor declared in the header of a class or a similar type declaration.

A constructor declared as part of the type declaration.
long_description: |-
A _primary constructor_ is a concise way to declare a constructor
directly in the type declaration.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
directly in the type declaration.
directly in the header of a class, mixin class, enum, or extension type declaration.

Comment on lines +302 to +303
It allows you to define the underlying representation object
and bind it to a field in one step.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's really great that this glossary entry is so short. It should allow developers to get to know about the concept of a primary constructor. There would be other pages about all the details.

So how do we communicate that the primary constructors of class, mixin class, and enum declarations have a large number of properties in common, and the primary constructors of extension types are different in several ways?

Here is one attempt at saying very little, but still enough to give the reader a relevant hint:

Suggested change
It allows you to define the underlying representation object
and bind it to a field in one step.
A primary constructor in a class, mixin class, or enum declaration is a concise
way to specify a constructor and a number of instance variables in a single
constructor declaration in the header.
A primary constructor in an extension type declaration allows you to define the
underlying representation variable and its type.

We can't even really say "in a single declaration" when it comes to extension types, because they don't support declaring the representation variable using a regular instance variable declaration in the first place. There is simply no other way to declare the representation variable (name and type) of an extension type than having a primary constructor.

Comment on lines +297 to +309
long_description: |-
A _primary constructor_ is a concise way to declare a constructor
directly in the type declaration.

Currently, this feature is only available for [extension types][].
It allows you to define the underlying representation object
and bind it to a field in one step.

[extension types]: https://dart.dev/language/extension-types
related_links:
- text: "Extension types constructors"
link: "https://dart.dev/language/extension-types#constructors"
type: "external"
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

'Dart 3.4' is not accurate, the new, generalized primary constructors feature hasn't yet been released, but it's being implemented and will definitely be released.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants