Flutter uses the Dart programming language.
Pragma class is a hint to tools.
Tools that work with Dart programs may accept hints to guide their behavior as pragma annotations on declarations. Each tool decides which hints it accepts, what they mean, and whether and how they apply to sub-parts of the annotated entity.
Tools that recognize pragma hints should pick a pragma prefix to identify the tool. They should recognize any hint with a name starting with their prefix followed by : as if it was intended for that tool. A hint with a prefix for another tool should be ignored (unless compatibility with that other tool is a goal).
A tool may recognize unprefixed names as well, if they would recognize that name with their own prefix in front.
If the hint can be parameterized, an extra options object can be added as well.
For example:
@pragma('Tool:pragma-name', [param1, param2, ...])
class Foo { }
@pragma('OtherTool:other-pragma')
void foo() { }
Here class Foo is annotated with a Tool specific pragma 'pragma-name'
and function foo is annotated with a pragma 'other-pragma' specific to
OtherTool.
The above can be found on dart.dev documentation.
The @pragma('vm:entry-point') annotation here. Its core logic is
Tree-Shaking. In AOT (Ahead of Time) compilation, if it cannot be
called by the Main entry of the application, it will be discarded as
useless code. The injection logic of the AOP code is non-invasive, so
obviously it will not be called by the Main entry. Therefore, this
annotation is required to tell the compiler not to discard this logic.