MVP #141
@@ -1,39 +1,14 @@
|
|||||||
import 'dart:convert';
|
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
|
||||||
import 'package:game_tracker/core/custom_theme.dart';
|
import 'package:game_tracker/core/custom_theme.dart';
|
||||||
import 'package:game_tracker/core/enums.dart';
|
import 'package:game_tracker/core/enums.dart';
|
||||||
import 'package:game_tracker/presentation/widgets/tiles/settings_list_tile.dart';
|
import 'package:game_tracker/presentation/widgets/tiles/settings_list_tile.dart';
|
||||||
import 'package:game_tracker/services/data_transfer_service.dart';
|
import 'package:game_tracker/services/data_transfer_service.dart';
|
||||||
import 'package:json_schema/json_schema.dart';
|
|
||||||
|
|
||||||
class SettingsView extends StatefulWidget {
|
class SettingsView extends StatefulWidget {
|
||||||
const SettingsView({super.key});
|
const SettingsView({super.key});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<SettingsView> createState() => _SettingsViewState();
|
State<SettingsView> createState() => _SettingsViewState();
|
||||||
|
|
||||||
static Future<bool> validateJsonSchema(String jsonString) async {
|
|
||||||
final String schemaString;
|
|
||||||
|
|
||||||
schemaString = await rootBundle.loadString('assets/schema.json');
|
|
||||||
|
|
||||||
try {
|
|
||||||
final schema = JsonSchema.create(json.decode(schemaString));
|
|
||||||
final jsonData = json.decode(jsonString);
|
|
||||||
final result = schema.validate(jsonData);
|
|
||||||
|
|
||||||
if (result.isValid) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
} catch (e, stack) {
|
|
||||||
print('[validateJsonSchema] $e');
|
|
||||||
print(stack);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class _SettingsViewState extends State<SettingsView> {
|
class _SettingsViewState extends State<SettingsView> {
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'dart:typed_data';
|
|
||||||
|
|
||||||
import 'package:file_picker/file_picker.dart';
|
import 'package:file_picker/file_picker.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
import 'package:game_tracker/core/enums.dart';
|
import 'package:game_tracker/core/enums.dart';
|
||||||
import 'package:game_tracker/data/db/database.dart';
|
import 'package:game_tracker/data/db/database.dart';
|
||||||
import 'package:game_tracker/data/dto/game.dart';
|
import 'package:game_tracker/data/dto/game.dart';
|
||||||
import 'package:game_tracker/data/dto/group.dart';
|
import 'package:game_tracker/data/dto/group.dart';
|
||||||
import 'package:game_tracker/data/dto/player.dart';
|
import 'package:game_tracker/data/dto/player.dart';
|
||||||
import 'package:game_tracker/presentation/views/main_menu/settings_view.dart';
|
import 'package:json_schema/json_schema.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
class DataTransferService {
|
class DataTransferService {
|
||||||
@@ -85,7 +85,7 @@ class DataTransferService {
|
|||||||
return ImportResult.fileReadError;
|
return ImportResult.fileReadError;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (await SettingsView.validateJsonSchema(jsonString)) {
|
if (await _validateJsonSchema(jsonString)) {
|
||||||
final Map<String, dynamic> jsonData =
|
final Map<String, dynamic> jsonData =
|
||||||
json.decode(jsonString) as Map<String, dynamic>;
|
json.decode(jsonString) as Map<String, dynamic>;
|
||||||
|
|
||||||
@@ -136,4 +136,26 @@ class DataTransferService {
|
|||||||
if (file.path != null) return await File(file.path!).readAsString();
|
if (file.path != null) return await File(file.path!).readAsString();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Validates the given JSON string against the predefined schema.
|
||||||
|
static Future<bool> _validateJsonSchema(String jsonString) async {
|
||||||
|
final String schemaString;
|
||||||
|
|
||||||
|
schemaString = await rootBundle.loadString('assets/schema.json');
|
||||||
|
|
||||||
|
try {
|
||||||
|
final schema = JsonSchema.create(json.decode(schemaString));
|
||||||
|
final jsonData = json.decode(jsonString);
|
||||||
|
final result = schema.validate(jsonData);
|
||||||
|
|
||||||
|
if (result.isValid) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
} catch (e, stack) {
|
||||||
|
print('[validateJsonSchema] $e');
|
||||||
|
print(stack);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user