//import 'package:audioplayers/audioplayers.dart'; import 'dart:convert'; import 'dart:io'; import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; import 'package:flutter/services.dart'; // TODO // import 'package:flutter_beacon/flutter_beacon.dart'; import 'package:get/get.dart'; import 'package:mapbox_maps_flutter/mapbox_maps_flutter.dart'; import 'package:mymuseum_visitapp/Helpers/requirement_state_controller.dart'; import 'package:mymuseum_visitapp/Models/articleRead.dart'; import 'package:mymuseum_visitapp/Screens/Home/home_3.0.dart'; import 'package:mymuseum_visitapp/l10n/app_localizations.dart'; import 'package:path_provider/path_provider.dart'; import 'package:provider/provider.dart'; import 'Helpers/DatabaseHelper.dart'; import 'Models/visitContext.dart'; import 'app_context.dart'; import 'client.dart'; import 'constants.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); String initialRoute; VisitAppContext? localContext = await DatabaseHelper.instance.getData(DatabaseTableType.main); Directory? appDocumentsDirectory = Platform.isIOS ? await getApplicationDocumentsDirectory() : await getDownloadsDirectory(); String localPath = appDocumentsDirectory!.path; MapboxOptions.setAccessToken("pk.eyJ1IjoidGZyYW5zb2xldCIsImEiOiJjbHRpcGNvZDYwYWhkMnFxdmF0ampveW10In0.7xHN0NGvUfQu5ThS3RGJRw"); // TODO put in json file or resource file if(localContext != null) { print("we've got an local db !"); print(localContext); List articleReadTest = List.from(await DatabaseHelper.instance.getData(DatabaseTableType.articleRead)); localContext.readSections = articleReadTest; } else { localContext = VisitAppContext(language: "FR", id: "UserId_Init", instanceId: kInstanceId, isAdmin: false, isAllLanguages: false); DatabaseHelper.instance.insert(DatabaseTableType.main, localContext.toMap()); List articleReadTest = List.from(await DatabaseHelper.instance.getData(DatabaseTableType.articleRead)); localContext.readSections = articleReadTest; print(localContext.readSections); print("NO LOCAL DB !"); } // Bootstrap API key if not yet stored if (localContext.apiKey == null && kInstancePinCode.isNotEmpty) { try { final resp = await http.get(Uri.parse( '$kApiBaseUrl/api/instance/app-key?pinCode=$kInstancePinCode&appType=VisitApp')); if (resp.statusCode == 200) { localContext.apiKey = jsonDecode(resp.body)['key'] as String?; DatabaseHelper.instance.updateTableMain(DatabaseTableType.main, localContext); } } catch (e) { print('Bootstrap apiKey failed: $e'); } } // Always initialize clientAPI with the current apiKey localContext.clientAPI = Client(kApiBaseUrl, apiKey: localContext.apiKey); localContext.localPath = localPath; print("Local path $localPath"); initialRoute = '/home'; final MyApp myApp = MyApp( initialRoute: initialRoute, visitAppContext: localContext, ); /*final AudioContext audioContext = AudioContext( iOS: AudioContextIOS( //defaultToSpeaker: true, category: AVAudioSessionCategory.ambient, options: [ AVAudioSessionOptions.defaultToSpeaker, AVAudioSessionOptions.mixWithOthers, ], ),*/ /*android: AudioContextAndroid( isSpeakerphoneOn: true, stayAwake: true, contentType: AndroidContentType.sonification, usageType: AndroidUsageType.assistanceSonification, audioFocus: AndroidAudioFocus.none, ),*/ //); //AudioPlayer.global.setGlobalAudioContext(audioContext); WidgetsFlutterBinding.ensureInitialized(); SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle( systemNavigationBarColor: Colors.transparent, // ← important statusBarColor: Colors.transparent, )); runApp(myApp); } class MyApp extends StatefulWidget { String initialRoute = ""; VisitAppContext visitAppContext; MyApp({Key? key, required this.initialRoute, required this.visitAppContext}) : super(key: key); @override _MyAppState createState() => _MyAppState(); } class _MyAppState extends State { @override Widget build(BuildContext context) { Get.put(RequirementStateController()); return ChangeNotifierProvider( create: (_) => AppContext(widget.visitAppContext), child: MaterialApp( debugShowCheckedModeBanner: false, title: 'Carnaval de Marche', //'Musée de la fraise' // Autres // 'Fort Saint Héribert' initialRoute: widget.initialRoute, localizationsDelegates: const [ AppLocalizations.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], supportedLocales: const[ Locale('en', ''), Locale('fr', ''), ], theme: ThemeData( primarySwatch: Colors.blue, scaffoldBackgroundColor: kBackgroundColor, //fontFamily: "Vollkorn", textTheme: TextTheme(bodyLarge: TextStyle(color: widget.visitAppContext.configuration != null ? widget.visitAppContext.configuration!.primaryColor != null ? Color(int.parse(widget.visitAppContext.configuration!.primaryColor!.split('(0x')[1].split(')')[0], radix: 16)): kMainColor1 : kMainColor1)), visualDensity: VisualDensity.adaptivePlatformDensity, appBarTheme: const AppBarTheme( iconTheme: IconThemeData(color: Colors.white), // Change the color here ), ), routes: { '/home': (context) => const HomePage3(), } ), ); } }