Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import 'dart:convert';
- import 'package:PhotoReport/helpers/categoria_helper.dart';
- import 'package:PhotoReport/helpers/http_helper.dart';
- import 'package:PhotoReport/repository/categoria_repository.dart';
- import 'package:dio/dio.dart';
- import 'package:flutter/widgets.dart';
- import 'package:rxdart/rxdart.dart';
- import 'package:shared_preferences/shared_preferences.dart';
- import '../global.dart';
- enum CategoriaState { IDLE, LOADING, SUCCESS, FAIL }
- class CategoriaBloc extends ChangeNotifier {
- final CategoriaRepository _repository = CategoriaRepository();
- final BehaviorSubject<CategoriaResponse> _subject =
- BehaviorSubject<CategoriaResponse>();
- final BehaviorSubject<bool> _subjectSalvar = BehaviorSubject<bool>();
- final BehaviorSubject<bool> _subjectAlterar = BehaviorSubject<bool>();
- final BehaviorSubject<bool> _subjectDeletar = BehaviorSubject<bool>();
- final _stateController = BehaviorSubject<CategoriaState>();
- Http _http = Http();
- List<Categoria> categorias = List();
- CategoriaBloc({int buildingId}) {
- if (buildingId != null) obterCategorias(buildingId);
- }
- getCategorias(int buildingId) async {
- CategoriaResponse response = await _repository.getCategoria(buildingId);
- _stateController.add(CategoriaState.SUCCESS);
- notifyListeners();
- _subject.sink.add(response);
- }
- obterCategorias(int buildingId) async {
- categorias = List();
- _stateController.add(CategoriaState.LOADING);
- SharedPreferences prefs = await SharedPreferences.getInstance();
- _http
- .get(API_URL + "categories?building=$buildingId")
- .then((response) async {
- Map<String, dynamic> retorno = response.data;
- if (!retorno["error"]) {
- var lista = retorno["data"];
- for (Map m in lista) {
- var imagens = await obterImagensCategoria(m["id"]);
- Categoria categoria = Categoria.fromMap(m);
- categoria.qtdImagens = imagens.length;
- categorias.add(categoria);
- }
- prefs.setString("categories", jsonEncode(lista));
- _stateController.add(CategoriaState.SUCCESS);
- notifyListeners();
- } else {
- _stateController.add(CategoriaState.FAIL);
- notifyListeners();
- }
- }).catchError((onError) {
- String json = prefs.getString("categories");
- var lista = jsonDecode(json);
- for (Map m in lista) {
- categorias.add(Categoria.fromMap(m));
- }
- _stateController.add(CategoriaState.SUCCESS);
- notifyListeners();
- });
- }
- Future<List> obterImagensCategoria(int categoriaId) async {
- _stateController.add(CategoriaState.LOADING);
- notifyListeners();
- Response responseImages =
- await _http.get(API_URL + "categories/$categoriaId/images");
- Map<String, dynamic> retornoImages = responseImages.data;
- var lista = retornoImages["data"];
- _stateController.add(CategoriaState.SUCCESS);
- notifyListeners();
- return lista;
- }
- salvar(Categoria categoria) async {
- _stateController.add(CategoriaState.LOADING);
- bool response = await _repository.salvar(categoria);
- if (response) {
- //await obterCategorias(categoria.obraId);
- } else {
- _stateController.add(CategoriaState.FAIL);
- notifyListeners();
- }
- _subjectSalvar.sink.add(response);
- }
- alterar(Categoria categoria) async {
- _stateController.add(CategoriaState.LOADING);
- bool response = await _repository.alterar(categoria);
- if (response) {
- obterCategorias(categoria.obraId);
- } else {
- _stateController.add(CategoriaState.FAIL);
- notifyListeners();
- }
- _subjectAlterar.sink.add(response);
- }
- deletar(Categoria categoria) async {
- _stateController.add(CategoriaState.LOADING);
- bool response = await _repository.deletar(categoria);
- if (response) {
- obterCategorias(categoria.obraId);
- } else {
- _stateController.add(CategoriaState.FAIL);
- notifyListeners();
- }
- _subjectDeletar.sink.add(response);
- }
- @override
- void dispose() {
- _subject.close();
- _subjectSalvar.close();
- _subjectAlterar.close();
- _subjectDeletar.close();
- _stateController.close();
- }
- BehaviorSubject<CategoriaResponse> get subject => _subject;
- BehaviorSubject<bool> get save => _subjectSalvar;
- BehaviorSubject<bool> get update => _subjectAlterar;
- BehaviorSubject<bool> get delete => _subjectDeletar;
- Stream<CategoriaState> get outState => _stateController.stream;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement