mirror of
https://github.com/Iconica-Development/flutter_availability.git
synced 2025-05-18 20:53:45 +02:00
feat: change local data interface implementation to singleton
According to our agreed appshell architecture we will make the local implementations as singletons to represent a single source persistent layer, like a database. On top of that, the service should be usable across multiple instances of the service, even if no datasource is provided.
This commit is contained in:
parent
1473ea1a7a
commit
12bde64117
5 changed files with 25 additions and 16 deletions
|
@ -3,7 +3,6 @@ import "dart:async";
|
|||
import "package:flutter/material.dart";
|
||||
import "package:flutter_availability/src/config/availability_translations.dart";
|
||||
import "package:flutter_availability/src/service/errors.dart";
|
||||
import "package:flutter_availability/src/service/local_data_interface.dart";
|
||||
import "package:flutter_availability/src/ui/widgets/defaults/default_base_screen.dart";
|
||||
import "package:flutter_availability/src/ui/widgets/defaults/default_buttons.dart";
|
||||
import "package:flutter_availability/src/ui/widgets/defaults/default_confirmation_dialog.dart";
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
library flutter_availability_data_interface;
|
||||
|
||||
export "src/data_interface.dart";
|
||||
export "src/local_repository/local_data_interface.dart";
|
||||
export "src/models/availability.dart";
|
||||
export "src/models/templates.dart";
|
||||
export "src/service/availability_service.dart";
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
import "package:flutter/material.dart";
|
||||
import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart";
|
||||
|
||||
/// Returns the default local availabilities for a user
|
||||
|
@ -36,18 +35,18 @@ List<AvailabilityModel> getDefaultLocalAvailabilitiesForUser() {
|
|||
List<AvailabilityTemplateModel> getDefaultLocalTemplatesForUser() {
|
||||
var currentMonth = DateTime(DateTime.now().year, DateTime.now().month);
|
||||
return [
|
||||
for (var template in <(String, String, Color)>[
|
||||
("1", "Morning", Colors.blue),
|
||||
("2", "Afternoon", Colors.green),
|
||||
("3", "Evening", Colors.red),
|
||||
("4", "Night", Colors.purple),
|
||||
("5", "All day", Colors.orange),
|
||||
for (var template in <(String, String, int)>[
|
||||
("1", "Morning", 0xFF0000FF),
|
||||
("2", "Afternoon", 0xFF00FF00),
|
||||
("3", "Evening", 0xFFFF0000),
|
||||
("4", "Night", 0xFFFF00FF),
|
||||
("5", "All day", 0xFF9999),
|
||||
]) ...[
|
||||
AvailabilityTemplateModel(
|
||||
id: template.$1,
|
||||
userId: "",
|
||||
name: template.$2,
|
||||
color: template.$3.value,
|
||||
color: template.$3,
|
||||
templateType: AvailabilityTemplateType.day,
|
||||
templateData: DayTemplateData(
|
||||
startTime: currentMonth,
|
|
@ -1,17 +1,26 @@
|
|||
import "dart:async";
|
||||
|
||||
import "package:flutter_availability/src/service/initial_data.dart";
|
||||
import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart";
|
||||
import "package:flutter_availability_data_interface/src/local_repository/initial_data.dart";
|
||||
import "package:rxdart/rxdart.dart";
|
||||
|
||||
/// A local implementation of the [AvailabilityDataInterface] that stores data
|
||||
/// in memory.
|
||||
class LocalAvailabilityDataInterface implements AvailabilityDataInterface {
|
||||
/// Creates a representation of the local data interface.
|
||||
///
|
||||
LocalAvailabilityDataInterface() {
|
||||
/// A second call of the constructor will return the same value as earlier
|
||||
/// calls according to the singleton principle
|
||||
factory LocalAvailabilityDataInterface() =>
|
||||
_localDataInterface ??= LocalAvailabilityDataInterface._();
|
||||
|
||||
LocalAvailabilityDataInterface._() {
|
||||
_notifyAvailabilityChanges();
|
||||
_notifyTemplateChanges();
|
||||
}
|
||||
|
||||
static LocalAvailabilityDataInterface? _localDataInterface;
|
||||
|
||||
final Map<String, List<AvailabilityModel>> _userAvailabilities = {
|
||||
"": getDefaultLocalAvailabilitiesForUser(),
|
||||
};
|
||||
|
@ -21,9 +30,9 @@ class LocalAvailabilityDataInterface implements AvailabilityDataInterface {
|
|||
};
|
||||
|
||||
final StreamController<Map<String, List<AvailabilityModel>>>
|
||||
_availabilityController = StreamController.broadcast();
|
||||
_availabilityController = BehaviorSubject();
|
||||
final StreamController<Map<String, List<AvailabilityTemplateModel>>>
|
||||
_templateController = StreamController.broadcast();
|
||||
_templateController = BehaviorSubject();
|
||||
|
||||
void _notifyAvailabilityChanges() {
|
||||
_availabilityController.add(_userAvailabilities);
|
|
@ -1,4 +1,5 @@
|
|||
import "package:flutter_availability_data_interface/src/data_interface.dart";
|
||||
import "package:flutter_availability_data_interface/src/local_repository/local_data_interface.dart";
|
||||
import "package:flutter_availability_data_interface/src/models/availability.dart";
|
||||
import "package:flutter_availability_data_interface/src/models/templates.dart";
|
||||
import "package:flutter_availability_data_interface/src/utils/public.dart";
|
||||
|
@ -7,10 +8,10 @@ import "package:rxdart/rxdart.dart";
|
|||
///
|
||||
class AvailabilityService {
|
||||
///
|
||||
const AvailabilityService({
|
||||
AvailabilityService({
|
||||
required this.userId,
|
||||
required this.dataInterface,
|
||||
});
|
||||
AvailabilityDataInterface? dataInterface,
|
||||
}) : dataInterface = dataInterface ?? LocalAvailabilityDataInterface();
|
||||
|
||||
/// The user id for which the availabilities are managed
|
||||
final String userId;
|
||||
|
|
Loading…
Reference in a new issue