No,Category,Guideline,Description,Do,Don't,Code Good,Code Bad,Severity,Docs URL
1,Widgets,Use StatelessWidget when possible,Immutable widgets are simpler,StatelessWidget for static UI,StatefulWidget for everything,class MyWidget extends StatelessWidget,class MyWidget extends StatefulWidget (static),Medium,https://api.flutter.dev/flutter/widgets/StatelessWidget-class.html
2,Widgets,Keep widgets small,Single responsibility principle,Extract widgets into smaller pieces,Large build methods,Column(children: [Header() Content()]),500+ line build method,Medium,
3,Widgets,Use const constructors,Compile-time constants for performance,const MyWidget() when possible,Non-const for static widgets,const Text('Hello'),Text('Hello') for literals,High,https://dart.dev/guides/language/language-tour#constant-constructors
4,Widgets,Prefer composition over inheritance,Combine widgets using children,Compose widgets,Extend widget classes,Container(child: MyContent()),class MyContainer extends Container,Medium,
5,State,Use setState correctly,Minimal state in StatefulWidget,setState for UI state changes,setState for business logic,setState(() { _counter++; }),Complex logic in setState,Medium,https://api.flutter.dev/flutter/widgets/State/setState.html
6,State,Avoid setState in build,Never call setState during build,setState in callbacks only,setState in build method,onPressed: () => setState(() {}),build() { setState(); },High,
7,State,Use state management for complex apps,Provider Riverpod BLoC,State management for shared state,setState for global state,Provider.of<MyState>(context),Global setState calls,Medium,
8,State,Prefer Riverpod or Provider,Recommended state solutions,Riverpod for new projects,InheritedWidget manually,ref.watch(myProvider),Custom InheritedWidget,Medium,https://riverpod.dev/
9,State,Dispose resources,Clean up controllers and subscriptions,dispose() for cleanup,Memory leaks from subscriptions,@override void dispose() { controller.dispose(); },No dispose implementation,High,
10,Layout,Use Column and Row,Basic layout widgets,Column Row for linear layouts,Stack for simple layouts,"Column(children: [Text(), Button()])",Stack for vertical list,Medium,https://api.flutter.dev/flutter/widgets/Column-class.html
11,Layout,Use Expanded and Flexible,Control flex behavior,Expanded to fill space,Fixed sizes in flex containers,Expanded(child: Container()),Container(width: 200) in Row,Medium,
12,Layout,Use SizedBox for spacing,Consistent spacing,SizedBox for gaps,Container for spacing only,SizedBox(height: 16),Container(height: 16),Low,
13,Layout,Use LayoutBuilder for responsive,Respond to constraints,LayoutBuilder for adaptive layouts,Fixed sizes for responsive,LayoutBuilder(builder: (context constraints) {}),Container(width: 375),Medium,https://api.flutter.dev/flutter/widgets/LayoutBuilder-class.html
14,Layout,Avoid deep nesting,Keep widget tree shallow,Extract deeply nested widgets,10+ levels of nesting,Extract widget to method or class,Column(Row(Column(Row(...)))),Medium,
15,Lists,Use ListView.builder,Lazy list building,ListView.builder for long lists,ListView with children for large lists,"ListView.builder(itemCount: 100, itemBuilder: ...)",ListView(children: items.map(...).toList()),High,https://api.flutter.dev/flutter/widgets/ListView-class.html
16,Lists,Provide itemExtent when known,Skip measurement,itemExtent for fixed height items,No itemExtent for uniform lists,ListView.builder(itemExtent: 50),ListView.builder without itemExtent,Medium,
17,Lists,Use keys for stateful items,Preserve widget state,Key for stateful list items,No key for dynamic lists,ListTile(key: ValueKey(item.id)),ListTile without key,High,
18,Lists,Use SliverList for custom scroll,Custom scroll effects,CustomScrollView with Slivers,Nested ListViews,CustomScrollView(slivers: [SliverList()]),ListView inside ListView,Medium,https://api.flutter.dev/flutter/widgets/SliverList-class.html
19,Navigation,Use Navigator 2.0 or GoRouter,Declarative routing,go_router for navigation,Navigator.push for complex apps,GoRouter(routes: [...]),Navigator.push everywhere,Medium,https://pub.dev/packages/go_router
20,Navigation,Use named routes,Organized navigation,Named routes for clarity,Anonymous routes,Navigator.pushNamed(context '/home'),Navigator.push(context MaterialPageRoute()),Low,
21,Navigation,Handle back button (PopScope),Android back behavior and predictive back (Android 14+),Use PopScope widget (WillPopScope is deprecated),Use WillPopScope,"PopScope(canPop: false, onPopInvoked: (didPop) => ...)",WillPopScope(onWillPop: ...),High,https://api.flutter.dev/flutter/widgets/PopScope-class.html
22,Navigation,Pass typed arguments,Type-safe route arguments,Typed route arguments,Dynamic arguments,MyRoute(id: '123'),arguments: {'id': '123'},Medium,
23,Async,Use FutureBuilder,Async UI building,FutureBuilder for async data,setState for async,FutureBuilder(future: fetchData()),fetchData().then((d) => setState()),Medium,https://api.flutter.dev/flutter/widgets/FutureBuilder-class.html
24,Async,Use StreamBuilder,Stream UI building,StreamBuilder for streams,Manual stream subscription,StreamBuilder(stream: myStream),stream.listen in initState,Medium,https://api.flutter.dev/flutter/widgets/StreamBuilder-class.html
25,Async,Handle loading and error states,Complete async UI states,ConnectionState checks,Only success state,if (snapshot.connectionState == ConnectionState.waiting),No loading indicator,High,
26,Async,Cancel subscriptions,Clean up stream subscriptions,Cancel in dispose,Memory leaks,subscription.cancel() in dispose,No subscription cleanup,High,
27,Theming,Use ThemeData,Consistent theming,ThemeData for app theme,Hardcoded colors,Theme.of(context).primaryColor,Color(0xFF123456) everywhere,Medium,https://api.flutter.dev/flutter/material/ThemeData-class.html
28,Theming,Use ColorScheme,Material 3 color system,ColorScheme for colors,Individual color properties,colorScheme: ColorScheme.fromSeed(),primaryColor: Colors.blue,Medium,
29,Theming,Access theme via context,Dynamic theme access,Theme.of(context),Static theme reference,Theme.of(context).textTheme.bodyLarge,TextStyle(fontSize: 16),Medium,
30,Theming,Support dark mode,Respect system theme,darkTheme in MaterialApp,Light theme only,"MaterialApp(theme: light, darkTheme: dark)",MaterialApp(theme: light),Medium,
31,Animation,Use implicit animations,Simple animations,AnimatedContainer AnimatedOpacity,Explicit for simple transitions,AnimatedContainer(duration: Duration()),AnimationController for fade,Low,https://api.flutter.dev/flutter/widgets/AnimatedContainer-class.html
32,Animation,Use AnimationController for complex,Fine-grained control,AnimationController with Ticker,Implicit for complex sequences,AnimationController(vsync: this),AnimatedContainer for staggered,Medium,
33,Animation,Dispose AnimationControllers,Clean up animation resources,dispose() for controllers,Memory leaks,controller.dispose() in dispose,No controller disposal,High,
34,Animation,Use Hero for transitions,Shared element transitions,Hero for navigation animations,Manual shared element,Hero(tag: 'image' child: Image()),Custom shared element animation,Low,https://api.flutter.dev/flutter/widgets/Hero-class.html
35,Forms,Use Form widget,Form validation,Form with GlobalKey,Individual validation,Form(key: _formKey child: ...),TextField without Form,Medium,https://api.flutter.dev/flutter/widgets/Form-class.html
36,Forms,Use TextEditingController,Control text input,Controller for text fields,onChanged for all text,final controller = TextEditingController(),onChanged: (v) => setState(),Medium,
37,Forms,Validate on submit,Form validation flow,_formKey.currentState!.validate(),Skip validation,if (_formKey.currentState!.validate()),Submit without validation,High,
38,Forms,Dispose controllers,Clean up text controllers,dispose() for controllers,Memory leaks,controller.dispose() in dispose,No controller disposal,High,
39,Performance,Use const widgets,Reduce rebuilds,const for static widgets,No const for literals,const Icon(Icons.add),Icon(Icons.add),High,
40,Performance,Avoid rebuilding entire tree,Minimal rebuild scope,Isolate changing widgets,setState on parent,Consumer only around changing widget,setState on root widget,High,
41,Performance,Use RepaintBoundary,Isolate repaints,RepaintBoundary for animations,Full screen repaints,RepaintBoundary(child: AnimatedWidget()),Animation without boundary,Medium,https://api.flutter.dev/flutter/widgets/RepaintBoundary-class.html
42,Performance,Profile with DevTools,Measure before optimizing,Flutter DevTools profiling,Guess at performance,DevTools performance tab,Optimize without measuring,Medium,https://docs.flutter.dev/tools/devtools
43,Accessibility,Use Semantics widget,Screen reader support,Semantics for accessibility,Missing accessibility info,Semantics(label: 'Submit button'),GestureDetector without semantics,High,https://api.flutter.dev/flutter/widgets/Semantics-class.html
44,Accessibility,Support large fonts,MediaQuery text scaling,MediaQuery.textScaleFactor,Fixed font sizes,style: Theme.of(context).textTheme,TextStyle(fontSize: 14),High,
45,Accessibility,Test with screen readers,TalkBack and VoiceOver,Test accessibility regularly,Skip accessibility testing,Regular TalkBack testing,No screen reader testing,High,
46,Testing,Use widget tests,Test widget behavior,WidgetTester for UI tests,Unit tests only,testWidgets('...' (tester) async {}),Only test() for UI,Medium,https://docs.flutter.dev/testing
47,Testing,Use integration tests,Full app testing,integration_test package,Manual testing only,IntegrationTestWidgetsFlutterBinding,Manual E2E testing,Medium,
48,Testing,Mock dependencies,Isolate tests,Mockito or mocktail,Real dependencies in tests,when(mock.method()).thenReturn(),Real API calls in tests,Medium,
49,Platform,Use Platform checks,Platform-specific code,Platform.isIOS Platform.isAndroid,Same code for all platforms,if (Platform.isIOS) {},Hardcoded iOS behavior,Medium,
50,Platform,Use kIsWeb for web,Web platform detection,kIsWeb for web checks,Platform for web,if (kIsWeb) {},Platform.isWeb (doesn't exist),Medium,
51,Packages,Use pub.dev packages,Community packages,Popular maintained packages,Custom implementations,cached_network_image,Custom image cache,Medium,https://pub.dev/
52,Packages,Check package quality,Quality before adding,Pub points and popularity,Any package without review,100+ pub points,Unmaintained packages,Medium,
53,Dart 3.x,Use records for data tuples,Dart 3.0 records for immutable lightweight data,Use records for simple data grouping,Create full classes for simple tuples,"final (name, age) = ('John', 30); typedef User = (String name, int age);","class SimpleData { String a; int b; } // for tuples",Medium,https://dart.dev/language/records
54,Dart 3.x,Use sealed classes for state,Sealed classes enable exhaustive pattern matching,sealed class for finite state hierarchies,Open inheritance for known states,"sealed class Result {} class Success extends Result { final String data; } switch (result) { Success() => ... }","abstract class Result {} // not exhaustive",High,https://dart.dev/language/class-modifiers#sealed
55,Dart 3.x,Use switch expressions,Dart 3.0 pattern matching for concise logic,Switch expressions for conditional returns,Nested if-else chains,"final status = switch (code) { 200 => 'OK', 404 => 'Not Found', _ => 'Error' };","if (code == 200) return 'OK'; else if ...",Medium,https://dart.dev/language/patterns
56,State,Use Riverpod code generation,@riverpod annotation reduces boilerplate,@riverpod with build_runner for providers,Manual provider declarations in large apps,"@riverpod Future<User> user(UserRef ref) async { return await fetchUser(); }","final userProvider = FutureProvider((ref) => fetchUser());",High,https://riverpod.dev/docs/concepts/about_code_generation
57,State,Consider flutter_hooks,Hooks pattern for cleaner StatefulWidget logic,useAnimationController useTextEditingController,Repeated dispose boilerplate,"final controller = useTextEditingController(); final animation = useAnimationController(duration: Duration(seconds: 1));","late TextEditingController c; initState dispose",Medium,https://pub.dev/packages/flutter_hooks
58,Performance,Leverage Impeller renderer,New graphics engine for consistent 120fps,Impeller for modern iOS/Android (default 3.16+),Skia-only assumptions on new devices,"// Enabled by default in Flutter 3.16+ // Precompiled shaders eliminate jank","// Skia shader compilation jank on first run",High,https://docs.flutter.dev/perf/impeller
59,UI,Use Material 3 components,M3 design system with dynamic theming,useMaterial3: true with M3 widgets,Material 2 patterns in new projects,"MaterialApp(theme: ThemeData(useMaterial3: true, colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue)))","ThemeData(primarySwatch: Colors.blue) // M2",High,https://docs.flutter.dev/ui/design/material
60,UI,Use Slivers for scroll effects,CustomScrollView with Slivers for complex scrolling,SliverAppBar SliverList SliverGrid,Nested ListView or SingleChildScrollView,"CustomScrollView(slivers: [SliverAppBar.large(), SliverList.builder(itemBuilder: ...)])","ListView(children: [AppBar(), ListView()]) // nested",High,https://api.flutter.dev/flutter/widgets/CustomScrollView-class.html
61,Navigation,Use auto_route for complex apps,Type-safe code-generated routing,auto_route with @RoutePage annotations,Manual route management in large apps,"@RoutePage() class HomeScreen extends StatelessWidget {} // auto_route","Navigator.push(context, MaterialPageRoute(builder: ...)) everywhere",Medium,https://pub.dev/packages/auto_route
62,Navigation,Handle predictive back gesture,Android 14+ predictive back support,PopScope with onPopInvokedWithResult,Ignore predictive back on Android 14+,"PopScope(canPop: false, onPopInvokedWithResult: (didPop, result) { if (!didPop) handleBack(); })","WillPopScope(onWillPop: ...) // deprecated",High,https://developer.android.com/guide/navigation/custom-back/predictive-back-gesture
63,Platform,Optimize for Flutter Web,Web-specific patterns and lazy loading,kIsWeb checks and deferred imports,Assume mobile patterns work on web,"if (kIsWeb) { // web-specific } import 'heavy.dart' deferred as heavy;","// Same code for mobile and web without checks",Medium,https://docs.flutter.dev/platform-integration/web
64,Platform,Support desktop form factors,Keyboard shortcuts hover states scroll physics,Shortcuts Actions FocusNode for desktop,Touch-only patterns on desktop,"Shortcuts(shortcuts: {LogicalKeySet(LogicalKeyboardKey.escape): DismissIntent()}, child: Actions(...))","// No keyboard navigation support",Medium,https://docs.flutter.dev/platform-integration/desktop
65,Animation,Use flutter_animate package,Declarative animation composition,Chained animate methods for sequences,Complex AnimationController for simple sequences,"widget.animate().fadeIn(duration: 300.ms).slideX(begin: -0.1)","AnimationController + Tween + AnimatedBuilder // for fade+slide",Low,https://pub.dev/packages/flutter_animate
66,Testing,Use golden tests for visual regression,Pixel-perfect screenshot testing,matchesGoldenFile for critical UI,Skip visual regression testing,"await expectLater(find.byType(MyWidget), matchesGoldenFile('goldens/my_widget.png'));","// No visual testing",Medium,https://api.flutter.dev/flutter/flutter_test/matchesGoldenFile.html
67,Testing,Use patrol for integration tests,Better integration test framework,Patrol for native interaction testing,Basic integration_test only for complex apps,"await $.native.tap('Allow'); await $(#loginButton).tap();","// Cannot interact with native dialogs",Medium,https://pub.dev/packages/patrol
68,Architecture,Use feature-first folder structure,Organize by feature not layer,/features/auth/ /features/home/ structure,Layer-first /screens/ /widgets/ /services/,"lib/features/auth/(data/domain/presentation) lib/features/home/...","lib/screens/ lib/widgets/ lib/services/ // hard to scale",Medium,https://docs.flutter.dev/app-architecture
69,Architecture,Apply clean architecture,Separation of data domain presentation layers,Repository pattern with dependency injection,Business logic in widgets,"class UserRepository { Future<User> getUser(); } // injected via Riverpod","// API calls directly in widgets",High,https://docs.flutter.dev/app-architecture/design-patterns
70,UI,Use SelectableRegion for text selection,Native text selection across widgets,SelectableRegion for selectable content,Custom selection implementations,"SelectableRegion(selectionControls: materialTextSelectionControls, child: Column(...))","// Custom gesture detector for selection",Low,https://api.flutter.dev/flutter/widgets/SelectableRegion-class.html
71,Performance,Leverage Impeller for jank-free animations,Impeller eliminates shader compilation jank with precompiled shaders,Enable Impeller and design for 60+ FPS consistency,Rely on Skia shader warmup workarounds,"// flutter run --enable-impeller // Default in Flutter 3.19+ ensures smooth first-frame animations","// Skia: ShaderWarmUp class for precompilation workarounds",High,https://docs.flutter.dev/perf/impeller
72,Performance,Profile animations with Impeller DevTools,Use DevTools Timeline for Impeller performance analysis,Monitor frame times and GPU utilization in DevTools,Assume Impeller fixes all performance issues,"// DevTools > Performance > Enable Impeller metrics // Check for consistent 16ms frame budget","// No profiling relying on visual smoothness only",Medium,https://docs.flutter.dev/tools/devtools/performance
73,Performance,Configure Impeller per platform,Impeller default on iOS enable explicitly on Android,Use --enable-impeller flag for Android testing,Assume same rendering on all platforms,"// iOS: Impeller default // Android: flutter run --enable-impeller or AndroidManifest.xml <meta-data android:name='io.flutter.embedding.android.EnableImpeller' android:value='true' />","// Ignoring platform rendering differences",Medium,https://docs.flutter.dev/perf/impeller#android
74,Animation,Use SpringSimulation for physics-based motion,spring_simulation.dart provides natural bouncy animations,SpringSimulation with SpringDescription for organic feel,Linear or eased animations for interactive elements,"final spring = SpringSimulation(SpringDescription(mass: 1.0, stiffness: 500.0, damping: 25.0), 0, 1, 0); controller.animateWith(spring);","Curves.easeOut for drag-release animations",High,https://api.flutter.dev/flutter/physics/SpringSimulation-class.html
75,Animation,Tune SpringDescription parameters,mass stiffness damping control spring behavior,Adjust stiffness (100-1000) and damping ratio for feel,Default spring values without testing,"SpringDescription(mass: 1.0, stiffness: 400.0, damping: 20.0) // Bouncy SpringDescription.withDampingRatio(mass: 1.0, stiffness: 500.0, ratio: 0.7) // Smooth","SpringDescription(mass: 1, stiffness: 100, damping: 1) // Underdamped chaos",Medium,https://api.flutter.dev/flutter/physics/SpringDescription-class.html
76,Animation,Use spring physics for gestures,Connect drag gestures to spring animations,AnimationController.animateWith(SpringSimulation) on gesture end,Abrupt stops after drag release,"onPanEnd: (details) { final velocity = details.velocity.pixelsPerSecond.dy; controller.animateWith(SpringSimulation(spring, currentValue, targetValue, velocity / 1000)); }","onPanEnd: () => controller.animateTo(target) // No velocity",High,https://docs.flutter.dev/cookbook/animation/physics-simulation
77,Animation,Implement scroll spring physics,Custom ScrollPhysics with spring behavior,BouncingScrollPhysics or custom SpringScrollPhysics,ClampingScrollPhysics for organic scrolling,"class SpringScrollPhysics extends ScrollPhysics { @override SpringDescription get spring => SpringDescription(mass: 0.5, stiffness: 100, damping: 1); }","ClampingScrollPhysics() // Hard stops",Medium,https://api.flutter.dev/flutter/widgets/BouncingScrollPhysics-class.html
78,Performance,Optimize for 120Hz displays,Design animations for high refresh rate screens,Use TickerMode and vsync for 120Hz frame pacing,Assume 60Hz timing for all devices,"// AnimationController respects display refresh rate // Profile on 120Hz devices for smoothness class _State extends State<X> with TickerProviderStateMixin","// Hardcoded Duration(milliseconds: 16) assumptions",High,https://docs.flutter.dev/perf/rendering-performance
79,Performance,Implement adaptive frame timing,Detect and adapt to display refresh rate,Query refresh rate and adjust animation curves,Fixed frame budgets across devices,"final refreshRate = View.of(context).display.refreshRate; // 120Hz = 8.3ms budget vs 60Hz = 16.6ms","// Assume 16ms frame budget on all devices",Medium,https://api.flutter.dev/flutter/dart-ui/FlutterView/display.html
80,Performance,Profile on high refresh rate devices,Test animations on 120Hz hardware,Use DevTools to verify consistent frame delivery,Test only on 60Hz devices,"// DevTools Performance tab // Frame rendering time should be < 8.3ms for 120Hz // Check for jank spikes on ProMotion displays","// Visual testing on 60Hz only",Medium,https://docs.flutter.dev/tools/devtools/performance
81,Animation,Integrate Rive for interactive animations,Rive state machines enable reactive vector animations,rive package for complex state-driven animations,Lottie for interactive animations requiring state,"RiveAnimation.asset('assets/animation.riv', stateMachines: ['StateMachine'], onInit: (artboard) { _controller = StateMachineController.fromArtboard(artboard, 'StateMachine'); })","LottieBuilder.asset() // No state machine support",High,https://pub.dev/packages/rive
82,Animation,Control Rive state machines,Trigger state changes from Flutter code,SMITrigger SMIBool SMINumber for state control,Hardcoded animation playback,"final trigger = _controller.findInput<bool>('isPressed') as SMIBool; trigger.value = true; // Triggers state transition","// Play/pause only without state control",Medium,https://rive.app/community/doc/state-machines/docxX4lP4Y8S
83,Animation,Optimize Rive asset loading,Preload and cache Rive animations,RiveFile.asset with preloading for performance,Load Rive files on every rebuild,"final riveFile = await RiveFile.asset('assets/anim.riv'); // Cache in state @override void initState() { _loadRive(); }","RiveAnimation.asset() in build() // Reloads each build",Medium,https://pub.dev/packages/rive
84,UI,Adapt to iOS 26 Liquid Glass design,Cupertino widgets support Liquid Glass glassmorphism,CupertinoTheme with translucent materials for iOS 26,Ignore iOS 26 design language changes,"CupertinoApp(theme: CupertinoThemeData(scaffoldBackgroundColor: CupertinoColors.systemBackground.withOpacity(0.7))) // Translucent backgrounds","// Opaque backgrounds ignoring Liquid Glass aesthetic",High,https://developer.apple.com/design/human-interface-guidelines/designing-for-ios
85,UI,Implement Cupertino glassmorphism effects,Use BackdropFilter and translucent materials,BackdropFilter with ImageFilter.blur for glass effect,Solid color backgrounds on iOS 26,"BackdropFilter(filter: ImageFilter.blur(sigmaX: 30, sigmaY: 30), child: Container(color: CupertinoColors.systemBackground.withOpacity(0.6)))","Container(color: CupertinoColors.systemBackground) // Opaque",Medium,https://api.flutter.dev/flutter/widgets/BackdropFilter-class.html
86,UI,Use CupertinoSliverNavigationBar for iOS feel,Large title navigation adapting to Liquid Glass,CupertinoSliverNavigationBar with translucent background,Material AppBar on iOS apps,"CupertinoSliverNavigationBar(largeTitle: Text('Settings'), backgroundColor: CupertinoColors.systemBackground.withOpacity(0.8), border: null)","AppBar(title: Text('Settings')) // Material on iOS",Medium,https://api.flutter.dev/flutter/cupertino/CupertinoSliverNavigationBar-class.html
87,Animation,Use Curves.easeInOutCubicEmphasized,Material 3 emphasized easing for natural motion,easeInOutCubicEmphasized for M3 transitions,Linear or basic easing for UI animations,"AnimatedContainer(duration: Duration(milliseconds: 500), curve: Curves.easeInOutCubicEmphasized)","curve: Curves.linear // Robotic motion",Medium,https://api.flutter.dev/flutter/animation/Curves/easeInOutCubicEmphasized-constant.html
88,Animation,Prefer ImplicitlyAnimatedWidget subclasses,Built-in widgets handle animation complexity,AnimatedContainer AnimatedPadding AnimatedAlign,AnimationController for simple property changes,"AnimatedPadding(duration: Duration(ms: 300), padding: EdgeInsets.all(isExpanded ? 16 : 8), child: content)","AnimationController + Tween<EdgeInsets> // Overcomplicated",Low,https://api.flutter.dev/flutter/widgets/ImplicitlyAnimatedWidget-class.html
89,Animation,Use AnimatedBuilder for custom animations,Efficient rebuilds with AnimatedBuilder pattern,AnimatedBuilder for complex animated widgets,Rebuilding entire widget tree on animation tick,"AnimatedBuilder(animation: controller, builder: (context, child) => Transform.rotate(angle: controller.value * 2 * pi, child: child), child: const Icon(Icons.refresh))","setState on every animation tick // Rebuilds entire tree",Medium,https://api.flutter.dev/flutter/widgets/AnimatedBuilder-class.html
90,Animation,Implement staggered animations,Sequential animations with Interval curves,Staggered intervals for list item animations,Simultaneous animations for list items,"Interval(index * 0.1, index * 0.1 + 0.5, curve: Curves.easeOut) // Stagger each item","// All items animate at once",Medium,https://docs.flutter.dev/ui/animations/staggered-animations
91,Performance,Use battery-efficient animation patterns,Reduce animation work when battery is low,Check battery state and reduce animation complexity,Full animations regardless of battery state,"if (await Battery().batteryLevel < 20) { animationDuration = Duration.zero; } // Reduce motion on low battery","// Always animate at full fidelity",Low,https://pub.dev/packages/battery_plus
92,Performance,Implement reduced motion support,Respect system accessibility settings,MediaQuery.disableAnimations for reduced motion,Ignore accessibility motion preferences,"if (MediaQuery.of(context).disableAnimations) { return child; // Skip animation } return AnimatedWidget(child: child);","// Animations regardless of accessibility settings",High,https://api.flutter.dev/flutter/widgets/MediaQueryData/disableAnimations.html