form pro - sin imagenes

This commit is contained in:
Felipe
2024-03-14 22:07:46 -05:00
parent 66125235dd
commit a3c50cf2c8
123 changed files with 2077 additions and 18345 deletions
@@ -1,5 +1,4 @@
import 'package:city_repository/city_repository.dart';
import 'package:city_repository/src/models/city_ui.dart';
abstract class CityRepository {
Future<List<CityUi>> getCities();
@@ -0,0 +1,6 @@
library profession_repository;
export 'src/models/models.dart';
export 'src/entities/entities.dart';
export 'src/repositories/profession_repo.dart';
export 'src/repositories/firebase_profession_repository.dart';
@@ -0,0 +1 @@
export '/src/entities/profession_entity.dart';
@@ -0,0 +1,29 @@
import 'package:equatable/equatable.dart';
class ProfessionEntity extends Equatable {
final String name;
const ProfessionEntity({required this.name});
Map<String, Object?> toDocument() {
return {
'name': name,
};
}
static ProfessionEntity fromDocument(Map<String, dynamic> doc) {
return ProfessionEntity(
name: doc['name'] as String,
);
}
@override
List<Object?> get props => [name];
@override
String toString() {
return '''ProfessionEntity {
name: $name
}''';
}
}
@@ -0,0 +1 @@
export 'profession_ui.dart';
@@ -0,0 +1,12 @@
import 'package:equatable/equatable.dart';
class ProfessionUi extends Equatable {
final String name;
const ProfessionUi({
required this.name,
});
@override
List<Object?> get props => [name];
}
@@ -0,0 +1,30 @@
import 'dart:developer';
import 'package:profession_repository/profession_repository.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
class FirebaseProfessionRepository implements ProfessionRepository {
final professionsCollection =
FirebaseFirestore.instance.collection('professions');
@override
Future<Professions> getProfessions() async {
try {
final doc = await professionsCollection.doc("professions").get();
return Professions.fromDocument(doc.data() as Map<String, dynamic>);
} catch (e) {
log('Error getting documents: $e');
rethrow;
}
}
}
class Professions {
final List<String> professions;
Professions(this.professions);
factory Professions.fromDocument(Map<String, dynamic> json) {
return Professions(List<String>.from(json['professions']));
}
}
@@ -0,0 +1,5 @@
import 'package:profession_repository/profession_repository.dart';
abstract class ProfessionRepository {
Future<Professions> getProfessions();
}
+266
View File
@@ -0,0 +1,266 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
_flutterfire_internals:
dependency: transitive
description:
name: _flutterfire_internals
sha256: "4eec93681221723a686ad580c2e7d960e1017cf1a4e0a263c2573c2c6b0bf5cd"
url: "https://pub.dev"
source: hosted
version: "1.3.25"
async:
dependency: transitive
description:
name: async
sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
url: "https://pub.dev"
source: hosted
version: "2.11.0"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
url: "https://pub.dev"
source: hosted
version: "2.1.1"
characters:
dependency: transitive
description:
name: characters
sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
url: "https://pub.dev"
source: hosted
version: "1.3.0"
clock:
dependency: transitive
description:
name: clock
sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
url: "https://pub.dev"
source: hosted
version: "1.1.1"
cloud_firestore:
dependency: "direct main"
description:
name: cloud_firestore
sha256: "31cfa4d65d6e9ea837234fffe121304034c30c9214c06207b4a35867e3757900"
url: "https://pub.dev"
source: hosted
version: "4.15.8"
cloud_firestore_platform_interface:
dependency: transitive
description:
name: cloud_firestore_platform_interface
sha256: a0097a26569b015faf8142e159e855241609ea9a1738b5fd1c40bfe8411b41a0
url: "https://pub.dev"
source: hosted
version: "6.1.9"
cloud_firestore_web:
dependency: transitive
description:
name: cloud_firestore_web
sha256: ed680ece29a5750985119c09cdc276b460c3a2fa80e8c12f9b7241f6b4a7ca16
url: "https://pub.dev"
source: hosted
version: "3.10.8"
collection:
dependency: transitive
description:
name: collection
sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
url: "https://pub.dev"
source: hosted
version: "1.18.0"
equatable:
dependency: "direct main"
description:
name: equatable
sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2
url: "https://pub.dev"
source: hosted
version: "2.0.5"
fake_async:
dependency: transitive
description:
name: fake_async
sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
url: "https://pub.dev"
source: hosted
version: "1.3.1"
firebase_core:
dependency: "direct main"
description:
name: firebase_core
sha256: "53316975310c8af75a96e365f9fccb67d1c544ef0acdbf0d88bbe30eedd1c4f9"
url: "https://pub.dev"
source: hosted
version: "2.27.0"
firebase_core_platform_interface:
dependency: transitive
description:
name: firebase_core_platform_interface
sha256: c437ae5d17e6b5cc7981cf6fd458a5db4d12979905f9aafd1fea930428a9fe63
url: "https://pub.dev"
source: hosted
version: "5.0.0"
firebase_core_web:
dependency: transitive
description:
name: firebase_core_web
sha256: c8e1d59385eee98de63c92f961d2a7062c5d9a65e7f45bdc7f1b0b205aab2492
url: "https://pub.dev"
source: hosted
version: "2.11.5"
flutter:
dependency: "direct main"
description: flutter
source: sdk
version: "0.0.0"
flutter_lints:
dependency: "direct dev"
description:
name: flutter_lints
sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04
url: "https://pub.dev"
source: hosted
version: "2.0.3"
flutter_test:
dependency: "direct dev"
description: flutter
source: sdk
version: "0.0.0"
flutter_web_plugins:
dependency: transitive
description: flutter
source: sdk
version: "0.0.0"
js:
dependency: transitive
description:
name: js
sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
url: "https://pub.dev"
source: hosted
version: "0.6.7"
lints:
dependency: transitive
description:
name: lints
sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452"
url: "https://pub.dev"
source: hosted
version: "2.1.1"
matcher:
dependency: transitive
description:
name: matcher
sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
url: "https://pub.dev"
source: hosted
version: "0.12.16"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
url: "https://pub.dev"
source: hosted
version: "0.5.0"
meta:
dependency: transitive
description:
name: meta
sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e
url: "https://pub.dev"
source: hosted
version: "1.10.0"
path:
dependency: transitive
description:
name: path
sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
url: "https://pub.dev"
source: hosted
version: "1.8.3"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
url: "https://pub.dev"
source: hosted
version: "2.1.8"
sky_engine:
dependency: transitive
description: flutter
source: sdk
version: "0.0.99"
source_span:
dependency: transitive
description:
name: source_span
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
url: "https://pub.dev"
source: hosted
version: "1.10.0"
stack_trace:
dependency: transitive
description:
name: stack_trace
sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
url: "https://pub.dev"
source: hosted
version: "1.11.1"
stream_channel:
dependency: transitive
description:
name: stream_channel
sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
url: "https://pub.dev"
source: hosted
version: "2.1.2"
string_scanner:
dependency: transitive
description:
name: string_scanner
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
url: "https://pub.dev"
source: hosted
version: "1.2.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
url: "https://pub.dev"
source: hosted
version: "1.2.1"
test_api:
dependency: transitive
description:
name: test_api
sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b"
url: "https://pub.dev"
source: hosted
version: "0.6.1"
vector_math:
dependency: transitive
description:
name: vector_math
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
url: "https://pub.dev"
source: hosted
version: "2.1.4"
web:
dependency: transitive
description:
name: web
sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152
url: "https://pub.dev"
source: hosted
version: "0.3.0"
sdks:
dart: ">=3.2.0 <4.0.0"
flutter: ">=3.3.0"
@@ -0,0 +1,26 @@
name: profession_repository
description: Dart package which manages the professions.
publish_to: "none"
version: 1.0.11+11
environment:
sdk: ">=2.19.3 <3.0.0"
dependencies:
flutter:
sdk: flutter
equatable: ^2.0.5
# Firebase
cloud_firestore: ^4.15.4
firebase_core: ^2.25.4
dev_dependencies:
flutter_lints: ^2.0.0
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
@@ -0,0 +1,4 @@
library professional_repository;
export 'src/entities/entities.dart';
export 'src/repositories/firebase_professional_repository.dart';
@@ -0,0 +1,4 @@
export '/src/entities/payment_method_entity.dart';
export '/src/entities/professional_entity.dart';
export '/src/entities/schedule_entity.dart';
export '/src/entities/schedules.dart';
@@ -0,0 +1,51 @@
import 'package:equatable/equatable.dart';
class PaymentMethodEntity extends Equatable {
final bool nequi;
final bool datafono;
final bool transferencia;
static const empty = PaymentMethodEntity(
nequi: false,
datafono: false,
transferencia: false,
);
const PaymentMethodEntity({
required this.nequi,
required this.datafono,
required this.transferencia,
});
static PaymentMethodEntity fromDocument(Map<String, dynamic> doc) {
return PaymentMethodEntity(
nequi: doc['nequi'] as bool,
datafono: doc['datafono'] as bool,
transferencia: doc['transferencia'] as bool,
);
}
Map<String, dynamic> toJson() {
return {
'nequi': nequi,
'datafono': datafono,
'transferencia': transferencia,
};
}
@override
List<Object?> get props => [
nequi,
datafono,
transferencia,
];
@override
String toString() {
return '''SettingEntity {
nequi: $nequi
datafono: $datafono
transferencia: $transferencia
}''';
}
}
@@ -0,0 +1,113 @@
import 'package:equatable/equatable.dart';
import 'package:professional_repository/professional_repository.dart';
class ProfessionalEntity extends Equatable {
final String id;
final String identification;
final String address;
final String profession;
final String rate;
final String location;
final String identificationPicture;
final String certificatePicture;
final String latitude;
final String longitude;
final List<String> specializations;
final List<String> specializationsPictures;
final Schedules schedules;
final PaymentMethodEntity paymentMethods;
const ProfessionalEntity({
required this.id,
required this.identification,
required this.address,
required this.profession,
required this.rate,
required this.location,
required this.identificationPicture,
required this.certificatePicture,
required this.latitude,
required this.longitude,
required this.specializations,
required this.specializationsPictures,
required this.schedules,
required this.paymentMethods,
});
static ProfessionalEntity fromDocument(Map<String, dynamic> doc) {
return ProfessionalEntity(
id: doc['id'] as String,
identification: doc['identification'] as String,
address: doc['address'] as String,
profession: doc['profession'] as String,
rate: doc['rate'] as String,
location: doc['location'] as String,
identificationPicture: doc['identification_picture'] as String,
certificatePicture: doc['certificate_picture'] as String,
latitude: doc['latitude'] as String,
longitude: doc['longitude'] as String,
specializations: List<String>.from(doc['specializations']),
specializationsPictures:
List<String>.from(doc['specializations_pictures']),
schedules: Schedules.fromDocument(doc['schedules']),
paymentMethods: PaymentMethodEntity.fromDocument(doc['payment_methods']),
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'identification': identification,
'address': address,
'profession': profession,
'rate': rate,
'location': location,
'identification_picture': identificationPicture,
'certificate_picture': certificatePicture,
'latitude': latitude,
'longitude': longitude,
'specializations': specializations,
'specializations_pictures': specializationsPictures,
'schedules': schedules.toJson(),
'payment_methods': paymentMethods.toJson(),
};
}
@override
List<Object?> get props => [
id,
identification,
address,
profession,
rate,
location,
identificationPicture,
certificatePicture,
latitude,
longitude,
specializations,
specializationsPictures,
schedules,
paymentMethods
];
@override
String toString() {
return '''ProfessionalEntity{ {
id: $id,
identification: $identification,
address: $address,
profession: $profession,
rate: $rate,
location: $location,
identificationPicture: $identificationPicture,
certificatePicture: $certificatePicture,
latitude: $latitude,
longitude: $longitude,
specializations: $specializations,
specializationsPictures: $specializationsPictures,
schedule: $schedules,
paymentMethods: $paymentMethods
}''';
}
}
@@ -0,0 +1,99 @@
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
class ScheduleEntity extends Equatable {
final bool enabled;
final bool continuousDay;
final TimeOfDay? range1Hour1;
final TimeOfDay? range1Hour2;
final TimeOfDay? range2Hour1;
final TimeOfDay? range2Hour2;
const ScheduleEntity({
required this.enabled,
required this.continuousDay,
required this.range1Hour1,
required this.range1Hour2,
required this.range2Hour1,
required this.range2Hour2,
});
static const empty = ScheduleEntity(
enabled: false,
continuousDay: false,
range1Hour1: null,
range1Hour2: null,
range2Hour1: null,
range2Hour2: null,
);
static ScheduleEntity fromDocument(Map<String, dynamic> doc) {
return ScheduleEntity(
enabled: doc['habilitado'] as bool,
continuousDay: doc['continuous_day'] as bool,
range1Hour1: _parseTime(doc['range1Hour1']),
range1Hour2: _parseTime(doc['range1Hour2']),
range2Hour1: _parseTime(doc['range2Hour1']),
range2Hour2: _parseTime(doc['range2Hour2']),
);
}
static TimeOfDay? _parseTime(String? time) {
if (time == null) return null;
final components = time.split(' ');
final hourMinutes = components[0].split(':');
final hour = int.parse(hourMinutes[0]);
final minutes = int.parse(hourMinutes[1]);
if (components[1] == 'PM' && hour < 12) {
return TimeOfDay(hour: hour + 12, minute: minutes);
} else if (components[1] == 'AM' && hour == 12) {
return TimeOfDay(hour: 0, minute: minutes);
}
return TimeOfDay(hour: hour, minute: minutes);
}
Map<String, dynamic> toJson() {
return {
'habilitado': enabled,
'continuous_day': continuousDay,
'range1Hour1': formatTimeOfDay(range1Hour1),
'range1Hour2': formatTimeOfDay(range1Hour2),
'range2Hour1': formatTimeOfDay(range2Hour1),
'range2Hour2': formatTimeOfDay(range2Hour2),
};
}
String? formatTimeOfDay(TimeOfDay? time) {
if (time != null) {
final now = DateTime.now();
final dateTime =
DateTime(now.year, now.month, now.day, time.hour, time.minute);
final format = DateFormat.jm();
return format.format(dateTime);
}
return null;
}
@override
List<Object?> get props => [
enabled,
continuousDay,
range1Hour1,
range1Hour2,
range2Hour1,
range2Hour2,
];
@override
String toString() {
return '''ScheduleEntity {
enabled: $enabled,
continuousDay: $continuousDay,
range1Hour1: $range1Hour1,
range1Hour2: $range1Hour2,
range2Hour1: $range2Hour1,
range2Hour2: $range2Hour2
}''';
}
}
@@ -0,0 +1,59 @@
import 'package:equatable/equatable.dart';
import 'package:professional_repository/src/entities/schedule_entity.dart';
class Schedules extends Equatable {
final ScheduleEntity monday;
final ScheduleEntity tuesday;
final ScheduleEntity wednesday;
final ScheduleEntity thursday;
final ScheduleEntity friday;
final ScheduleEntity saturday;
final ScheduleEntity sunday;
const Schedules(
{required this.monday,
required this.tuesday,
required this.wednesday,
required this.thursday,
required this.friday,
required this.saturday,
required this.sunday});
static const empty = Schedules(
monday: ScheduleEntity.empty,
tuesday: ScheduleEntity.empty,
wednesday: ScheduleEntity.empty,
thursday: ScheduleEntity.empty,
friday: ScheduleEntity.empty,
saturday: ScheduleEntity.empty,
sunday: ScheduleEntity.empty,
);
factory Schedules.fromDocument(Map<String, dynamic> doc) {
return Schedules(
monday: ScheduleEntity.fromDocument(doc['monday']),
tuesday: ScheduleEntity.fromDocument(doc['tuesday']),
wednesday: ScheduleEntity.fromDocument(doc['wednesday']),
thursday: ScheduleEntity.fromDocument(doc['thursday']),
friday: ScheduleEntity.fromDocument(doc['friday']),
saturday: ScheduleEntity.fromDocument(doc['saturday']),
sunday: ScheduleEntity.fromDocument(doc['sunday']),
);
}
Map<String, dynamic> toJson() {
return {
'monday': monday.toJson(),
'tuesday': tuesday.toJson(),
'wednesday': wednesday.toJson(),
'thursday': thursday.toJson(),
'friday': friday.toJson(),
'saturday': saturday.toJson(),
'sunday': sunday.toJson(),
};
}
@override
List<Object?> get props =>
[monday, tuesday, wednesday, thursday, friday, saturday, sunday];
}
@@ -0,0 +1,31 @@
import 'dart:async';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:professional_repository/professional_repository.dart';
class FirebaseProfessionalRepository {
bool isProModeActive = false;
final professionalCollection =
FirebaseFirestore.instance.collection('professional_info');
final StreamController<bool> _userStreamController =
StreamController.broadcast();
FirebaseProfessionalRepository() {
_userStreamController.add(isProModeActive);
}
Stream<bool> sreamIsProModeActive() {
return _userStreamController.stream;
}
switchProMode() async {
isProModeActive = !isProModeActive;
_userStreamController.add(isProModeActive);
}
Future<void> saveProfessionalInfo(ProfessionalEntity entity) async {
await professionalCollection.doc(entity.id).set(entity.toJson());
}
}
@@ -0,0 +1,274 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
_flutterfire_internals:
dependency: transitive
description:
name: _flutterfire_internals
sha256: "4eec93681221723a686ad580c2e7d960e1017cf1a4e0a263c2573c2c6b0bf5cd"
url: "https://pub.dev"
source: hosted
version: "1.3.25"
async:
dependency: transitive
description:
name: async
sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
url: "https://pub.dev"
source: hosted
version: "2.11.0"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
url: "https://pub.dev"
source: hosted
version: "2.1.1"
characters:
dependency: transitive
description:
name: characters
sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
url: "https://pub.dev"
source: hosted
version: "1.3.0"
clock:
dependency: transitive
description:
name: clock
sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
url: "https://pub.dev"
source: hosted
version: "1.1.1"
cloud_firestore:
dependency: "direct main"
description:
name: cloud_firestore
sha256: "31cfa4d65d6e9ea837234fffe121304034c30c9214c06207b4a35867e3757900"
url: "https://pub.dev"
source: hosted
version: "4.15.8"
cloud_firestore_platform_interface:
dependency: transitive
description:
name: cloud_firestore_platform_interface
sha256: a0097a26569b015faf8142e159e855241609ea9a1738b5fd1c40bfe8411b41a0
url: "https://pub.dev"
source: hosted
version: "6.1.9"
cloud_firestore_web:
dependency: transitive
description:
name: cloud_firestore_web
sha256: ed680ece29a5750985119c09cdc276b460c3a2fa80e8c12f9b7241f6b4a7ca16
url: "https://pub.dev"
source: hosted
version: "3.10.8"
collection:
dependency: transitive
description:
name: collection
sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
url: "https://pub.dev"
source: hosted
version: "1.18.0"
equatable:
dependency: "direct main"
description:
name: equatable
sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2
url: "https://pub.dev"
source: hosted
version: "2.0.5"
fake_async:
dependency: transitive
description:
name: fake_async
sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
url: "https://pub.dev"
source: hosted
version: "1.3.1"
firebase_core:
dependency: "direct main"
description:
name: firebase_core
sha256: "53316975310c8af75a96e365f9fccb67d1c544ef0acdbf0d88bbe30eedd1c4f9"
url: "https://pub.dev"
source: hosted
version: "2.27.0"
firebase_core_platform_interface:
dependency: transitive
description:
name: firebase_core_platform_interface
sha256: c437ae5d17e6b5cc7981cf6fd458a5db4d12979905f9aafd1fea930428a9fe63
url: "https://pub.dev"
source: hosted
version: "5.0.0"
firebase_core_web:
dependency: transitive
description:
name: firebase_core_web
sha256: c8e1d59385eee98de63c92f961d2a7062c5d9a65e7f45bdc7f1b0b205aab2492
url: "https://pub.dev"
source: hosted
version: "2.11.5"
flutter:
dependency: "direct main"
description: flutter
source: sdk
version: "0.0.0"
flutter_lints:
dependency: "direct dev"
description:
name: flutter_lints
sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04
url: "https://pub.dev"
source: hosted
version: "2.0.3"
flutter_test:
dependency: "direct dev"
description: flutter
source: sdk
version: "0.0.0"
flutter_web_plugins:
dependency: transitive
description: flutter
source: sdk
version: "0.0.0"
intl:
dependency: "direct main"
description:
name: intl
sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d"
url: "https://pub.dev"
source: hosted
version: "0.18.1"
js:
dependency: transitive
description:
name: js
sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
url: "https://pub.dev"
source: hosted
version: "0.6.7"
lints:
dependency: transitive
description:
name: lints
sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452"
url: "https://pub.dev"
source: hosted
version: "2.1.1"
matcher:
dependency: transitive
description:
name: matcher
sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
url: "https://pub.dev"
source: hosted
version: "0.12.16"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
url: "https://pub.dev"
source: hosted
version: "0.5.0"
meta:
dependency: transitive
description:
name: meta
sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e
url: "https://pub.dev"
source: hosted
version: "1.10.0"
path:
dependency: transitive
description:
name: path
sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
url: "https://pub.dev"
source: hosted
version: "1.8.3"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
url: "https://pub.dev"
source: hosted
version: "2.1.8"
sky_engine:
dependency: transitive
description: flutter
source: sdk
version: "0.0.99"
source_span:
dependency: transitive
description:
name: source_span
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
url: "https://pub.dev"
source: hosted
version: "1.10.0"
stack_trace:
dependency: transitive
description:
name: stack_trace
sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
url: "https://pub.dev"
source: hosted
version: "1.11.1"
stream_channel:
dependency: transitive
description:
name: stream_channel
sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
url: "https://pub.dev"
source: hosted
version: "2.1.2"
string_scanner:
dependency: transitive
description:
name: string_scanner
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
url: "https://pub.dev"
source: hosted
version: "1.2.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
url: "https://pub.dev"
source: hosted
version: "1.2.1"
test_api:
dependency: transitive
description:
name: test_api
sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b"
url: "https://pub.dev"
source: hosted
version: "0.6.1"
vector_math:
dependency: transitive
description:
name: vector_math
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
url: "https://pub.dev"
source: hosted
version: "2.1.4"
web:
dependency: transitive
description:
name: web
sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152
url: "https://pub.dev"
source: hosted
version: "0.3.0"
sdks:
dart: ">=3.2.0 <4.0.0"
flutter: ">=3.3.0"
@@ -0,0 +1,26 @@
name: professional_repository
description: Dart package which manages the professional data.
publish_to: "none"
version: 1.0.11+11
environment:
sdk: ">=2.19.3 <3.0.0"
dependencies:
flutter:
sdk: flutter
equatable: ^2.0.5
# Firebase
cloud_firestore: ^4.15.4
firebase_core: ^2.25.4
intl: ^0.18.1
dev_dependencies:
flutter_lints: ^2.0.0
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
@@ -1,6 +1,5 @@
library setting_repository;
export 'src/models/models.dart';
export 'src/entities/entities.dart';
export 'src/repositories/setting_repo.dart';
export 'src/repositories/firebase_setting_repository.dart';
@@ -1,19 +0,0 @@
import 'package:equatable/equatable.dart';
class SettingUi extends Equatable {
final String cityName;
final String coordsOfCity;
final String stateOfCity;
final String countryOfCity;
const SettingUi({
required this.cityName,
required this.coordsOfCity,
required this.stateOfCity,
required this.countryOfCity,
});
@override
List<Object?> get props =>
[cityName, coordsOfCity, stateOfCity, countryOfCity];
}
@@ -1,4 +1,5 @@
import 'package:equatable/equatable.dart';
import 'package:user_repository/src/models/models.dart';
class MyUserEntity extends Equatable {
final String id;
@@ -10,6 +11,7 @@ class MyUserEntity extends Equatable {
final String? picture;
final String? birthday;
final String? gender;
final ProState proState;
const MyUserEntity({
required this.id,
@@ -21,6 +23,7 @@ class MyUserEntity extends Equatable {
required this.picture,
required this.birthday,
required this.gender,
required this.proState,
});
Map<String, Object?> toDocument() {
@@ -34,6 +37,7 @@ class MyUserEntity extends Equatable {
'picture': picture,
'birthday': birthday,
'gender': gender,
'professional_state': enumToInt(proState),
};
}
@@ -48,6 +52,7 @@ class MyUserEntity extends Equatable {
picture: doc['picture'] as String?,
birthday: doc['birthday'] as String?,
gender: doc['gender'] as String?,
proState: intToEnum(doc['professional_state'] as int),
);
}
@@ -66,7 +71,8 @@ class MyUserEntity extends Equatable {
city: $city
picture: $picture
birthday: $birthday
gender: $gender
gender: $gender,
proState: ${proState.name}
}''';
}
}
@@ -1 +1,2 @@
export 'my_user.dart';
export 'my_user.dart';
export 'pro_state.dart';
@@ -1,6 +1,5 @@
import 'package:equatable/equatable.dart';
import '../entities/entities.dart';
import 'package:user_repository/user_repository.dart';
class MyUser extends Equatable {
final String id;
@@ -12,6 +11,7 @@ class MyUser extends Equatable {
final String? picture;
final String? birthday;
final String? gender;
final ProState proState;
const MyUser({
required this.id,
@@ -23,6 +23,7 @@ class MyUser extends Equatable {
this.picture,
this.birthday,
this.gender,
required this.proState,
});
get drawerLabel => email != null && email!.isNotEmpty
@@ -42,6 +43,7 @@ class MyUser extends Equatable {
picture: '',
birthday: '',
gender: '',
proState: ProState.inactive,
);
/// Modify MyUser parameters
@@ -55,6 +57,7 @@ class MyUser extends Equatable {
String? picture,
String? birthday,
String? gender,
ProState? proState,
}) {
return MyUser(
id: id ?? this.id,
@@ -66,6 +69,7 @@ class MyUser extends Equatable {
picture: picture ?? this.picture,
birthday: birthday ?? this.birthday,
gender: gender ?? this.gender,
proState: proState ?? this.proState,
);
}
@@ -86,6 +90,7 @@ class MyUser extends Equatable {
picture: picture,
birthday: birthday,
gender: gender,
proState: proState,
);
}
@@ -100,6 +105,7 @@ class MyUser extends Equatable {
picture: entity.picture,
birthday: entity.birthday,
gender: entity.gender,
proState: entity.proState,
);
}
@@ -114,5 +120,6 @@ class MyUser extends Equatable {
picture,
birthday,
gender,
proState,
];
}
@@ -0,0 +1,11 @@
export 'pro_state.dart';
enum ProState { inactive, pending, active, denied }
int enumToInt(ProState state) {
return state.index;
}
ProState intToEnum(int value) {
return ProState.values[value];
}
@@ -5,11 +5,13 @@ import 'dart:io';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:user_repository/src/models/my_user.dart';
import 'package:user_repository/src/models/models.dart';
import '../entities/entities.dart';
import 'user_repo.dart';
class FirebaseUserRepository implements UserRepository {
MyUser? _lastUser;
final FirebaseAuth _firebaseAuth;
final usersCollection = FirebaseFirestore.instance.collection('users');
final StreamController<MyUser?> _userStreamController =
@@ -28,11 +30,27 @@ class FirebaseUserRepository implements UserRepository {
nickname: user.displayName?.trim().toLowerCase(),
);
} else {
_lastUser = null;
_userStreamController.add(null);
}
});
}
@override
Future<MyUser?> lastUser() async {
return _lastUser;
}
Future<void> refreshUser() async {
final user = _firebaseAuth.currentUser;
if (user != null) {
await updateFromFirebase(user.uid);
} else {
_lastUser = null;
_userStreamController.add(null);
}
}
Future<void> updateFromFirebase(String userId) async {
return updateFromFirebase2(userId: userId);
}
@@ -56,12 +74,15 @@ class FirebaseUserRepository implements UserRepository {
phone: phone,
picture: picture,
nickname: name?.trim().toLowerCase(),
proState: ProState.inactive,
));
myUser = await getMyUser(userId);
}
_lastUser = myUser;
_userStreamController.add(myUser);
} catch (e) {
log('xd -- Error updating from firebase ${e.toString()}');
_lastUser = null;
_userStreamController.add(null);
}
}
@@ -131,6 +152,7 @@ class FirebaseUserRepository implements UserRepository {
await setUserData(MyUser(
id: credentials.user?.uid ?? '',
phone: credentials.user?.phoneNumber ?? '',
proState: ProState.inactive,
));
}
@@ -3,6 +3,8 @@ import 'package:firebase_auth/firebase_auth.dart';
import '../../user_repository.dart';
abstract class UserRepository {
Future<MyUser?> lastUser();
Stream<MyUser?> streamUser();
Stream<bool> isAuthenticated();
@@ -22,12 +24,9 @@ abstract class UserRepository {
Future<bool> verifyOTP(String code);
Future<void> addPhoneAuthCredential(String password, String phoneNumber,
{
required Future<void> Function(FirebaseAuthException) verificationFailed,
{required Future<void> Function(FirebaseAuthException) verificationFailed,
required Future<void> Function(String) codeSent,
required Future<void> Function(String) codeAutoRetrievalTimeout
});
required Future<void> Function(String) codeAutoRetrievalTimeout});
Future<bool> linkWithOTP(
String phoneNumber, String verificationId, String code);