Implementation
const Map<String, Map<String, String>> embeddedBrickFiles = {
"app_scaffold": {
"__brick__/.gitignore":
r'''# FlutterStart staging and snapshot directories (FR-135)
.flutterstart/staging/
.flutterstart/snapshots/
# Dart and Flutter defaults
.dart_tool/
.packages
.pub-cache/
.pub/
build/
# Freezed & json_serializable generated files
*.freezed.dart
*.g.dart
''',
"__brick__/README.md": r'''# {{project_name}}
{{description}}
Generated with FlutterStart (Feature-First architecture).
Org: `{{org_identifier}}`
{{#platform_android}}
- Android target enabled
{{/platform_android}}
{{#platform_ios}}
- iOS target enabled
{{/platform_ios}}
{{#platform_web}}
- Web target enabled
{{/platform_web}}
{{#platform_macos}}
- macOS target enabled
{{/platform_macos}}
{{#platform_windows}}
- Windows target enabled
{{/platform_windows}}
{{#platform_linux}}
- Linux target enabled
{{/platform_linux}}
''',
"__brick__/analysis_options.yaml":
r'''include: package:flutter_lints/flutter.yaml
linter:
rules:
prefer_const_constructors: true
prefer_const_declarations: true
''',
"__brick__/lib/core/network/api_client.dart":
r'''import 'package:dio/dio.dart';
class ApiClient {
final Dio dio;
ApiClient(this.dio);
Future<Response<T>> get<T>(String path) {
return dio.get<T>(path);
}
}
''',
"__brick__/lib/di/injection.dart": r'''import 'package:get_it/get_it.dart';
import 'package:dio/dio.dart';
import 'package:{{project_name}}/core/network/api_client.dart';
import 'package:{{project_name}}/features/sample/data/repositories/sample_repository.dart';
import 'package:{{project_name}}/features/sample/presentation/sample_cubit.dart';
final getIt = GetIt.instance;
void configureDependencies() {
// Core
getIt.registerLazySingleton<Dio>(() => Dio());
getIt.registerLazySingleton<ApiClient>(() => ApiClient(getIt<Dio>()));
// Features - Sample
getIt.registerLazySingleton<SampleRepository>(
() => SampleRepository(getIt<ApiClient>()),
);
getIt.registerFactory<SampleCubit>(
() => SampleCubit(getIt<SampleRepository>()),
);
}
''',
"__brick__/lib/features/sample/data/repositories/sample_repository.dart":
r'''import 'package:{{project_name}}/core/network/api_client.dart';
import 'package:{{project_name}}/features/sample/domain/models/sample_item.dart';
class SampleRepository {
final ApiClient apiClient;
SampleRepository(this.apiClient);
Future<List<SampleItem>> getSampleItems() async {
return const [
SampleItem(id: '1', title: 'Sample Item 1'),
SampleItem(id: '2', title: 'Sample Item 2'),
];
}
}
''',
"__brick__/lib/features/sample/domain/models/sample_item.dart":
r'''import 'package:freezed_annotation/freezed_annotation.dart';
part 'sample_item.freezed.dart';
part 'sample_item.g.dart';
@freezed
class SampleItem with _$SampleItem {
const factory SampleItem({
required String id,
required String title,
}) = _SampleItem;
factory SampleItem.fromJson(Map<String, dynamic> json) =>
_$SampleItemFromJson(json);
}
''',
"__brick__/lib/features/sample/presentation/sample_cubit.dart":
r'''import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:{{project_name}}/features/sample/data/repositories/sample_repository.dart';
import 'package:{{project_name}}/features/sample/presentation/sample_state.dart';
class SampleCubit extends Cubit<SampleState> {
final SampleRepository repository;
SampleCubit(this.repository) : super(const SampleState.initial());
Future<void> loadItems() async {
emit(const SampleState.loading());
try {
final items = await repository.getSampleItems();
emit(SampleState.success(items));
} catch (e) {
emit(SampleState.failure(e.toString()));
}
}
}
''',
"__brick__/lib/features/sample/presentation/sample_screen.dart":
r'''import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:{{project_name}}/di/injection.dart';
import 'package:{{project_name}}/features/sample/presentation/sample_cubit.dart';
import 'package:{{project_name}}/features/sample/presentation/sample_state.dart';
class SampleScreen extends StatelessWidget {
const SampleScreen({super.key});
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (_) => getIt<SampleCubit>()..loadItems(),
child: Scaffold(
appBar: AppBar(
title: const Text('Sample Feature'),
),
body: BlocBuilder<SampleCubit, SampleState>(
builder: (context, state) {
return state.when(
initial: () => const Center(child: Text('Initial')),
loading: () => const Center(child: CircularProgressIndicator()),
success: (items) => ListView.builder(
itemCount: items.length,
itemBuilder: (context, index) => ListTile(
title: Text(items[index].title),
subtitle: Text('ID: ${items[index].id}'),
),
),
failure: (msg) => Center(child: Text('Error: $msg')),
);
},
),
),
);
}
}
''',
"__brick__/lib/features/sample/presentation/sample_state.dart":
r'''import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:{{project_name}}/features/sample/domain/models/sample_item.dart';
part 'sample_state.freezed.dart';
@freezed
class SampleState with _$SampleState {
const factory SampleState.initial() = _Initial;
const factory SampleState.loading() = _Loading;
const factory SampleState.success(List<SampleItem> items) = _Success;
const factory SampleState.failure(String message) = _Failure;
}
''',
"__brick__/lib/main.dart": r'''import 'package:flutter/material.dart';
import 'package:{{project_name}}/di/injection.dart';
import 'package:{{project_name}}/router/app_router.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
configureDependencies();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp.router(
title: '{{project_name}}',
routerConfig: appRouter,
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
);
}
}
''',
"__brick__/lib/router/app_router.dart":
r'''import 'package:go_router/go_router.dart';
import 'package:{{project_name}}/features/sample/presentation/sample_screen.dart';
final GoRouter appRouter = GoRouter(
initialLocation: '/',
routes: [
GoRoute(
path: '/',
builder: (context, state) => const SampleScreen(),
),
],
);
''',
"__brick__/pubspec.yaml": r'''name: {{project_name}}
description: "{{description}}"
publish_to: "none"
version: 0.1.0+1
environment:
sdk: ^3.11.0
dependencies:
flutter:
sdk: flutter
flutter_bloc: ^9.0.0
go_router: ^14.0.0
get_it: ^8.0.0
dio: ^5.0.0
freezed_annotation: ^2.4.1
json_annotation: ^4.9.0
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^5.0.0
build_runner: ^2.4.0
freezed: ^2.5.0
json_serializable: ^6.8.0
flutter:
uses-material-design: true
''',
"__brick__/test/widget_test.dart":
r'''import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:{{project_name}}/di/injection.dart';
import 'package:{{project_name}}/main.dart';
void main() {
setUp(configureDependencies);
tearDown(() => getIt.reset());
testWidgets('App builds and renders the sample screen', (tester) async {
await tester.pumpWidget(const MyApp());
await tester.pump();
expect(find.byType(MaterialApp), findsOneWidget);
expect(find.text('Sample Feature'), findsOneWidget);
});
}
''',
"brick.yaml": r'''name: app_scaffold
description: Official FlutterStart Feature-First app scaffold brick.
version: 0.1.0
environment:
mason: "0.1.2"
vars:
project_name:
type: string
description: The Dart package/app name
default: my_app
description:
type: string
description: The app description
default: A new Flutter project.
org_identifier:
type: string
description: Reverse-domain org identifier
default: com.example
platform_android:
type: boolean
description: Target Android platform
default: true
platform_ios:
type: boolean
description: Target iOS platform
default: true
platform_web:
type: boolean
description: Target Web platform
default: false
platform_macos:
type: boolean
description: Target macOS platform
default: false
platform_windows:
type: boolean
description: Target Windows platform
default: false
platform_linux:
type: boolean
description: Target Linux platform
default: false
''',
},
"foundation_app_initialization/bootstrap": {
"__brick__/lib/foundation/app_initialization.dart":
r'''import 'app_logging.dart';
abstract final class AppInitialization {
static Future<void> initialize() async {
AppLogger.info('Application bootstrap complete');
}
}
''',
"brick.yaml": r'''name: foundation_app_initialization_bootstrap
description: Ordered bootstrap application initialization.
version: 0.3.0
environment:
mason: "0.1.2"
''',
},
"foundation_app_initialization/production_bootstrap": {
"__brick__/lib/foundation/app_initialization.dart":
r'''import 'app_logging.dart';
abstract final class AppInitialization {
static Future<void> initialize() async {
AppLogger.info('Production bootstrap complete');
}
}
''',
"brick.yaml": r'''name: foundation_app_initialization_production_bootstrap
description: Guarded production bootstrap application initialization.
version: 0.3.0
environment:
mason: "0.1.2"
''',
},
"foundation_app_initialization/simple": {
"__brick__/lib/foundation/app_initialization.dart":
r'''abstract final class AppInitialization {
static Future<void> initialize() async {}
}
''',
"brick.yaml": r'''name: foundation_app_initialization_simple
description: Simple application initialization.
version: 0.3.0
environment:
mason: "0.1.2"
''',
},
"foundation_base": {
"__brick__/lib/foundation/app_initialization.dart":
r'''abstract final class AppInitialization {
static Future<void> initialize() async {}
}
''',
"__brick__/lib/foundation/app_localization.dart":
r'''import 'package:flutter/material.dart';
abstract final class AppLocalization {
static Future<void> initialize() async {}
static Widget wrap(Widget child) => child;
static Iterable<LocalizationsDelegate<dynamic>> delegates(
BuildContext context,
) => const [];
static const locales = [Locale('en')];
}
''',
"__brick__/lib/foundation/app_logging.dart":
r'''abstract final class AppLogger {
static void info(Object? message) {}
static void error(Object? error, StackTrace stackTrace) {}
}
''',
"__brick__/lib/foundation/app_theme.dart":
r'''import 'package:flutter/material.dart';
abstract final class AppTheme {
static ThemeData get value => ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
);
}
''',
"__brick__/lib/foundation/environment_config.dart":
r'''abstract final class EnvironmentConfig {
static Future<void> initialize() async {}
static const apiBaseUrl = '';
}
''',
"__brick__/lib/foundation/error_boundary.dart":
r'''abstract final class ErrorBoundary {
static void run(void Function() body) => body();
}
''',
"__brick__/lib/foundation/flavors.dart": r'''enum AppFlavor { production }
extension AppFlavorDetails on AppFlavor {
String get suffix => '';
}
abstract final class AppFlavorConfig {
static const current = AppFlavor.production;
}
''',
"__brick__/lib/main.dart": r'''import 'package:flutter/material.dart';
import 'package:{{project_name}}/di/injection.dart';
import 'package:{{project_name}}/foundation/app_initialization.dart';
import 'package:{{project_name}}/foundation/app_localization.dart';
import 'package:{{project_name}}/foundation/app_theme.dart';
import 'package:{{project_name}}/foundation/environment_config.dart';
import 'package:{{project_name}}/foundation/error_boundary.dart';
import 'package:{{project_name}}/foundation/flavors.dart';
import 'package:{{project_name}}/router/app_router.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await EnvironmentConfig.initialize();
await AppLocalization.initialize();
await AppInitialization.initialize();
configureDependencies();
ErrorBoundary.run(() => runApp(AppLocalization.wrap(const MyApp())));
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp.router(
title: '{{project_name}}${AppFlavorConfig.current.suffix}',
routerConfig: appRouter,
theme: AppTheme.value,
localizationsDelegates: AppLocalization.delegates(context),
supportedLocales: AppLocalization.locales,
);
}
}
''',
"brick.yaml": r'''name: foundation_base
description: Shared integration surface for selected application foundation recipes.
version: 0.3.0
environment:
mason: "0.1.2"
vars:
project_name:
type: string
description: The Dart package/app name
default: my_app
''',
},
"foundation_environment_config/dart_define": {
"__brick__/lib/foundation/environment_config.dart":
r'''abstract final class EnvironmentConfig {
static Future<void> initialize() async {}
static const apiBaseUrl = String.fromEnvironment(
'API_BASE_URL',
defaultValue: '',
);
}
''',
"brick.yaml": r'''name: foundation_environment_config_dart_define
description: Dart-define environment configuration for FlutterStart.
version: 0.1.0
environment:
mason: 0.1.2
vars: {}
''',
},
"foundation_environment_config/envied": {
"__brick__/.env": r'''API_BASE_URL=
''',
"__brick__/lib/foundation/environment_config.dart":
r'''import 'package:envied/envied.dart';
part 'environment_config.g.dart';
@Envied(path: '.env')
abstract final class Env {
@EnviedField(varName: 'API_BASE_URL', defaultValue: '')
static const String apiBaseUrl = _Env.apiBaseUrl;
}
abstract final class EnvironmentConfig {
static Future<void> initialize() async {}
static const apiBaseUrl = Env.apiBaseUrl;
}
''',
"brick.yaml": r'''name: foundation_environment_config_envied
description: Envied environment configuration for FlutterStart.
version: 0.1.0
environment:
mason: 0.1.2
vars: {}
''',
},
"foundation_environment_config/flutter_dotenv": {
"__brick__/.env": r'''API_BASE_URL=
''',
"__brick__/lib/foundation/environment_config.dart":
r'''import 'package:flutter_dotenv/flutter_dotenv.dart';
abstract final class EnvironmentConfig {
static Future<void> initialize() => dotenv.load();
static String get apiBaseUrl => dotenv.env['API_BASE_URL'] ?? '';
}
''',
"brick.yaml": r'''name: foundation_environment_config_flutter_dotenv
description: Flutter dotenv environment configuration for FlutterStart.
version: 0.1.0
environment:
mason: 0.1.2
vars: {}
''',
},
"foundation_error_handling/basic": {
"__brick__/lib/foundation/error_boundary.dart":
r'''import 'app_logging.dart';
abstract final class ErrorBoundary {
static void run(void Function() body) {
try {
body();
} on Object catch (error, stackTrace) {
AppLogger.error(error, stackTrace);
}
}
}
''',
"brick.yaml": r'''name: foundation_error_handling_basic
description: Basic exception handling for FlutterStart.
version: 0.1.0
environment:
mason: 0.1.2
vars: {}
''',
},
"foundation_error_handling/failure_result": {
"__brick__/lib/foundation/error_boundary.dart":
r'''abstract final class ErrorBoundary {
static void run(void Function() body) => body();
}
sealed class Result<T> {
const Result();
}
final class Success<T> extends Result<T> {
const Success(this.value);
final T value;
}
final class Failure<T> extends Result<T> {
const Failure(this.error, [this.stackTrace]);
final Object error;
final StackTrace? stackTrace;
}
''',
"brick.yaml": r'''name: foundation_error_handling_failure_result
description: Failure and result types for FlutterStart.
version: 0.1.0
environment:
mason: 0.1.2
vars: {}
''',
},
"foundation_error_handling/global_boundary": {
"__brick__/lib/foundation/error_boundary.dart": r'''import 'dart:async';
import 'package:flutter/foundation.dart';
import 'app_logging.dart';
abstract final class ErrorBoundary {
static void run(void Function() body) {
FlutterError.onError = (details) {
FlutterError.presentError(details);
AppLogger.error(details.exception, details.stack ?? StackTrace.current);
};
PlatformDispatcher.instance.onError = (error, stackTrace) {
AppLogger.error(error, stackTrace);
return true;
};
runZonedGuarded(body, AppLogger.error);
}
}
''',
"brick.yaml": r'''name: foundation_error_handling_global_boundary
description: Global Flutter and Dart error boundary for FlutterStart.
version: 0.1.0
environment:
mason: 0.1.2
vars: {}
''',
},
"foundation_flavors/advanced": {
"__brick__/android/app/build.gradle.kts": r'''plugins {
id("com.android.application")
id("kotlin-android")
id("dev.flutter.flutter-gradle-plugin")
}
android {
namespace = "{{org_identifier}}.{{project_name}}"
compileSdk = flutter.compileSdkVersion
ndkVersion = flutter.ndkVersion
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_17.toString()
}
defaultConfig {
applicationId = "{{org_identifier}}.{{project_name}}"
minSdk = flutter.minSdkVersion
targetSdk = flutter.targetSdkVersion
versionCode = flutter.versionCode
versionName = flutter.versionName
}
flavorDimensions += "environment"
productFlavors {
create("development") {
dimension = "environment"
applicationIdSuffix = ".dev"
resValue("string", "app_name", "{{project_name}} Dev")
}
create("uat") {
dimension = "environment"
applicationIdSuffix = ".uat"
resValue("string", "app_name", "{{project_name}} UAT")
}
create("production") {
dimension = "environment"
resValue("string", "app_name", "{{project_name}}")
}
}
buildTypes {
release {
signingConfig = signingConfigs.getByName("debug")
}
}
}
flutter {
source = "../.."
}
''',
"__brick__/android/app/src/main/AndroidManifest.xml":
r'''<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:label="@string/app_name"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:taskAffinity=""
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme" />
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<meta-data android:name="flutterEmbedding" android:value="2" />
</application>
<queries>
<intent>
<action android:name="android.intent.action.PROCESS_TEXT"/>
<data android:mimeType="text/plain"/>
</intent>
</queries>
</manifest>
''',
"__brick__/android/app/src/development/res/values/strings.xml":
r'''<resources>
<string name="app_name">{{project_name}} Dev</string>
</resources>
''',
"__brick__/android/app/src/uat/res/values/strings.xml": r'''<resources>
<string name="app_name">{{project_name}} UAT</string>
</resources>
''',
"__brick__/ios/Flutter/Development.xcconfig":
r'''#include "Generated.xcconfig"
FLUTTER_TARGET=lib/main.dart
DART_DEFINES=RkxBVk9SPWRldmVsb3BtZW50
''',
"__brick__/ios/Flutter/Uat.xcconfig": r'''#include "Generated.xcconfig"
FLUTTER_TARGET=lib/main.dart
DART_DEFINES=RkxBVk9SPXVhdA==
''',
"__brick__/ios/Runner.xcodeproj/xcshareddata/xcschemes/development.xcscheme":
r'''<?xml version="1.0" encoding="UTF-8"?>
<Scheme LastUpgradeVersion="1510" version="1.3">
<BuildAction parallelizeBuildables="YES" buildImplicitDependencies="YES"><BuildActionEntries><BuildActionEntry buildForTesting="YES" buildForRunning="YES" buildForProfiling="YES" buildForArchiving="YES" buildForAnalyzing="YES"><BuildableReference BuildableIdentifier="primary" BlueprintIdentifier="97C146ED1CF9000F007C117D" BuildableName="Runner.app" BlueprintName="Runner" ReferencedContainer="container:Runner.xcodeproj"/></BuildActionEntry></BuildActionEntries></BuildAction>
<TestAction buildConfiguration="Debug-development" selectedDebuggerIdentifier="Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier="Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv="YES"/>
<LaunchAction buildConfiguration="Debug-development" selectedDebuggerIdentifier="Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier="Xcode.DebuggerFoundation.Launcher.LLDB" launchStyle="0" useCustomWorkingDirectory="NO" ignoresPersistentStateOnLaunch="NO" debugDocumentVersioning="YES" allowLocationSimulation="YES"><BuildableProductRunnable runnableDebuggingMode="0"><BuildableReference BuildableIdentifier="primary" BlueprintIdentifier="97C146ED1CF9000F007C117D" BuildableName="Runner.app" BlueprintName="Runner" ReferencedContainer="container:Runner.xcodeproj"/></BuildableProductRunnable></LaunchAction>
<ProfileAction buildConfiguration="Profile-development" shouldUseLaunchSchemeArgsEnv="YES" savedToolIdentifier="" useCustomWorkingDirectory="NO" debugDocumentVersioning="YES"/>
<AnalyzeAction buildConfiguration="Debug-development"/>
<ArchiveAction buildConfiguration="Release-development" revealArchiveInOrganizer="YES"/>
</Scheme>
''',
"__brick__/ios/Runner.xcodeproj/xcshareddata/xcschemes/production.xcscheme":
r'''<?xml version="1.0" encoding="UTF-8"?>
<Scheme LastUpgradeVersion="1510" version="1.3">
<BuildAction parallelizeBuildables="YES" buildImplicitDependencies="YES"><BuildActionEntries><BuildActionEntry buildForTesting="YES" buildForRunning="YES" buildForProfiling="YES" buildForArchiving="YES" buildForAnalyzing="YES"><BuildableReference BuildableIdentifier="primary" BlueprintIdentifier="97C146ED1CF9000F007C117D" BuildableName="Runner.app" BlueprintName="Runner" ReferencedContainer="container:Runner.xcodeproj"/></BuildActionEntry></BuildActionEntries></BuildAction>
<TestAction buildConfiguration="Debug-production" selectedDebuggerIdentifier="Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier="Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv="YES"/>
<LaunchAction buildConfiguration="Debug-production" selectedDebuggerIdentifier="Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier="Xcode.DebuggerFoundation.Launcher.LLDB" launchStyle="0" useCustomWorkingDirectory="NO" ignoresPersistentStateOnLaunch="NO" debugDocumentVersioning="YES" allowLocationSimulation="YES"><BuildableProductRunnable runnableDebuggingMode="0"><BuildableReference BuildableIdentifier="primary" BlueprintIdentifier="97C146ED1CF9000F007C117D" BuildableName="Runner.app" BlueprintName="Runner" ReferencedContainer="container:Runner.xcodeproj"/></BuildableProductRunnable></LaunchAction>
<ProfileAction buildConfiguration="Profile-production" shouldUseLaunchSchemeArgsEnv="YES" savedToolIdentifier="" useCustomWorkingDirectory="NO" debugDocumentVersioning="YES"/>
<AnalyzeAction buildConfiguration="Debug-production"/>
<ArchiveAction buildConfiguration="Release-production" revealArchiveInOrganizer="YES"/>
</Scheme>
''',
"__brick__/ios/Runner.xcodeproj/xcshareddata/xcschemes/uat.xcscheme":
r'''<?xml version="1.0" encoding="UTF-8"?>
<Scheme LastUpgradeVersion="1510" version="1.3">
<BuildAction parallelizeBuildables="YES" buildImplicitDependencies="YES"><BuildActionEntries><BuildActionEntry buildForTesting="YES" buildForRunning="YES" buildForProfiling="YES" buildForArchiving="YES" buildForAnalyzing="YES"><BuildableReference BuildableIdentifier="primary" BlueprintIdentifier="97C146ED1CF9000F007C117D" BuildableName="Runner.app" BlueprintName="Runner" ReferencedContainer="container:Runner.xcodeproj"/></BuildActionEntry></BuildActionEntries></BuildAction>
<TestAction buildConfiguration="Debug-uat" selectedDebuggerIdentifier="Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier="Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv="YES"/>
<LaunchAction buildConfiguration="Debug-uat" selectedDebuggerIdentifier="Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier="Xcode.DebuggerFoundation.Launcher.LLDB" launchStyle="0" useCustomWorkingDirectory="NO" ignoresPersistentStateOnLaunch="NO" debugDocumentVersioning="YES" allowLocationSimulation="YES"><BuildableProductRunnable runnableDebuggingMode="0"><BuildableReference BuildableIdentifier="primary" BlueprintIdentifier="97C146ED1CF9000F007C117D" BuildableName="Runner.app" BlueprintName="Runner" ReferencedContainer="container:Runner.xcodeproj"/></BuildableProductRunnable></LaunchAction>
<ProfileAction buildConfiguration="Profile-uat" shouldUseLaunchSchemeArgsEnv="YES" savedToolIdentifier="" useCustomWorkingDirectory="NO" debugDocumentVersioning="YES"/>
<AnalyzeAction buildConfiguration="Debug-uat"/>
<ArchiveAction buildConfiguration="Release-uat" revealArchiveInOrganizer="YES"/>
</Scheme>
''',
"__brick__/lib/foundation/flavors.dart":
r'''enum AppFlavor { development, uat, production }
extension AppFlavorDetails on AppFlavor {
String get suffix => switch (this) {
AppFlavor.development => ' (Dev)',
AppFlavor.uat => ' (UAT)',
AppFlavor.production => '',
};
}
abstract final class AppFlavorConfig {
static final current = switch (const String.fromEnvironment(
'FLAVOR',
defaultValue: 'production',
)) {
'development' => AppFlavor.development,
'uat' => AppFlavor.uat,
_ => AppFlavor.production,
};
}
''',
"brick.yaml": r'''name: foundation_flavors_advanced
description: Android and iOS flavor configuration for FlutterStart.
version: 0.1.0
environment:
mason: 0.1.2
vars: {}
''',
},
"foundation_flavors/basic": {
"__brick__/lib/foundation/flavors.dart":
r'''enum AppFlavor { development, uat, production }
extension AppFlavorDetails on AppFlavor {
String get suffix => switch (this) {
AppFlavor.development => ' (Dev)',
AppFlavor.uat => ' (UAT)',
AppFlavor.production => '',
};
}
abstract final class AppFlavorConfig {
static final current = switch (const String.fromEnvironment(
'FLAVOR',
defaultValue: 'production',
)) {
'development' => AppFlavor.development,
'uat' => AppFlavor.uat,
_ => AppFlavor.production,
};
}
''',
"brick.yaml": r'''name: foundation_flavors_basic
description: Dart flavor model for FlutterStart.
version: 0.1.0
environment:
mason: 0.1.2
vars: {}
''',
},
"foundation_localization/easy_localization": {
"__brick__/assets/translations/en.json": r'''{
"appTitle": "{{project_name}}"
}
''',
"__brick__/lib/foundation/app_localization.dart":
r'''import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
abstract final class AppLocalization {
static Future<void> initialize() => EasyLocalization.ensureInitialized();
static Widget wrap(Widget child) => EasyLocalization(
supportedLocales: const [Locale('en')],
path: 'assets/translations',
fallbackLocale: const Locale('en'),
child: child,
);
static Iterable<LocalizationsDelegate<dynamic>> delegates(
BuildContext context,
) => EasyLocalization.of(context)?.delegates ?? const [];
static const locales = [Locale('en')];
}
''',
"brick.yaml": r'''name: foundation_localization_easy_localization
description: Easy Localization integration for FlutterStart.
version: 0.1.0
environment:
mason: 0.1.2
vars: {}
''',
},
"foundation_localization/gen_l10n": {
"__brick__/l10n.yaml": r'''arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart
output-dir: lib/l10n/generated
synthetic-package: false
''',
"__brick__/lib/foundation/app_localization.dart":
r'''import 'package:flutter/material.dart';
import '../l10n/generated/app_localizations.dart';
abstract final class AppLocalization {
static Future<void> initialize() async {}
static Widget wrap(Widget child) => child;
static Iterable<LocalizationsDelegate<dynamic>> delegates(
BuildContext context,
) => AppLocalizations.localizationsDelegates;
static List<Locale> get locales => AppLocalizations.supportedLocales;
}
''',
"__brick__/lib/l10n/app_en.arb": r'''{
"@@locale": "en",
"appTitle": "{{project_name}}"
}
''',
"brick.yaml": r'''name: foundation_localization_gen_l10n
description: Flutter gen-l10n localization for FlutterStart.
version: 0.1.0
environment:
mason: 0.1.2
vars: {}
''',
},
"foundation_logging/logger": {
"__brick__/lib/foundation/app_logging.dart":
r'''import 'package:logger/logger.dart';
abstract final class AppLogger {
static final _logger = Logger();
static void info(Object? message) => _logger.i(message);
static void error(Object? error, StackTrace stackTrace) =>
_logger.e(error, error: error, stackTrace: stackTrace);
}
''',
"brick.yaml": r'''name: foundation_logging_logger
description: Logger integration for FlutterStart.
version: 0.1.0
environment:
mason: 0.1.2
vars: {}
''',
},
"foundation_logging/talker": {
"__brick__/lib/foundation/app_logging.dart":
r'''import 'package:talker/talker.dart';
abstract final class AppLogger {
static final _talker = Talker();
static void info(Object? message) => _talker.info(message);
static void error(Object? error, StackTrace stackTrace) =>
_talker.handle(error ?? 'Unknown error', stackTrace);
}
''',
"brick.yaml": r'''name: foundation_logging_talker
description: Talker integration for FlutterStart.
version: 0.1.0
environment:
mason: 0.1.2
vars: {}
''',
},
"foundation_theme/basic_themedata": {
"__brick__/lib/foundation/app_theme.dart":
r'''import 'package:flutter/material.dart';
abstract final class AppTheme {
static ThemeData get value =>
ThemeData(colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue));
}
''',
"brick.yaml": r'''name: foundation_theme_basic_themedata
description: Basic ThemeData for FlutterStart.
version: 0.1.0
environment:
mason: 0.1.2
vars: {}
''',
},
"foundation_theme/design_tokens": {
"__brick__/lib/foundation/app_theme.dart":
r'''import 'package:flutter/material.dart';
abstract final class DesignTokens {
static const primary = Color(0xff6750a4);
static const spacingSmall = 8.0;
static const spacingMedium = 16.0;
}
abstract final class AppTheme {
static ThemeData get value => ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: DesignTokens.primary),
useMaterial3: true,
);
}
''',
"brick.yaml": r'''name: foundation_theme_design_tokens
description: Design-token theme for FlutterStart.
version: 0.1.0
environment:
mason: 0.1.2
vars: {}
''',
},
"foundation_theme/material3": {
"__brick__/lib/foundation/app_theme.dart":
r'''import 'package:flutter/material.dart';
abstract final class AppTheme {
static ThemeData get value => ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
);
}
''',
"brick.yaml": r'''name: foundation_theme_material3
description: Material 3 theme for FlutterStart.
version: 0.1.0
environment:
mason: 0.1.2
vars: {}
''',
},
};