mirror of
https://github.com/Myzel394/quid_faciam_hodie.git
synced 2025-06-18 23:35:25 +02:00
improved loading
This commit is contained in:
parent
46b35f2b54
commit
24927627ab
@ -1,3 +1,4 @@
|
||||
import 'package:camera/camera.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
@ -11,6 +12,7 @@ import 'package:quid_faciam_hodie/screens/server_loading_screen.dart';
|
||||
import 'package:quid_faciam_hodie/screens/timeline_screen.dart';
|
||||
import 'package:quid_faciam_hodie/screens/welcome_screen.dart';
|
||||
|
||||
import 'managers/global_values_manager.dart';
|
||||
import 'models/memories.dart';
|
||||
|
||||
void main() async {
|
||||
@ -21,6 +23,9 @@ void main() async {
|
||||
DeviceOrientation.portraitDown,
|
||||
]);
|
||||
|
||||
GlobalValuesManager.setCameras(await availableCameras());
|
||||
GlobalValuesManager.initializeServer();
|
||||
|
||||
runApp(const MyApp());
|
||||
}
|
||||
|
||||
|
@ -4,6 +4,7 @@ import 'dart:typed_data';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:quid_faciam_hodie/enums.dart';
|
||||
import 'package:quid_faciam_hodie/foreign_types/memory.dart';
|
||||
import 'package:quid_faciam_hodie/managers/global_values_manager.dart';
|
||||
import 'package:supabase_flutter/supabase_flutter.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
|
||||
@ -15,6 +16,8 @@ class FileManager {
|
||||
static Map<String, Uint8List> fileCache = {};
|
||||
|
||||
static Future<Memory> getMemoryMetadata(final String id) async {
|
||||
await GlobalValuesManager.waitForServerInitialization();
|
||||
|
||||
final response = await supabase
|
||||
.from('memories')
|
||||
.select()
|
||||
@ -30,6 +33,8 @@ class FileManager {
|
||||
}
|
||||
|
||||
static uploadFile(final User user, final File file) async {
|
||||
await GlobalValuesManager.waitForServerInitialization();
|
||||
|
||||
final basename = uuid.v4();
|
||||
final extension = file.path.split('.').last;
|
||||
final filename = '$basename.$extension';
|
||||
@ -106,6 +111,8 @@ class FileManager {
|
||||
final bool disableDownloadCache = false,
|
||||
final bool disableFileCache = false,
|
||||
}) async {
|
||||
await GlobalValuesManager.waitForServerInitialization();
|
||||
|
||||
final tempDirectory = await getTemporaryDirectory();
|
||||
final filename = '${tempDirectory.path}/$path';
|
||||
final file = File(filename);
|
||||
@ -125,6 +132,8 @@ class FileManager {
|
||||
}
|
||||
|
||||
static Future<void> deleteFile(final String path) async {
|
||||
await GlobalValuesManager.waitForServerInitialization();
|
||||
|
||||
final response =
|
||||
await supabase.from('memories').delete().eq('location', path).execute();
|
||||
|
||||
|
@ -1,11 +1,15 @@
|
||||
import 'package:camera/camera.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:quid_faciam_hodie/constants/apis.dart';
|
||||
import 'package:supabase_flutter/supabase_flutter.dart';
|
||||
|
||||
class GlobalValuesManager {
|
||||
static bool _hasBeenInitialized = false;
|
||||
static Future? _serverInitializationFuture;
|
||||
static bool _isServerInitialized = false;
|
||||
static List<CameraDescription> _cameras = [];
|
||||
|
||||
static List<CameraDescription> get cameras => [..._cameras];
|
||||
static bool get hasBeenInitialized => _hasBeenInitialized;
|
||||
static bool get isServerInitialized => _isServerInitialized;
|
||||
|
||||
static void setCameras(List<CameraDescription> cameras) {
|
||||
if (_cameras.isNotEmpty) {
|
||||
@ -15,7 +19,30 @@ class GlobalValuesManager {
|
||||
_cameras = cameras;
|
||||
}
|
||||
|
||||
static void setHasBeenInitialized(bool hasBeenInitialized) {
|
||||
_hasBeenInitialized = hasBeenInitialized;
|
||||
static void initializeServer() {
|
||||
if (_isServerInitialized || _serverInitializationFuture != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
_serverInitializationFuture = Supabase.initialize(
|
||||
url: SUPABASE_API_URL,
|
||||
anonKey: SUPABASE_API_KEY,
|
||||
debug: kDebugMode,
|
||||
)..then((_) {
|
||||
_isServerInitialized = true;
|
||||
_serverInitializationFuture = null;
|
||||
});
|
||||
}
|
||||
|
||||
static Future<void> waitForServerInitialization() async {
|
||||
if (_serverInitializationFuture == null) {
|
||||
if (_isServerInitialized) {
|
||||
return;
|
||||
} else {
|
||||
throw Exception('Server has not been initialized yet');
|
||||
}
|
||||
}
|
||||
|
||||
await _serverInitializationFuture;
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
import 'package:property_change_notifier/property_change_notifier.dart';
|
||||
import 'package:quid_faciam_hodie/foreign_types/memory.dart';
|
||||
import 'package:quid_faciam_hodie/managers/global_values_manager.dart';
|
||||
import 'package:supabase_flutter/supabase_flutter.dart';
|
||||
|
||||
final supabase = Supabase.instance.client;
|
||||
@ -10,10 +11,10 @@ class Memories extends PropertyChangeNotifier<String> {
|
||||
Memories();
|
||||
|
||||
RealtimeSubscription? _serverSubscription;
|
||||
bool _isInitializing = true;
|
||||
bool _isInitialized = false;
|
||||
|
||||
List<Memory> get memories => _memories;
|
||||
bool get isInitializing => _isInitializing;
|
||||
bool get isInitialized => _isInitialized;
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
@ -42,9 +43,9 @@ class Memories extends PropertyChangeNotifier<String> {
|
||||
notifyListeners('memories');
|
||||
}
|
||||
|
||||
void setIsInitializing(final bool value) {
|
||||
_isInitializing = value;
|
||||
notifyListeners('isInitializing');
|
||||
void setIsInitialized(final bool value) {
|
||||
_isInitialized = value;
|
||||
notifyListeners('isInitialized');
|
||||
}
|
||||
|
||||
void sortMemories() {
|
||||
@ -53,11 +54,11 @@ class Memories extends PropertyChangeNotifier<String> {
|
||||
}
|
||||
|
||||
Future<void> initialize() async {
|
||||
setIsInitializing(true);
|
||||
setIsInitialized(false);
|
||||
|
||||
await _loadInitialData();
|
||||
|
||||
setIsInitializing(false);
|
||||
setIsInitialized(true);
|
||||
notifyListeners();
|
||||
|
||||
// Watch new updates
|
||||
@ -100,6 +101,8 @@ class Memories extends PropertyChangeNotifier<String> {
|
||||
}
|
||||
|
||||
Future<void> _loadInitialData() async {
|
||||
await GlobalValuesManager.waitForServerInitialization();
|
||||
|
||||
final response = await supabase
|
||||
.from('memories')
|
||||
.select()
|
||||
|
@ -62,7 +62,7 @@ class _MainScreenState extends AuthRequiredState<MainScreen> with Loadable {
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
callWithLoading(getLastPhoto);
|
||||
getLastPhoto();
|
||||
onNewCameraSelected(GlobalValuesManager.cameras[0]);
|
||||
}
|
||||
|
||||
|
@ -1,8 +1,6 @@
|
||||
import 'package:camera/camera.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:quid_faciam_hodie/constants/apis.dart';
|
||||
import 'package:quid_faciam_hodie/constants/spacing.dart';
|
||||
import 'package:quid_faciam_hodie/managers/global_values_manager.dart';
|
||||
import 'package:quid_faciam_hodie/models/memories.dart';
|
||||
@ -15,7 +13,12 @@ import 'welcome_screen.dart';
|
||||
class ServerLoadingScreen extends StatefulWidget {
|
||||
static const ID = 'server_loading';
|
||||
|
||||
const ServerLoadingScreen({Key? key}) : super(key: key);
|
||||
final String? nextScreen;
|
||||
|
||||
const ServerLoadingScreen({
|
||||
Key? key,
|
||||
this.nextScreen,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<ServerLoadingScreen> createState() => _ServerLoadingScreenState();
|
||||
@ -30,25 +33,20 @@ class _ServerLoadingScreenState extends State<ServerLoadingScreen> {
|
||||
}
|
||||
|
||||
Future<void> load() async {
|
||||
if (!GlobalValuesManager.hasBeenInitialized) {
|
||||
GlobalValuesManager.setCameras(await availableCameras());
|
||||
|
||||
await Supabase.initialize(
|
||||
url: SUPABASE_API_URL,
|
||||
anonKey: SUPABASE_API_KEY,
|
||||
debug: kDebugMode,
|
||||
);
|
||||
|
||||
GlobalValuesManager.setHasBeenInitialized(true);
|
||||
}
|
||||
await GlobalValuesManager.waitForServerInitialization();
|
||||
|
||||
final memories = context.read<Memories>();
|
||||
final session = Supabase.instance.client.auth.session();
|
||||
|
||||
if (session != null) {
|
||||
memories.initialize().then((_) {
|
||||
Navigator.pushReplacementNamed(context, MainScreen.ID);
|
||||
});
|
||||
if (!memories.isInitialized) {
|
||||
await memories.initialize();
|
||||
}
|
||||
|
||||
Navigator.pushReplacementNamed(
|
||||
context,
|
||||
widget.nextScreen ?? MainScreen.ID,
|
||||
);
|
||||
} else {
|
||||
Navigator.pushReplacementNamed(context, WelcomeScreen.ID);
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ import 'dart:typed_data';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:quid_faciam_hodie/constants/spacing.dart';
|
||||
import 'package:quid_faciam_hodie/enums.dart';
|
||||
import 'package:quid_faciam_hodie/screens/server_loading_screen.dart';
|
||||
import 'package:quid_faciam_hodie/screens/timeline_screen.dart';
|
||||
|
||||
import 'raw_memory_display.dart';
|
||||
@ -27,7 +28,14 @@ class TodayPhotoButton extends StatelessWidget {
|
||||
onTap: () async {
|
||||
onLeave();
|
||||
|
||||
await Navigator.pushNamed(context, TimelineScreen.ID);
|
||||
await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => ServerLoadingScreen(
|
||||
nextScreen: TimelineScreen.ID,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
onComeBack();
|
||||
},
|
||||
|
Loading…
x
Reference in New Issue
Block a user