Validated Flutter forms with field-level error handling and submission workflows.
Works with
Requires StatefulWidget hosting with a persistent GlobalKey<FormState> to manage form state and validation across rebuilds
Use TextFormField widgets with validator() callbacks that return error strings on failure or null on success
Call _formKey.currentState!.validate() on submit to trigger all validators and automatically display error messages below fields
Includes complete code example demons
AI-first code editor with Composer
Before installing skills in Cursor, ensure your development environment meets these requirements:
node --versionflutter-building-formsExecute the skills CLI command in your project's root directory to begin installation:
Fetches flutter-building-forms from flutter/skills and configures it for Cursor.
The CLI shows a list of agents. Use arrow keys and space to select Cursor:
Confirm successful installation by checking the skill directory location:
Restart Cursor to activate flutter-building-forms. Access via /flutter-building-forms in your agent's command palette.
We perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use.
Skills execute code in your environment. Always review source, verify the publisher, and test in isolation before production.
Submit your Claude Code skill and start earning
Automate repetitive workflows and reduce manual effort
Example
Generate reports, summarize documents, draft communications
Save 3-5 hours per week on routine tasks
Learn new skills, understand complex topics, get expert guidance
Example
Explain concepts, provide examples, suggest learning resources
Accelerate learning and skill development by 2x
Enhance output quality through reviews, suggestions, and refinements
Example
Review drafts, suggest improvements, catch errors
Improve work quality by 30-40% with less effort
0
total installs
0
this week
961
GitHub stars
0
upvotes
Run in your terminal
0
installs
0
this week
961
stars
Implement forms using a Form widget to group and validate multiple input fields together.
Form inside a StatefulWidget.GlobalKey<FormState> exactly once as a final variable within the State class. Do not generate a new GlobalKey inside the build method; doing so is resource-expensive and destroys the form's state on every rebuild.GlobalKey<FormState> to the key property of the Form widget. This uniquely identifies the form and provides access to the FormState for validation and submission.Form.of(context) to access the FormState from a descendant widget.Use TextFormField to render Material Design text inputs with built-in validation support. TextFormField is a convenience widget that automatically wraps a standard TextField inside a FormField.
validator() callback function to each TextFormField.String containing the specific error message. The Form will automatically rebuild to display this text below the field.null.Follow this sequential workflow to implement and validate a form. Copy the checklist to track your progress.
Task Progress:
StatefulWidget and its corresponding State class.final _formKey = GlobalKey<FormState>(); in the State class.Form widget in the build method and assign key: _formKey.TextFormField widgets as descendants of the Form.validator function for each TextFormField (return String on error, null on success).ElevatedButton).onPressed callback using _formKey.currentState!.validate().When the user triggers the submit action, execute the following conditional logic:
_formKey.currentState!.validate().true (Valid): All validators returned null. Proceed with form submission (e.g., save data, make API call) and display a success indicator (e.g., a SnackBar).false (Invalid): One or more validators returned an error string. The FormState automatically rebuilds the UI to display the error messages.validate() returns true.Use the following pattern to implement a robust, validated form.
import 'package:flutter/material.dart';
class UserRegistrationForm extends StatefulWidget {
const UserRegistrationForm({super.key});
State<UserRegistrationForm> createState() => _UserRegistrationFormState();
}
class _UserRegistrationFormState extends State<UserRegistrationForm> {
// 1. Persist the GlobalKey in the State class
final _formKey = GlobalKey<FormState>();
Widget build(BuildContext context) {
// 2. Bind the key to the Form
return Form(
key: _formKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// 3. Add TextFormFields with validators
TextFormField(
decoration: const InputDecoration(
labelText: 'Username',
hintText: 'Enter your username',
),
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter a username'; // Error state
}
if (value.length < 4) {
return 'Username must be at least 4 characters'; // Error state
}
return null; // Valid state
},
),
const SizedBox(height: 16),
// 4. Add the submit button
ElevatedButton(
onPressed: () {
// 5. Trigger validation logic
if (_formKey.currentState!.validate()) {
// Form is valid: Process data
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Processing Data')),
);
} else {
// Form is invalid: Errors are automatically displayed
debugPrint('Form validation failed.');
}
},
child: const Text('Submit'),
),
],
),
);
}
}
Prerequisites
Time Estimate
15-45 minutes depending on use case complexity
Steps
Common Pitfalls
✓ Do
✗ Don't
💡 Pro Tips
✓ Use when
Use when skill capabilities match your task, clear ROI on time saved, and you can validate outputs. Best for repetitive tasks, learning, and quality improvement.
✗ Avoid when
Avoid when task requires deep expertise you can't validate, involves sensitive decisions, or when learning process is more valuable than speed of completion.
ajianaz/skills-collection
anthropics/claude-code
mblode/agent-skills
github/awesome-copilot
leonxlnx/taste-skill
sickn33/antigravity-awesome-skills
flutter-building-forms fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
Useful defaults in flutter-building-forms — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
We added flutter-building-forms from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
flutter-building-forms has been reliable in day-to-day use. Documentation quality is above average for community skills.
Registry listing for flutter-building-forms matched our evaluation — installs cleanly and behaves as described in the markdown.
Useful defaults in flutter-building-forms — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
We added flutter-building-forms from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
Useful defaults in flutter-building-forms — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
Registry listing for flutter-building-forms matched our evaluation — installs cleanly and behaves as described in the markdown.
flutter-building-forms reduced setup friction for our internal harness; good balance of opinion and flexibility.
showing 1-10 of 36