Arquivo: account_dio_service.dart
import 'dart:async';
import 'package:dio/dio.dart';
import 'dart:convert';
import 'package:dart_assincronismo/models/account.dart';
import 'package:dart_assincronismo/api_key.dart';
class AccountDioService {
final Dio _dio = Dio();
final StreamController<String> _streamController = StreamController<String>();
Stream<String> get streamInfos => _streamController.stream;
String url = "https://api.github.com/gists/b52a4ebbde885199f357ba69855c82a9";
Future<List<Account>> getAll() async {
Response response = await _dio.get(url);
_streamController.add("${DateTime.now()} | Requisição de leitura.");
Map<String, dynamic> mapResponse = response.data;
List<dynamic> listDynamic = json.decode(
mapResponse["files"]["accounts.json"]["content"],
);
List<Account> listAccounts = [];
for (dynamic dyn in listDynamic) {
Map<String, dynamic> mapAccount = dyn as Map<String, dynamic>;
Account account = Account.fromMap(mapAccount);
listAccounts.add(account);
}
return listAccounts;
}
addAccount(Account account) async {
List<Account> listAccounts = await getAll();
listAccounts.add(account);
List<Map<String, dynamic>> listContent = [];
for (Account account in listAccounts) {
listContent.add(account.toMap());
}
String content = json.encode(listContent);
Response response = await _dio.post(
url,
options: Options(headers: {"Authorization": "Bearer $gitHubToken"}),
data: {
"description": "accounts.json",
"public": true,
"files": {
"accounts.json": {"content": content},
},
},
);
if (response.statusCode.toString()[0] == "2") {
_streamController.add(
"${DateTime.now()} | Requisição de adição bem sucedida(${account.name}).",
);
} else {
_streamController.add(
"${DateTime.now()} | Requisição de adição falhou(${account.name}).",
);
}
}
}