Experimenten with database
This commit is contained in:
@@ -30,3 +30,5 @@ class AppDatabase extends _$AppDatabase {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final db = AppDatabase();
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import 'package:cabo_counter/data/db/database.dart';
|
||||||
import 'package:cabo_counter/data/dto/game_session.dart';
|
import 'package:cabo_counter/data/dto/game_session.dart';
|
||||||
import 'package:cabo_counter/services/local_storage_service.dart';
|
import 'package:cabo_counter/services/local_storage_service.dart';
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
@@ -11,7 +12,7 @@ class GameManager extends ChangeNotifier {
|
|||||||
/// sorts the list in descending order based on the creation date, and notifies listeners of the change.
|
/// sorts the list in descending order based on the creation date, and notifies listeners of the change.
|
||||||
/// It also saves the updated game sessions to local storage.
|
/// It also saves the updated game sessions to local storage.
|
||||||
/// Returns the index of the newly added session in the sorted list.
|
/// Returns the index of the newly added session in the sorted list.
|
||||||
int addGameSession(GameSession session) {
|
int addGameSession(GameSession session, AppDatabase db) {
|
||||||
session.addListener(() {
|
session.addListener(() {
|
||||||
notifyListeners(); // Propagate session changes
|
notifyListeners(); // Propagate session changes
|
||||||
});
|
});
|
||||||
@@ -19,6 +20,7 @@ class GameManager extends ChangeNotifier {
|
|||||||
gameList.sort((a, b) => b.createdAt.compareTo(a.createdAt));
|
gameList.sort((a, b) => b.createdAt.compareTo(a.createdAt));
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
LocalStorageService.saveGameSessions();
|
LocalStorageService.saveGameSessions();
|
||||||
|
db.gameSessionDao.insertGameSession(session);
|
||||||
return gameList.indexOf(session);
|
return gameList.indexOf(session);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import 'package:cabo_counter/core/custom_theme.dart';
|
import 'package:cabo_counter/core/custom_theme.dart';
|
||||||
|
import 'package:cabo_counter/data/db/database.dart';
|
||||||
import 'package:cabo_counter/l10n/generated/app_localizations.dart';
|
import 'package:cabo_counter/l10n/generated/app_localizations.dart';
|
||||||
import 'package:cabo_counter/presentation/views/tab_view.dart';
|
import 'package:cabo_counter/presentation/views/tab_view.dart';
|
||||||
import 'package:cabo_counter/services/config_service.dart';
|
import 'package:cabo_counter/services/config_service.dart';
|
||||||
@@ -6,6 +7,7 @@ import 'package:cabo_counter/services/local_storage_service.dart';
|
|||||||
import 'package:cabo_counter/services/version_service.dart';
|
import 'package:cabo_counter/services/version_service.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
Future<void> main() async {
|
Future<void> main() async {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
@@ -16,7 +18,12 @@ Future<void> main() async {
|
|||||||
// Initialize services
|
// Initialize services
|
||||||
await ConfigService.initConfig();
|
await ConfigService.initConfig();
|
||||||
await VersionService.init();
|
await VersionService.init();
|
||||||
runApp(const App());
|
runApp(
|
||||||
|
Provider<AppDatabase>(
|
||||||
|
create: (_) => db,
|
||||||
|
child: const App(),
|
||||||
|
),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
class App extends StatefulWidget {
|
class App extends StatefulWidget {
|
||||||
@@ -31,7 +38,6 @@ class _AppState extends State<App> with WidgetsBindingObserver {
|
|||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
WidgetsBinding.instance.addObserver(this);
|
WidgetsBinding.instance.addObserver(this);
|
||||||
LocalStorageService.loadGameSessions();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -53,7 +59,7 @@ class _AppState extends State<App> with WidgetsBindingObserver {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
LocalStorageService.loadGameSessions();
|
//LocalStorageService.loadGameSessions();
|
||||||
|
|
||||||
return CupertinoApp(
|
return CupertinoApp(
|
||||||
localizationsDelegates: AppLocalizations.localizationsDelegates,
|
localizationsDelegates: AppLocalizations.localizationsDelegates,
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import 'package:cabo_counter/core/constants.dart';
|
import 'package:cabo_counter/core/constants.dart';
|
||||||
import 'package:cabo_counter/core/custom_theme.dart';
|
import 'package:cabo_counter/core/custom_theme.dart';
|
||||||
|
import 'package:cabo_counter/data/db/database.dart';
|
||||||
import 'package:cabo_counter/data/dto/game_manager.dart';
|
import 'package:cabo_counter/data/dto/game_manager.dart';
|
||||||
import 'package:cabo_counter/data/dto/game_session.dart';
|
import 'package:cabo_counter/data/dto/game_session.dart';
|
||||||
import 'package:cabo_counter/data/dto/player.dart';
|
import 'package:cabo_counter/data/dto/player.dart';
|
||||||
@@ -11,6 +12,7 @@ import 'package:cabo_counter/services/config_service.dart';
|
|||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
|
import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
import 'package:uuid/uuid.dart';
|
import 'package:uuid/uuid.dart';
|
||||||
|
|
||||||
enum CreateStatus {
|
enum CreateStatus {
|
||||||
@@ -479,7 +481,9 @@ class _CreateGameViewState extends State<CreateGameView> {
|
|||||||
caboPenalty: ConfigService.getCaboPenalty(),
|
caboPenalty: ConfigService.getCaboPenalty(),
|
||||||
isPointsLimitEnabled: isPointsLimitEnabled,
|
isPointsLimitEnabled: isPointsLimitEnabled,
|
||||||
isGameFinished: false);
|
isGameFinished: false);
|
||||||
gameManager.addGameSession(gameSession);
|
|
||||||
|
final db = Provider.of<AppDatabase>(context, listen: false);
|
||||||
|
gameManager.addGameSession(gameSession, db);
|
||||||
final session = gameManager.getGameSessionById(gameId) ?? gameSession;
|
final session = gameManager.getGameSessionById(gameId) ?? gameSession;
|
||||||
|
|
||||||
Navigator.pushAndRemoveUntil(
|
Navigator.pushAndRemoveUntil(
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import 'package:cabo_counter/core/constants.dart';
|
import 'package:cabo_counter/core/constants.dart';
|
||||||
import 'package:cabo_counter/core/custom_theme.dart';
|
import 'package:cabo_counter/core/custom_theme.dart';
|
||||||
|
import 'package:cabo_counter/data/db/database.dart';
|
||||||
import 'package:cabo_counter/data/dto/game_manager.dart';
|
import 'package:cabo_counter/data/dto/game_manager.dart';
|
||||||
import 'package:cabo_counter/data/dto/game_session.dart';
|
import 'package:cabo_counter/data/dto/game_session.dart';
|
||||||
import 'package:cabo_counter/l10n/generated/app_localizations.dart';
|
import 'package:cabo_counter/l10n/generated/app_localizations.dart';
|
||||||
@@ -7,9 +8,9 @@ import 'package:cabo_counter/presentation/views/home/active_game/active_game_vie
|
|||||||
import 'package:cabo_counter/presentation/views/home/create_game_view.dart';
|
import 'package:cabo_counter/presentation/views/home/create_game_view.dart';
|
||||||
import 'package:cabo_counter/presentation/views/home/settings_view.dart';
|
import 'package:cabo_counter/presentation/views/home/settings_view.dart';
|
||||||
import 'package:cabo_counter/services/config_service.dart';
|
import 'package:cabo_counter/services/config_service.dart';
|
||||||
import 'package:cabo_counter/services/local_storage_service.dart';
|
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
|
||||||
enum PreRatingDialogDecision { yes, no, cancel }
|
enum PreRatingDialogDecision { yes, no, cancel }
|
||||||
@@ -31,16 +32,34 @@ class MainMenuView extends StatefulWidget {
|
|||||||
|
|
||||||
class _MainMenuViewState extends State<MainMenuView> {
|
class _MainMenuViewState extends State<MainMenuView> {
|
||||||
bool _isLoading = true;
|
bool _isLoading = true;
|
||||||
|
late final AppDatabase db;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
initState() {
|
initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
LocalStorageService.loadGameSessions().then((_) {
|
db = Provider.of<AppDatabase>(context, listen: false);
|
||||||
|
|
||||||
|
db.gameSessionDao.getAllGameSessions().then((gameSessions) {
|
||||||
|
print(
|
||||||
|
'[MainMenuView] Loaded ${gameSessions.length} game sessions from the database.');
|
||||||
|
for (final session in gameSessions) {
|
||||||
|
gameManager.addGameSession(session, db);
|
||||||
|
}
|
||||||
|
|
||||||
|
print('[MainMenuView] Game sessions loaded successfully.');
|
||||||
|
setState(() {
|
||||||
|
_isLoading = false;
|
||||||
|
});
|
||||||
|
}).catchError((error) {
|
||||||
|
print('[MainMenuView] Error loading game sessions: $error');
|
||||||
|
});
|
||||||
|
|
||||||
|
/* LocalStorageService.loadGameSessions().then((_) {
|
||||||
setState(() {
|
setState(() {
|
||||||
_isLoading = false;
|
_isLoading = false;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
gameManager.addListener(_updateView);
|
gameManager.addListener(_updateView);*/
|
||||||
|
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) async {
|
WidgetsBinding.instance.addPostFrameCallback((_) async {
|
||||||
precacheImage(
|
precacheImage(
|
||||||
@@ -216,7 +235,16 @@ class _MainMenuViewState extends State<MainMenuView> {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
child: const Center(child: CupertinoActivityIndicator()),
|
child: Center(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
const CupertinoActivityIndicator(),
|
||||||
|
const SizedBox(height: 10),
|
||||||
|
Text(AppLocalizations.of(context).loading_games)
|
||||||
|
],
|
||||||
|
)),
|
||||||
),
|
),
|
||||||
)));
|
)));
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:cabo_counter/data/db/database.dart';
|
||||||
import 'package:cabo_counter/data/dto/game_manager.dart';
|
import 'package:cabo_counter/data/dto/game_manager.dart';
|
||||||
import 'package:cabo_counter/data/dto/game_session.dart';
|
import 'package:cabo_counter/data/dto/game_session.dart';
|
||||||
import 'package:file_picker/file_picker.dart';
|
import 'package:file_picker/file_picker.dart';
|
||||||
@@ -173,12 +174,12 @@ class LocalStorageService {
|
|||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
for (GameSession s in importedList) {
|
for (GameSession s in importedList) {
|
||||||
_importSession(s);
|
_importSession(s, db);
|
||||||
}
|
}
|
||||||
} else if (await _validateJsonSchema(jsonString, false)) {
|
} else if (await _validateJsonSchema(jsonString, false)) {
|
||||||
// Checks if the JSON String is in the single game format
|
// Checks if the JSON String is in the single game format
|
||||||
final jsonData = json.decode(jsonString) as Map<String, dynamic>;
|
final jsonData = json.decode(jsonString) as Map<String, dynamic>;
|
||||||
_importSession(GameSession.fromJson(jsonData));
|
_importSession(GameSession.fromJson(jsonData), db);
|
||||||
} else {
|
} else {
|
||||||
return ImportStatus.validationError;
|
return ImportStatus.validationError;
|
||||||
}
|
}
|
||||||
@@ -199,13 +200,14 @@ class LocalStorageService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Imports a single game session into the gameList.
|
/// Imports a single game session into the gameList.
|
||||||
static Future<void> _importSession(GameSession session) async {
|
static Future<void> _importSession(
|
||||||
|
GameSession session, AppDatabase db) async {
|
||||||
if (gameManager.gameExistsInGameList(session.id)) {
|
if (gameManager.gameExistsInGameList(session.id)) {
|
||||||
print(
|
print(
|
||||||
'[local_storage_service.dart] Die Session mit der ID ${session.id} existiert bereits. Sie wird überschrieben.');
|
'[local_storage_service.dart] Die Session mit der ID ${session.id} existiert bereits. Sie wird überschrieben.');
|
||||||
gameManager.removeGameSessionById(session.id);
|
gameManager.removeGameSessionById(session.id);
|
||||||
}
|
}
|
||||||
gameManager.addGameSession(session);
|
gameManager.addGameSession(session, db);
|
||||||
print(
|
print(
|
||||||
'[local_storage_service.dart] Die Session mit der ID ${session.id} wurde erfolgreich importiert.');
|
'[local_storage_service.dart] Die Session mit der ID ${session.id} wurde erfolgreich importiert.');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ name: cabo_counter
|
|||||||
description: "Mobile app for the card game Cabo"
|
description: "Mobile app for the card game Cabo"
|
||||||
publish_to: 'none'
|
publish_to: 'none'
|
||||||
|
|
||||||
version: 0.5.8+685
|
version: 0.5.8+688
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ^3.5.4
|
sdk: ^3.5.4
|
||||||
|
|||||||
Reference in New Issue
Block a user