flutter_degen

Last updated:

0 purchases

flutter_degen Image
flutter_degen Images
Add to Cart

Description:

flutter degen

Generates reusable chunks of serializable properties that can be assigned to containing classes.
Here are a couple of scenarios where this might be useful:

A collection of subclasses that share a large number of properties, like FormField widgets, where you want to pass
these properties to the constructor, but don't want to have to write all the boilerplate code;
A typed routing system, where the route's arguments are also parameters to the widget that's eventually built from them.

Start with the base class #
import 'package:flutter_degen_annotations/flutter_degen_annotations.dart';


/// Doesn't have to be abstract
abstract class PersonPageParams {
final String personId;
final Person person;
final bool showHistory;

PersonPageParams({
@required this.personId,
this.person,
this.showHistory = false});
}
copied to clipboard
Create a "subclass" #
In the target class, you need to:

Add part '{file_name}.g.dart'
Create a @delegate property
Apply a mixin using the naming convention _{baseClassName}Mixin


part 'person_route_args.g.dart';

/// Route arguments
class PersonRouteArgs extends RouteArgs with _PersonPageParamsMixin {

/// Here is the delegate property
@delegate(implementDelegate=true)
final PersonPageParams _params;

/// This example has another property, for illustration purposes
@override
final uriTemplate = "/person/{personId}";

/// The primary constructor. This constructor requires an instance of PersonPageParams.
PersonRouteArgs(this._params);

/// A flattened constructor. The args from PersonPageParams will be flattened. See the `fromUri`
/// constructor below
PersonRouteArgs.of(@flatten() this._params);


/// For illustration purposes, a factory constructor could exist
factory PersonRouteArgs.fromUri(args) {
return PersonRouteArgs.of(personId: args["personId"]);
}
}
copied to clipboard
Now we can create another subclass #
This time we'll create a widget that takes in the same arguments
/// Person widget
class PersonPage extends StatefulWidget with _PersonPageParamsMixin {

@delegate(implementDelegate=true)
final PersonPageParams _params;

PersonPage.ofArgs(this._params, {Key key}): super(key: key);

/// This will flatten out delegate's constructor
PersonPage(@flatten() this._params, {Key key}): super(key: key);

...
}
copied to clipboard
Run the generator #
# flutter pub run build_runner build
copied to clipboard

License:

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files In This Product:

Customer Reviews

There are no reviews.