dynamic_pages 0.1.0
dynamic_pages: ^0.1.0 copied to clipboard
Schema-driven, type-safe generated Flutter pages for Dart models.
example/lib/main.dart
import 'package:dynamic_pages/dynamic_pages.dart';
import 'package:flutter/material.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'main.freezed.dart';
part 'main.g.dart';
void main() => runApp(const ExampleApp());
class ExampleApp extends StatelessWidget {
const ExampleApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'dynamic_pages example',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.indigo),
extensions: const [
DynamicPageThemeData(
contentMaxWidth: 640,
contentPadding: EdgeInsets.all(24),
fieldSpacing: 18,
),
],
),
home: UserFormPage(
onSubmit: (value) async {
debugPrint('Submitted ${value.name} as ${value.role.name}');
},
),
);
}
}
enum Role { admin, member }
@freezed
@GenerateFormPage(title: 'Create user', submitLabel: 'Save')
abstract class UserForm with _$UserForm {
const factory UserForm({
@FormTextField(label: 'Name', required: true, minLength: 2)
required String name,
@FormEmailField(label: 'Email', required: true) required String email,
@FormDateField(label: 'Birth date') DateTime? birthDate,
@FormDropdownField(label: 'Role', source: Role.values) required Role role,
@FormCheckboxField(label: 'Receive product updates')
@Default(false)
bool receiveUpdates,
}) = _UserForm;
}