AI Skill StudioAI Skill Studio
Skills
Presets:

Target Standard & File Format

AI Agent Rules & Skills
Context Shields & Privacy (Ignore Files)
Integrations & Machine Documentation
AI Governance & Multi-Agent Planning Suite

Cursor Rule Scope

.cursor/rules/*.mdc

Scopes rule to matching files. Use **/* for global workspace scope.

When ON, Cursor injects this rule in every generation context.

Identity & Activation Rules

3 chips
Scoped domain keywords evaluated in real time
api-routescode-auditsrefactoring
Suggested Chips:

Technology Stack Context

Engineering Philosophy

Flexible & Adaptable

Architectural & Code Quality Conventions

Less rigid & configurable

Agent Behavioral Guardrails

Select active rules
Security & Trust Boundaries
Always included
  • Untrusted Content Is Data
  • Encoded Payloads
  • Least-Privilege File Access
  • Confirm Irreversible Actions
  • Secret Handling
  • Validation Failures
  • Conflicting Requests

Step-by-Step Workflow Procedures

Flutter & Riverpod Cursor Rules (.mdc) | Modern Dart 3 Mobile Generator

Generate Flutter 3 and Riverpod Cursor rules enforcing sound null safety, pattern matching, immutable widgets, and clean reactive state. Flutter 3 and Dart 3 introduce records, pattern matching, sealed classes, and Riverpod 2 code generation (@riverpod). AI models routinely emit obsolete setState() spaghetti, mutable widget state, un-const constructors, and legacy Riverpod syntax.

Target Path
.cursor/rules/flutter.mdc
Execution Scope
Glob pattern match
Specification Format
Frontmatter MDC (.mdc)
AI Tool Support
Cursor
02 / WHY IT HELPS

What this file changes for Flutter 3 & Riverpod / Dart

Without it

Flutter 3 and Dart 3 introduce records, pattern matching, sealed classes, and Riverpod 2 code generation (@riverpod). AI models routinely emit obsolete setState() spaghetti, mutable widget state, un-const constructors, and legacy Riverpod syntax.

What the file tells the agent
Always add const constructors wherever possible to maximize Flutter element rebuild caching.
Use Riverpod 2 with code generation (@riverpod / NotifierProvider) or BLoC; ban raw mutable setState() in business logic.
Leverage Dart 3 pattern matching and sealed classes for exhaustive state and error representation.
Enforce sound null safety: avoid force-unwrapping with ! unless proven non-null by a preceding guard clause.
Separate presentation UI widgets from asynchronous repository and API service layers.
03 / CODE PATTERNS

Flutter 3 & Riverpod / Dart: code to avoid and code to write instead

Avoid
// Discouraged: Mutable setState with force-unwrap and missing const
class BadProfile extends StatefulWidget {
  @override
  _BadProfileState createState() => _BadProfileState();
}
class _BadProfileState extends State<BadProfile> {
  var user;
  void load() async {
    user = await fetchUser();
    setState(() {});
  }
  @override
  Widget build(BuildContext context) {
    return Container(child: Text(user!.name)); // Runtime crash if null!
  }
}
Write instead
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

@immutable
sealed class ViewState<T> {
  const ViewState();
}
class Loading<T> extends ViewState<T> { const Loading(); }
class Success<T> extends ViewState<T> { final T data; const Success(this.data); }
class Failure<T> extends ViewState<T> { final String message; const Failure(this.message); }

class ProfileView extends ConsumerWidget {
  const ProfileView({super.key});

  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final state = ref.watch(profileProvider);
    return Scaffold(
      appBar: AppBar(title: const Text('Profile')),
      body: switch (state) {
        Loading() => const Center(child: CircularProgressIndicator.adaptive()),
        Success(:final data) => Center(child: Text('Welcome, ${data.name}')),
        Failure(:final message) => Center(child: Text('Error: $message')),
      },
    );
  }
}
04 / REPOSITORY PLACEMENT & 3-STEP TERMINAL INSTALLATION

How to Install Flutter 3 & Riverpod / Dart Cursor Rules (.mdc) via Terminal

1

Step 1: Open Project Directory & Verify Target Placement

Open your terminal and navigate to your project root folder where the .cursor/rules/flutter.mdc file will reside. Ensure the file is placed at the exact path below relative to your project root so the AI engine automatically loads it:

.cursor/rules/flutter.mdc
2

Step 2: Fetch Rule File via Terminal Command

Run curl, PowerShell, or wget to stream the rule directly from the DevScratchpad raw API endpoint and write it to .cursor/rules/flutter.mdc:

Terminal One-Liner Install

Run directly in your project root to stream and write this rule file with one command.

Raw API Stream
$mkdir -p ".cursor/rules" && curl -fsSL "https://www.devscratchpad.tech/api/raw/cursor-rules/flutter-dart" -o ".cursor/rules/flutter.mdc"
3

Step 3: Check that Cursor uses it

Cursor picks up rules in .cursor/rules/ automatically. This one attaches when files matching its globs are in the request, or when you @-mention it.

05 / ROUTE DIRECTORY & CROSS-TOOLING
Format Pillar Hub

Cursor rules generator: .cursor/rules/*.mdc for your stack

Cursor Rules (.mdc): how it works, where the file goes, and every Cursor Rules preset.

/cursor-rules Directory
06 / RELATED DEVELOPER TOOLS

Tools for Flutter 3 & Riverpod / Dart work

Browser-based utilities to test, format and inspect the code your AI tool writes. Nothing you paste is uploaded.

View all 28 tools

Live Repository & Schema Ingestion

Inspect any public or private GitHub repository, or paste SQL DDL and Prisma models directly in AI Skill Studio to auto-generate authentic rules. Zero server transmission.

Launch AI Skill Studio

Migrating from Legacy .cursorrules or CLAUDE.md?

Use the free, in-browser converter to turn one long rules file into Cursor .mdc, Claude SKILL.md or Windsurf rules.

Convert Rules Free
07 / FREQUENTLY ASKED QUESTIONS

Technical FAQ: Flutter 3 & Riverpod / Dart AI Rulebooks

Does this rulebook support Riverpod 2 and BLoC?

Yes, it provides architecture rules for both modern code-generated Riverpod and idiomatic BLoC/Cubit event streams.

Why does it require const constructors?

In Flutter, const widgets short-circuit the rebuild tree, providing substantial UI frame-rate gains especially on mobile devices.