You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

121 lines
4.8 KiB
Dart

import 'package:cidade_social/app/app_store.dart';
import 'package:cidade_social/app/modules/address/dao/country_dao.dart';
import 'package:cidade_social/app/modules/address/dao/neighborhood_dao.dart';
import 'package:cidade_social/app/modules/address/dao/neighborhoodaddress_dao.dart';
import 'package:cidade_social/app/modules/address/model/country_model.dart';
import 'package:cidade_social/app/modules/address/model/neighborhood_model.dart';
import 'package:cidade_social/app/modules/address/model/neighborhoodaddress_model.dart';
import 'package:cidade_social/app/modules/address/repository/country_respository.dart';
import 'package:cidade_social/app/modules/address/repository/neighborhood_respository.dart';
import 'package:cidade_social/app/modules/address/repository/neighborhoodaddress_respository.dart';
import 'package:cidade_social/app/modules/auth/auth_respository.dart';
import 'package:cidade_social/app/shared/utils/constants.dart';
import 'package:cidade_social/app/shared/utils/core_utils.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_modular/flutter_modular.dart';
import 'package:mobx/mobx.dart';
import 'package:package_info_plus/package_info_plus.dart';
part 'splash_store.g.dart';
class SplashStore = _SplashStoreBase with _$SplashStore;
abstract class _SplashStoreBase with Store {
@observable
String info = "";
@action
void setInfo(String value) => info = value;
@observable
bool isLoading = true;
@action
void setIsLoading(bool value) => isLoading = value;
Future<bool> hasInternet = CoreUtils.verifyInternetConnection();
Future<void> loadData() async {
PackageInfo packageInfo = await PackageInfo.fromPlatform();
String version = packageInfo.version;
if(Modular.get<AppStore>().credentialApp.isNotEmpty && Modular.get<AppStore>().credentialApp != 'FAIL') {
debugPrint('## loadData started at ${CoreUtils.dateToString(DateTime.now(), 'HH:mm:ss')}');
_getCountries(version);
_getNeighborhoods(version);
await _getNeighborhoodAddresses(version);
debugPrint('## loadData finished at ${CoreUtils.dateToString(DateTime.now(), 'HH:mm:ss')}');
}
return;
}
Future<void> _getNeighborhoodAddresses(String version) async {
var neighborhoodAddressList = await NeighborhoodAddressDAO.getList();
var neighborhoodAddressListOutdate = await NeighborhoodAddressDAO.getOutdated(version: version);
if (neighborhoodAddressList.isEmpty || neighborhoodAddressListOutdate.isNotEmpty) {
int? deletedCount = await NeighborhoodAddressDAO.deleteAll();
debugPrint('deletedCount: ${deletedCount ?? 0}');
int totalPages = 1;
int countPage = 0;
setInfo(Constants.basicDataLoadingText);
while(countPage < totalPages) {
countPage++;
var map = await NeighborhoodAddressRepository.getAllAddressByPagination(Modular
.get<AppStore>()
.credentialApp, page: countPage);
totalPages = map['total_pages'];
List<NeighborhoodAddressModel> result = map['results'];
for (var model in result) {
model.versionApp = version;
await NeighborhoodAddressDAO.save(model);
}
}
}
}
Future<void> _getNeighborhoods(String version) async {
var neighborhoodList = await NeighborhoodDAO.getList();
var neighborhoodListOutdate = await NeighborhoodDAO.getOutdated(version: version);
if (neighborhoodList.isEmpty || neighborhoodListOutdate.isNotEmpty) {
int? deletedCount = await NeighborhoodDAO.deleteAll();
debugPrint('deletedCount: ${deletedCount ?? 0}');
setInfo(Constants.basicDataLoadingText);
List<NeighborhoodModel> result = await NeighborhoodRepository.getNeighborhoods(Modular
.get<AppStore>()
.credentialApp);
for (var model in result) {
model.versionApp = version;
await NeighborhoodDAO.save(model);
}
}
}
Future<void> _getCountries(String version) async {
var countryList = await CountryDAO.getList();
var countryListOutdate = await CountryDAO.getOutdated(version: version);
if (countryList.isEmpty || countryListOutdate.isNotEmpty) {
int? deletedCount = await CountryDAO.deleteAll();
debugPrint('deletedCount: ${deletedCount ?? 0}');
setInfo(Constants.basicDataLoadingText);
List<CountryModel> result = await CountryRepository.getCountries(Modular
.get<AppStore>()
.credentialApp);
for (var model in result) {
model.versionApp = version;
await CountryDAO.save(model);
}
}
}
Future<void> getCredentialApp() async {
try {
var response = await AuthRepository.getTokenByCredential().timeout(const Duration(seconds: 40));
if(response != null) {
Modular.get<AppStore>().setCredentialApp(response);
}
} catch (err){
debugPrint(err.toString());
}
}
}