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 hasInternet = CoreUtils.verifyInternetConnection(); Future loadData() async { PackageInfo packageInfo = await PackageInfo.fromPlatform(); String version = packageInfo.version; if(Modular.get().credentialApp.isNotEmpty && Modular.get().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 _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() .credentialApp, page: countPage); totalPages = map['total_pages']; List result = map['results']; for (var model in result) { model.versionApp = version; await NeighborhoodAddressDAO.save(model); } } } } Future _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 result = await NeighborhoodRepository.getNeighborhoods(Modular .get() .credentialApp); for (var model in result) { model.versionApp = version; await NeighborhoodDAO.save(model); } } } Future _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 result = await CountryRepository.getCountries(Modular .get() .credentialApp); for (var model in result) { model.versionApp = version; await CountryDAO.save(model); } } } Future getCredentialApp() async { try { var response = await AuthRepository.getTokenByCredential().timeout(const Duration(seconds: 40)); if(response != null) { Modular.get().setCredentialApp(response); } } catch (err){ debugPrint(err.toString()); } } }