glp-companion/lib/main.dart

82 lines
2.5 KiB
Dart

import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:logging/logging.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
import 'app/router/app_router.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
// Surface package:logging records (notably supabase_flutter's auth and
// deep-link diagnostics, e.g. "handle deeplink uri" or exchange errors
// that are otherwise silently swallowed) to the debug console so OAuth
// handoff issues are observable under `flutter run`.
if (kDebugMode) {
Logger.root.level = Level.ALL;
Logger.root.onRecord.listen((record) {
final suffix =
record.error != null ? ' | error: ${record.error}' : '';
debugPrint('[${record.loggerName}] ${record.level.name}: '
'${record.message}$suffix');
});
}
// Load environment variables from .env
await dotenv.load(fileName: '.env');
final supabaseUrl = dotenv.env['SUPABASE_URL'] ?? '';
final supabaseKey = dotenv.env['SUPABASE_PUBLISHABLE_KEY'] ??
dotenv.env['SUPABASE_ANON_KEY'] ??
'';
if (supabaseUrl.isNotEmpty && supabaseKey.isNotEmpty) {
await Supabase.initialize(
url: supabaseUrl,
publishableKey: supabaseKey,
);
} else {
debugPrint(
'WARNING: SUPABASE_URL or SUPABASE_PUBLISHABLE_KEY missing in .env. Supabase client uninitialized.',
);
}
runApp(const ProviderScope(child: GLP1CompanionApp()));
}
class GLP1CompanionApp extends ConsumerWidget {
const GLP1CompanionApp({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
final router = ref.watch(routerProvider);
final isApple = !kIsWeb && (Platform.isIOS || Platform.isMacOS);
if (isApple) {
return CupertinoApp.router(
title: 'GLP-1 Companion',
routerConfig: router,
theme: const CupertinoThemeData(
brightness: Brightness.light,
primaryColor: CupertinoColors.activeGreen,
),
debugShowCheckedModeBanner: false,
);
}
return MaterialApp.router(
title: 'GLP-1 Companion',
routerConfig: router,
theme: ThemeData(
useMaterial3: true,
colorSchemeSeed: Colors.teal,
brightness: Brightness.light,
),
debugShowCheckedModeBanner: false,
);
}
}