flutter_form_draft 0.2.0
flutter_form_draft: ^0.2.0 copied to clipboard
Automatic form draft saving, encrypted persistence, restoration, versioning, expiration, and lifecycle recovery for Flutter applications.
import 'package:flutter/material.dart';
import 'examples/advanced_fields_example.dart';
import 'examples/basic_form_example.dart';
import 'examples/draft_management_example.dart';
import 'examples/encrypted_form_example.dart';
import 'examples/multiple_drafts_example.dart';
import 'examples/registration_form_example.dart';
void main() {
runApp(const FormDraftExampleApp());
}
/// Example application demonstrating flutter_form_draft features.
class FormDraftExampleApp extends StatelessWidget {
/// Creates the example app.
const FormDraftExampleApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'flutter_form_draft',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.indigo),
useMaterial3: true,
),
home: const ExampleHomePage(),
);
}
}
/// Home screen listing available examples.
class ExampleHomePage extends StatelessWidget {
/// Creates the home page.
const ExampleHomePage({super.key});
@override
Widget build(BuildContext context) {
final examples = [
_ExampleEntry(
title: 'Basic Contact Form',
subtitle: 'Auto-save, restore dialog, save indicator',
builder: (_) => const BasicFormExample(),
),
_ExampleEntry(
title: 'Registration Form',
subtitle: 'Excluded password fields',
builder: (_) => const RegistrationFormExample(),
),
_ExampleEntry(
title: 'Multiple Drafts',
subtitle: 'Separate drafts for the same form',
builder: (_) => const MultipleDraftsExample(),
),
_ExampleEntry(
title: 'Encrypted Draft',
subtitle: 'AES-GCM encryption and excluded sensitive fields',
builder: (_) => const EncryptedFormExample(),
),
_ExampleEntry(
title: 'Advanced Fields',
subtitle: 'Enum, map, list, date, model, and file references',
builder: (_) => const AdvancedFieldsExample(),
),
_ExampleEntry(
title: 'Draft Management',
subtitle: 'Search, filter, rename, duplicate, and delete drafts',
builder: (_) => const DraftManagementExample(),
),
];
return Scaffold(
appBar: AppBar(title: const Text('flutter_form_draft examples')),
body: ListView.separated(
padding: const EdgeInsets.all(16),
itemCount: examples.length,
separatorBuilder: (_, __) => const SizedBox(height: 12),
itemBuilder: (context, index) {
final example = examples[index];
return Card(
child: ListTile(
title: Text(example.title),
subtitle: Text(example.subtitle),
trailing: const Icon(Icons.chevron_right),
onTap: () {
Navigator.of(context).push(
MaterialPageRoute<void>(
builder: example.builder,
),
);
},
),
);
},
),
);
}
}
class _ExampleEntry {
const _ExampleEntry({
required this.title,
required this.subtitle,
required this.builder,
});
final String title;
final String subtitle;
final WidgetBuilder builder;
}