RuStore Remote Config
This commit is contained in:
5
lib/application/services/remote_config/parameters.dart
Normal file
5
lib/application/services/remote_config/parameters.dart
Normal file
@@ -0,0 +1,5 @@
|
||||
import 'package:flutter_rustore_remoteconfig/rustore_remote_config.dart';
|
||||
|
||||
class ReverseNNRemoteConfigParameters extends StaticParameters {
|
||||
|
||||
}
|
||||
131
lib/application/services/remote_config/service.dart
Normal file
131
lib/application/services/remote_config/service.dart
Normal file
@@ -0,0 +1,131 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:developer';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_rustore_remoteconfig/flutter_rustore_remoteconfig.dart';
|
||||
import 'package:flutter_rustore_remoteconfig/rustore_remote_config.dart';
|
||||
import 'package:reverse_nn/application/dto/rule.dart';
|
||||
import 'package:reverse_nn/application/dto/schedule.dart';
|
||||
import 'package:reverse_nn/configuration.dart';
|
||||
import 'package:reverse_nn/application/services/remote_config/parameters.dart';
|
||||
|
||||
class ReverseNNRuStoreRemoteConfig {
|
||||
void create() {
|
||||
FlutterRustoreRemoteconfig.create(
|
||||
Configuration.ruStoreRemoteConfigAppID,
|
||||
PluginUpdateBehavior.defaultBehavior,
|
||||
15,
|
||||
ReverseNNRemoteConfigParameters(),
|
||||
onInitComplete: () {
|
||||
if(kDebugMode) { log('RuStore Remote Config - onInitComplete'); }
|
||||
},
|
||||
onFirstLoadComplete: () {
|
||||
if(kDebugMode) { log('RuStore Remote Config - onFirstLoadComplete'); }
|
||||
},
|
||||
onMemoryCacheUpdated: () {
|
||||
if(kDebugMode) { log('RuStore Remote Config - onMemoryCacheUpdated'); }
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
Future<DateTime> getStartScheduleDate() async {
|
||||
try {
|
||||
FlutterRustoreRemoteconfig.init();
|
||||
final remoteConfig = await FlutterRustoreRemoteconfig.getRemoteConfig();
|
||||
final startScheduleDate = remoteConfig.getString('startScheduleDate');
|
||||
|
||||
return startScheduleDate != null
|
||||
? DateTime.parse(startScheduleDate)
|
||||
: DateTime(2024, 8, 1);
|
||||
}
|
||||
catch (error) {
|
||||
if(kDebugMode) {
|
||||
log('ReverseNNRuStoreRemoteConfig.getStartScheduleDate - error - ${error.toString()}');
|
||||
}
|
||||
return DateTime(2024, 8, 1);
|
||||
}
|
||||
}
|
||||
|
||||
Future<DateTime> getEndScheduleDate() async {
|
||||
try {
|
||||
FlutterRustoreRemoteconfig.init();
|
||||
final remoteConfig = await FlutterRustoreRemoteconfig.getRemoteConfig();
|
||||
final endScheduleDate = remoteConfig.getString('endScheduleDate');
|
||||
|
||||
return endScheduleDate != null
|
||||
? DateTime.parse(endScheduleDate)
|
||||
: DateTime(2025, 12, 31, 23, 59, 59, 999, 999);
|
||||
}
|
||||
catch (error) {
|
||||
if(kDebugMode) {
|
||||
log('ReverseNNRuStoreRemoteConfig.getEndScheduleDate - error - ${error.toString()}');
|
||||
}
|
||||
return DateTime(2025, 12, 31, 23, 59, 59, 999, 999);
|
||||
}
|
||||
}
|
||||
|
||||
Future<List<Rule>?> getRules() async {
|
||||
try {
|
||||
FlutterRustoreRemoteconfig.init();
|
||||
final remoteConfig = await FlutterRustoreRemoteconfig.getRemoteConfig();
|
||||
final rules = remoteConfig.getString('scheduleRules');
|
||||
|
||||
return rules != null
|
||||
? (jsonDecode(rules) as List<dynamic>).map((el) => Rule.fromJson(el)).toList()
|
||||
: await _getRulesFromStorage();
|
||||
}
|
||||
catch(error) {
|
||||
if(kDebugMode) {
|
||||
log('ReverseNNRuStoreRemoteConfig.getRules - error - ${error.toString()}');
|
||||
}
|
||||
return await _getRulesFromStorage();
|
||||
}
|
||||
}
|
||||
|
||||
Future<List<Rule>?> _getRulesFromStorage() async {
|
||||
final Map<String, dynamic>? schema = await _getSchemaFromStorage();
|
||||
if(schema == null || !schema.containsKey('rules')) return null;
|
||||
|
||||
return (schema['rules'] as List<dynamic>)
|
||||
.map((el) => Rule.fromJson(el))
|
||||
.toList();
|
||||
}
|
||||
|
||||
Future<List<ScheduleItem>?> getScheduleByKey(String key) async {
|
||||
try {
|
||||
FlutterRustoreRemoteconfig.init();
|
||||
final remoteConfig = await FlutterRustoreRemoteconfig.getRemoteConfig();
|
||||
final schedule = remoteConfig.getString('schedules-$key');
|
||||
|
||||
return schedule != null
|
||||
? (jsonDecode(schedule) as List<dynamic>)
|
||||
.map((el) => ScheduleItem.fromJson(el))
|
||||
.toList()
|
||||
: await _getScheduleByKeyFromStorage(key);
|
||||
}
|
||||
catch(error) {
|
||||
if(kDebugMode) {
|
||||
log('ReverseNNRuStoreRemoteConfig.getScheduleByKey($key) - error - ${error.toString()}');
|
||||
}
|
||||
return await _getScheduleByKeyFromStorage(key);
|
||||
}
|
||||
}
|
||||
|
||||
Future<List<ScheduleItem>?> _getScheduleByKeyFromStorage(String key) async {
|
||||
final Map<String, dynamic>? schema = await _getSchemaFromStorage();
|
||||
if(
|
||||
schema == null
|
||||
|| !schema.containsKey('schedules')
|
||||
|| !(schema['schedules'] as Map<String, dynamic>).containsKey(key)
|
||||
) return null;
|
||||
|
||||
return (schema['schedules'][key] as List<dynamic>)
|
||||
.map((el) => ScheduleItem.fromJson(el))
|
||||
.toList();
|
||||
}
|
||||
|
||||
Future<Map<String, dynamic>?> _getSchemaFromStorage() async {
|
||||
return jsonDecode(await rootBundle.loadString('assets/schedule.json'));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user