flavorEntryPoint static method

String flavorEntryPoint({
  1. required String name,
  2. required String flavor,
  3. required String configImport,
  4. String? storageImport,
})

A flavored entry point — lib/main_<flavor>.dart. Selects the flavor's config via AppConfig.current, then runs the shared MyApp.

When storageImport is provided (Clean), it initializes SharedPreferences and overrides sharedPreferencesProvider, mirroring the single-flavor main.dart. configImport is the path (relative to package:$name/) of the generated app_config.dart.

Implementation

static String flavorEntryPoint({
  required String name,
  required String flavor,
  required String configImport,
  String? storageImport,
}) {
  if (storageImport != null) {
    return '''
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:shared_preferences/shared_preferences.dart';

import 'package:$name/app.dart';
import 'package:$name/$configImport';
import 'package:$name/$storageImport';

Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
AppConfig.current = AppConfig.of(Flavor.$flavor);

final prefs = await SharedPreferences.getInstance();

runApp(
  ProviderScope(
    overrides: [
      sharedPreferencesProvider.overrideWithValue(prefs),
    ],
    child: const MyApp(),
  ),
);
}
''';
  }
  return '''
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

import 'package:$name/app.dart';
import 'package:$name/$configImport';

void main() {
AppConfig.current = AppConfig.of(Flavor.$flavor);

runApp(
  const ProviderScope(
    child: MyApp(),
  ),
);
}
''';
}