run method

  1. @override
Future? run()
override

Executes the custom application build process.

This method orchestrates flexible build workflows by processing user-defined configurations and delegating to the Arguments build system for execution:

Build Workflow

  1. Argument Processing: Parses custom build arguments and global settings
  2. Configuration Validation: Validates binary type and parameter compatibility
  3. Build Execution: Delegates to Arguments.build() with custom configuration
  4. Result Management: Returns build exit code for success/failure indication

Parameters

  • Uses argResults - Custom build argument results from CLI parsing
  • Uses globalResults - Global configuration and environment variables

Returns

Returns a Future that completes with:

  • 0 - Build completed successfully with specified configuration
  • >0 - Build failed with specific error code
  • null - Build process encountered unexpected termination

Build Flexibility

The execution supports diverse scenarios:

  • Binary Types: APK, AAB, IPA, desktop apps, web builds, custom formats
  • Build Modes: Debug, profile, release, and custom optimization levels
  • Custom Arguments: User-defined flags and parameters for specialized tools
  • Output Control: Configurable artifact paths and naming conventions
  • Integration: Compatibility with existing build systems and toolchains

Error Handling

Common failure scenarios include:

  • Invalid binary type specification or unsupported format
  • Incorrect custom arguments or incompatible parameter combinations
  • Missing build dependencies or environment configuration issues
  • Output path conflicts or insufficient disk space
  • Integration failures with external build tools or systems

Example Scenarios

Enterprise iOS Build:

// CLI: flutter distribute build custom --binary-type ipa --flavor enterprise
final result = await command.run();

Multi-Platform Desktop Build:

// CLI: flutter distribute build custom --binary-type macos --arguments "--analyze-size"
final result = await command.run();

Custom Web Build:

// CLI: flutter distribute build custom --binary-type web --build-mode profile
final result = await command.run();

Integration Benefits

The custom command enables:

  • Seamless integration with existing CI/CD pipelines
  • Support for specialized deployment requirements
  • Compatibility with custom build tools and optimization workflows
  • Flexible artifact management and post-build processing
  • Extensible foundation for future build system enhancements

Implementation

@override
Future? run() => Arguments.fromArgResults(argResults!, globalResults).build();