Adding sqflite and creating the database, mappers and User Field 🔨
continuous-integration/drone/push Build is passing Details

ContinueLocalManager
Emre KARTAL 2 years ago
parent 0e265bbead
commit 7d02d4747a

@ -0,0 +1,12 @@
class UserFields {
static final List<String> values = [
id, name, image, mail
];
static final String id = '_id';
static final String name = '_name';
static final String image = '_image';
static final String mail = '_mail';
}

@ -0,0 +1,26 @@
import '../../model/Stat.dart';
import '../../model/User.dart';
import '../fields/StatFields.dart';
class UserMapper {
static Map<String, dynamic> toJson(User user) {
return {
UserFields.id: user.id,
UserFields.name: user.name,
UserFields.image: user.image,
UserFields.mail: user.mail,
};
}
static User toModel(Map<String, dynamic> json) {
return User(
json[UserFields.id],
json[UserFields.name],
json[UserFields.image],
json[UserFields.mail],
[],
[],
Stat(0,0,0,0,0,0,0,0)
);
}
}

@ -0,0 +1,75 @@
import 'package:bowl_in/model/User.dart';
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';
import '../fields/UserFields.dart';
import '../mappers/UserMapper.dart';
class UserDatabase {
static final UserDatabase instance = UserDatabase._init();
static Database? _database;
UserDatabase._init();
Future<Database> get database async {
if (_database != null) return _database!;
_database = await _initDB('user.db');
return _database!;
}
Future<Database> _initDB(String filePath) async {
final dbPath = await getDatabasesPath();
final path = join(dbPath, filePath);
return await openDatabase(path, version: 1, onCreate: _createDB);
}
Future _createDB(Database db, int version) async {
final idType = 'INTEGER PRIMARY KEY AUTOINCREMENT';
final textType = 'TEXT NOT NULL';
final boolType = 'BOOLEAN NOT NULL';
final integerType = 'INTEGER NOT NULL';
await db.execute('''
CREATE TABLE $tableUser (
${UserFields.id} $idType,
${UserFields.name} $boolType,
${UserFields.image} $integerType,
${UserFields.mail} $textType,
)
''');
}
Future<void> createUser(User user) async {
final db = await instance.database;
await db.insert(tableUser, UserMapper.toJson(user));
}
Future<User?> readUser(int id) async {
final db = await instance.database;
final result = await db.query(
tableUser,
where: '${UserFields.id} = ?',
whereArgs: [id]);
return result.isNotEmpty ? UserMapper.toModel(result.first) : null;
}
Future<int> deleteUser(int id) async {
final db = await instance.database;
return await db.delete(
tableUser,
where: '${UserFields.id} = ?',
whereArgs: [id],
);
}
Future close() async {
final db = await instance.database;
db.close();
}
}

@ -1,3 +1,4 @@
import 'package:bowl_in/model/LocalManager/LocalData.dart';
import 'package:bowl_in/views/game_screen.dart'; import 'package:bowl_in/views/game_screen.dart';
import 'package:bowl_in/views/ingame_screen.dart'; import 'package:bowl_in/views/ingame_screen.dart';
import 'package:bowl_in/views/main_screen.dart'; import 'package:bowl_in/views/main_screen.dart';
@ -16,7 +17,7 @@ void main() {
} }
class MyApp extends StatelessWidget { class MyApp extends StatelessWidget {
static IManager controller = StubData(); static IManager controller = LocalData();
const MyApp({super.key}); const MyApp({super.key});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {

@ -16,4 +16,9 @@ class LocalData extends IManager{
_userMgr = UserManager(this); _userMgr = UserManager(this);
_gameMgr = GameManager(this); _gameMgr = GameManager(this);
} }
IUserManager get userMgr => _userMgr;
IGameManager get gameMgr => _gameMgr;
} }

@ -16,10 +16,21 @@ class UserManager extends IUserManager {
_initUser(); _initUser();
} }
_initUser() { _initUser() async {
String userJson = parent.storage.getItem('user'); var userJson = await parent.storage.getItem('user');
if (userJson == null || userJson =='') {
User user2 = User(
1,
"Unknown",
"./assets/images/image_user_cyan.png",
"",
[],
[],
Stat(0, 0, 0, 0, 0, 0, 0, 0));
parent.userCurrent = user2;
if (userJson != null) {
} else {
Map<String, dynamic> userMap = json.decode(userJson); Map<String, dynamic> userMap = json.decode(userJson);
User user = User( User user = User(
userMap['_id'], userMap['_id'],
@ -28,18 +39,9 @@ class UserManager extends IUserManager {
userMap['_mail'], userMap['_mail'],
[], [],
[], [],
new Stat(0, 0, 0, 0, 0, 0, 2.0, 3.0), Stat(0, 0, 0, 0, 0, 0, 2.0, 3.0),
); );
parent.userCurrent = user; parent.userCurrent = user;
} else {
parent.userCurrent = new User(
1,
"Unknown",
"./assets/images/image_user_cyan.png",
"david.d_almeida@etu.uca.fr",
[],
[],
Stat(0, 0, 0, 0, 0, 0, 0, 0));
} }
} }

@ -96,4 +96,17 @@ class Stat {
avgPinsPerRound = ((avgPinsPerRound * (nbGames-1)) + (totalpins/10))/nbGames; avgPinsPerRound = ((avgPinsPerRound * (nbGames-1)) + (totalpins/10))/nbGames;
} }
// Serialize to JSON
Map<String, dynamic> toJson() => {
'nbVictory': nbVictory,
'nbGames': nbGames,
'highscore': highscore,
'nbStrikes': nbStrikes,
'nbSpares': nbSpares,
'nbScore': nbScore,
'avgScore': avgScore,
'avgPinsPerRound': avgPinsPerRound,
};
} }

@ -25,7 +25,6 @@ class StubData extends IManager {
_initGameDetails(); _initGameDetails();
_initGame(); _initGame();
userCurrent = players[8] as User; userCurrent = players[8] as User;
userCurrent.games = [];
} }
IUserManager get userMgr => _userMgr; IUserManager get userMgr => _userMgr;

@ -1,3 +1,5 @@
import 'package:bowl_in/database/fields/UserFields.dart';
import 'Achievement.dart'; import 'Achievement.dart';
import 'Game.dart'; import 'Game.dart';
import 'Player.dart'; import 'Player.dart';
@ -42,4 +44,5 @@ class User extends Player {
set stat(Stat value) { set stat(Stat value) {
_stat = value; _stat = value;
} }
} }

@ -156,10 +156,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: go_router name: go_router
sha256: b4bb06205ec607278b6fc23db238278417bca84a3905779cc68d1eb7afae37e2 sha256: e2a90e1d4eed378ea12e0771be9e32766a2f8d2de3064e42f3a55f1b04fb8af8
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.2.0" version: "6.4.1"
google_fonts: google_fonts:
dependency: "direct main" dependency: "direct main"
description: description:
@ -276,34 +276,34 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: path_provider name: path_provider
sha256: "04890b994ee89bfa80bf3080bfec40d5a92c5c7a785ebb02c13084a099d2b6f9" sha256: c7edf82217d4b2952b2129a61d3ad60f1075b9299e629e149a8d2e39c2e6aad4
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.13" version: "2.0.14"
path_provider_android: path_provider_android:
dependency: transitive dependency: transitive
description: description:
name: path_provider_android name: path_provider_android
sha256: "7623b7d4be0f0f7d9a8b5ee6879fc13e4522d4c875ab86801dee4af32b54b83e" sha256: "019f18c9c10ae370b08dce1f3e3b73bc9f58e7f087bb5e921f06529438ac0ae7"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.23" version: "2.0.24"
path_provider_foundation: path_provider_foundation:
dependency: transitive dependency: transitive
description: description:
name: path_provider_foundation name: path_provider_foundation
sha256: eec003594f19fe2456ea965ae36b3fc967bc5005f508890aafe31fa75e41d972 sha256: "12eee51abdf4d34c590f043f45073adbb45514a108bd9db4491547a2fd891059"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.2" version: "2.2.0"
path_provider_linux: path_provider_linux:
dependency: transitive dependency: transitive
description: description:
name: path_provider_linux name: path_provider_linux
sha256: "525ad5e07622d19447ad740b1ed5070031f7a5437f44355ae915ff56e986429a" sha256: "2ae08f2216225427e64ad224a24354221c2c7907e448e6e0e8b57b1eb9f10ad1"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.9" version: "2.1.10"
path_provider_platform_interface: path_provider_platform_interface:
dependency: transitive dependency: transitive
description: description:
@ -316,10 +316,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: path_provider_windows name: path_provider_windows
sha256: "642ddf65fde5404f83267e8459ddb4556316d3ee6d511ed193357e25caa3632d" sha256: f53720498d5a543f9607db4b0e997c4b5438884de25b0f73098cc2671a51b130
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.4" version: "2.1.5"
petitparser: petitparser:
dependency: transitive dependency: transitive
description: description:
@ -348,10 +348,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: pointycastle name: pointycastle
sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346 sha256: ae73e842cdd27a3467a71d70cefd9b198538aab4fc7dde1d0e8c78c96225abf0
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.6.2" version: "3.7.1"
process: process:
dependency: transitive dependency: transitive
description: description:
@ -381,6 +381,22 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.9.1" version: "1.9.1"
sqflite:
dependency: "direct main"
description:
name: sqflite
sha256: "500d6fec583d2c021f2d25a056d96654f910662c64f836cd2063167b8f1fa758"
url: "https://pub.dev"
source: hosted
version: "2.2.6"
sqflite_common:
dependency: transitive
description:
name: sqflite_common
sha256: "963dad8c4aa2f814ce7d2d5b1da2f36f31bd1a439d8f27e3dc189bb9d26bc684"
url: "https://pub.dev"
source: hosted
version: "2.4.3"
stack_trace: stack_trace:
dependency: transitive dependency: transitive
description: description:
@ -405,6 +421,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.2.0" version: "1.2.0"
synchronized:
dependency: transitive
description:
name: synchronized
sha256: "33b31b6beb98100bf9add464a36a8dd03eb10c7a8cf15aeec535e9b054aaf04b"
url: "https://pub.dev"
source: hosted
version: "3.0.1"
term_glyph: term_glyph:
dependency: transitive dependency: transitive
description: description:
@ -465,10 +489,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: xml name: xml
sha256: ac0e3f4bf00ba2708c33fbabbbe766300e509f8c82dbd4ab6525039813f7e2fb sha256: "979ee37d622dec6365e2efa4d906c37470995871fe9ae080d967e192d88286b5"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.1.0" version: "6.2.2"
yaml: yaml:
dependency: transitive dependency: transitive
description: description:

@ -42,6 +42,7 @@ dependencies:
uuid: ^3.0.7 uuid: ^3.0.7
localstorage: ^4.0.0+1 localstorage: ^4.0.0+1
intl: ^0.18.0 intl: ^0.18.0
sqflite: ^2.0.0+3
dev_dependencies: dev_dependencies:

Loading…
Cancel
Save