Claude Code correction guide. Updated January 2026.
# Install via official installer (not package managers for latest)
flutter doctor
flutter create --org com.example --platforms=ios,android myapp
# Upgrade existing project
flutter upgrade && dart fix --apply- Uses deprecated Provider patterns - Riverpod 3.x is standard, Provider maintenance-only
- Ignores Impeller renderer - Enabled by default, Skia fallback removed on iOS
- Suggests old Gradle configuration - Flutter 3.27+ requires Plugin DSL migration
- Uses
setStatefor server state - AsyncNotifier pattern required for proper loading states - Misses
context.mountedchecks - Async gaps cause disposed widget errors
// Riverpod 3.x AsyncNotifier with code generation
@riverpod
class UserController extends _$UserController {
@override
FutureOr<User?> build() async {
return await ref.watch(authRepositoryProvider).getCurrentUser();
}
Future<void> updateProfile(String name) async {
state = const AsyncLoading();
state = await AsyncValue.guard(() async {
return await ref.read(userRepositoryProvider).update(name);
});
}
}
// Proper async gap handling
Future<void> _loadData() async {
final data = await repository.fetch();
if (!mounted) return; // CRITICAL check
setState(() => _data = data);
}- 3.27+: Deep links auto-handled, manual handling may conflict
- 3.27+: SafeArea issues with Native Views on Android - needs explicit handling
- Gradle 8.3+: Required migration from old
build.gradlesyntax - With PowerVR GPUs: Impeller issues persist on some Oppo devices
- Do NOT use
setState()after async withoutmountedcheck - Do NOT nest Widgets beyond 3 levels - extract to separate widgets
- Do NOT ignore
dart fixsuggestions after Flutter upgrades - Do NOT use
BuildContextafterawaitwithout guard - Do NOT skip
flutter cleanwhen switching major versions