Code Review Reference Guide #
Detailed checklists and review criteria by category.
1. Architecture #
Clean Architecture Review #
Item Review Criteria Severity
Layer separation Domain â Data â Presentation dependency direction ðī
UseCase usage Business logic accessed through UseCases ðī
Repository interface I prefix, defined in Domain layer ðĄ
Entity immutability Freezed used, immutable objects ðĄ
Feature Module Independence #
// â
Correct dependency
import 'package:core/core.dart' ;
import 'package:feature_common_auth/auth.dart' ;
// â Incorrect dependency (direct reference to another application feature)
import 'package:feature_application_home/home.dart' ;
Checklist #
2. State Management #
BLoC Pattern Review #
Item Review Criteria Severity
Event/State definition Freezed used, Union Type ðĄ
State immutability copyWith used, no direct mutation ðī
Error handling Either pattern, Failure class ðĄ
Resource cleanup Subscriptions cancelled in close() ðī
State Definition Pattern #
// â
Correct state definition
@freezed
class HomeState with _$HomeState {
const factory HomeState . initial ( ) = _Initial ;
const factory HomeState . loading ( ) = _Loading ;
const factory HomeState . loaded ( User user) = _Loaded ;
const factory HomeState . error ( Failure failure) = _Error ;
}
// â Incorrect state definition (not using Freezed)
class HomeState {
final bool isLoading;
final User ? user;
final String ? error;
}
Checklist #
3. Security #
Item Review Criteria Severity
Hardcoded secrets API keys, tokens exposed ðī
Log output Sensitive information logged ðī
Environment variables Envied used ðĄ
// â
Correct validation
if ( ! EmailValidator . validate ( email) ) {
return left ( ValidationFailure ( 'Invalid email' ) ) ;
}
// â Direct use without validation
final user = await api. login ( email, password) ;
Checklist #
Rebuild Optimization #
Item Review Criteria Severity
const widgets const used where possible ðĄ
buildWhen BlocBuilder condition specified ðĄ
BlocSelector Refined state subscription ðĒ
Image Optimization #
// â
Correct image handling
CachedNetworkImage (
imageUrl: url,
cacheWidth: 200 ,
cacheHeight: 200 ,
)
// â Cache size not specified
Image . network ( url)
Checklist #
5. Testing #
Test Coverage #
Item Review Criteria Severity
UseCase tests Unit tests required ðī
Repository tests Mocked data source ðĄ
BLoC tests State transition verification ðĄ
Widget tests Key UI components ðĒ
Test Pattern #
// â
Correct test pattern (AAA)
test ( 'should return user when repository succeeds' , ( ) async {
// Arrange
when ( ( ) => mockRepository. getUser ( any ( ) ) )
. thenAnswer ( ( _) async => Right ( testUser) ) ;
// Act
final result = await useCase ( GetUserParams ( id: 1 ) ) ;
// Assert
expect ( result, Right ( testUser) ) ;
verify ( ( ) => mockRepository. getUser ( 1 ) ) . called ( 1 ) ;
} ) ;
Checklist #
6. Readability #
Naming Convention #
Item Rule Example
Classes PascalCase UserRepository
Variables/Functions camelCase getUserData()
Constants SCREAMING_SNAKE MAX_RETRY_COUNT
Files snake_case user_repository.dart
Code Structure #
// â
Single Responsibility Principle
class UserRepository implements IUserRepository {
// User-related logic only
}
// â Multiple responsibilities mixed
class UserRepository {
void getUser ( ) { }
void sendEmail ( ) { } // Email should be a separate service
void generateReport ( ) { } // Report should be separate too
}
Checklist #
7. Internationalization (i18n) #
Translation Key Usage #
// â
Correct usage
Text ( context. t. common. save)
Text ( context. t. user. greeting ( name: user. name) )
// â Hardcoded
Text ( 'Save' )
Text ( 'Hello, ${ user . name } !' )
Checklist #
8. Accessibility #
Semantics Applied #
// â
Correct application
Semantics (
label: 'Add to cart' ,
button: true ,
child: IconButton (
icon: Icon ( Icons . add_shopping_cart) ,
onPressed: addToCart,
) ,
)
// â No Semantics
IconButton (
icon: Icon ( Icons . add_shopping_cart) ,
onPressed: addToCart,
)
Checklist #
Static Analysis #
# Full analysis
melos run analyze
# Parallel lint
melos run lint: parallel
# Formatting check
melos run format
dart format -- set - exit- if - changed .
Testing #
# Full test suite
melos run test
# Coverage report
melos run test: with - html- coverage