import 'dart:io'; import 'package:flutter/services.dart'; import 'package:halkyon_app/halkyon_app.dart'; import 'package:halkyon_meditate_flutter/src/app/licences.dart'; import 'package:halkyon_meditate_flutter/src/app/meditate_app.dart'; import 'package:halkyon_meditate_flutter/src/app/meditate_dependencies.dart'; import 'package:halkyon_ui/halkyon_ui.dart'; import 'package:material_ui/material_ui.dart'; import 'package:path/path.dart' as p; import 'package:serverpod_flutter/serverpod_flutter.dart'; Future main() async { WidgetsFlutterBinding.ensureInitialized(); // Noto Sans' notice (halkyon_ui), the flags' and Unicode CLDR's // (halkyon_app), and Lucide's for the app's icon. registerFontLicenses(); registerHalkyonAppLicenses(); registerLucideLicense(); // The instance the build names (`--dart-define=SERVER_URL=…`, or // `assets/config.json`): the first offered at the first start. final builtIn = Instance.parse(await getServerUrl())!; final device = await MeditateDevice.create(builtIn: builtIn); final instances = InstanceChoice( FileInstanceStore(File(p.join(device.support, 'instances.json'))), builtIn: builtIn, forget: device.storage.forget, sharesStorage: device.storage.sharesWith, ); await instances.load(usedBefore: device.storage.usedBefore()); // The device's appearance and language, read before the first frame so // that it opens in them. final look = await LookCubit.open( FileLookStore(File(p.join(device.support, 'look.json'))), ); runApp( // What's new in each release (Train's ADR 0030, D61), from // assets/whats_new/, shown once after an update. WhatsNewScope( whatsNew: WhatsNew( AssetWhatsNewSource(rootBundle), FileWhatsNewStore(File(p.join(device.support, 'whats_new.json'))), version: device.appVersion, ), // An instance chosen before: the app ran on this device already. usedBefore: instances.current != null, child: MeditateApp( choice: instances, // Only an instance of Halkyon Meditate: one of another Halkyon app's // answers too, but holds nothing of this app's. checker: ServerpodInstanceChecker(app: 'meditate'), open: (instance) => MeditateDependencies.create(instance, device), look: look, ), ), ); }