2
respostas

05 Utilizando modelo no addAcount - Erros

Pessoal, podem me ajudar, 3 erros e não consigo resolver para avançar.

![](Insira aqui a descrição dessa imagem para ajudar na acessibilidade )
![](Insira aqui a descrição dessa imagem para ajudar na acessibilidade )
![](Insira aqui a descrição dessa imagem para ajudar na acessibilidade )

import 'dart:async';
import 'dart:ffi';

import 'package:dart_assincronismo/apiKey.dart';
import 'package:dart_assincronismo/models/account.dart';
import 'package:dart_assincronismo/services/account_services.dart';
import 'package:http/http.dart';
import 'dart:convert';
import 'package:path/path.dart';

class AccountServices {
final  StreamController<String> _streamController = StreamController<String>();
Stream<String> get streamInfos => _streamController.stream;
String url = 
  "https://api.github.com/gists/c1d8a94b58803241d299a16b15149e33";

Future<List<Account>> getAll() async {
  Response response = await get(Uri.parse(url));
 _streamController.add("${DateTime.now()} | Requisicão de leitura.");

 Map<String, dynamic> mapResponse = json.decode(response.body);
 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;
}
}

//Código omitido

  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 post(
  Uri.parse(url as String),
  headers: {
    "Authorization" : "Bearer $githubApikey"},
  body: json.encode({
    "description" : "account.json",
    "public" : true,
    "files" : {
      "account.json": {
        "content": content,
      }
    }
  }),
  );
 

    if (response.statusCode.toString()[0] == "2") {
      _streamController.add(
          "${DateTime.now()} | Requisição adição bem sucedida (${account.name}).");
    } else {
      _streamController
          .add("${DateTime.now()} | Requisição falhou (${account.name})."); }
 }

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
2 respostas

Olá, Zilda, tudo bem?

O problema é que o método addAccount ficou fora da classe AccountServices. Você fechou a chave } da classe logo após o método getAll, o que impede o addAccount de enxergar as variáveis (_streamController) e métodos (getAll) da classe.

Para resolver, basta mover essa chave para o final do arquivo e adicionar o tipo de retorno Future<void> no addAccount.

Segue o código completo corrigido:

import 'dart:async';
import 'dart:convert';
import 'package:http/http.dart';
import 'package:dart_assincronismo/models/account.dart';

class AccountServices {
  final StreamController<String> _streamController = StreamController<String>();
  Stream<String> get streamInfos => _streamController.stream;
  
  String url = "https://api.github.com/gists/c1d8a94b58803241d299a16b15149e33";

  Future<List<Account>> getAll() async {
    Response response = await get(Uri.parse(url));
    _streamController.add("${DateTime.now()} | Requisicão de leitura.");

    Map<String, dynamic> mapResponse = json.decode(response.body);
    // Ajuste aqui conforme a estrutura real do seu JSON, mantive a lógica original
    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;
  }

  // O método agora está DENTRO da classe
  Future<void> 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 post(
      Uri.parse(url),
      headers: {"Authorization": "Bearer SEU_TOKEN_AQUI"}, // Lembre-se de configurar sua API Key corretamente
      body: json.encode({
        "description": "account.json",
        "public": true,
        "files": {
          "accounts.json": { // Verifique se o nome do arquivo no gist é "accounts.json" ou "account.json"
            "content": content,
          }
        }
      }),
    );

    if (response.statusCode.toString().startsWith("2")) {
      _streamController.add("${DateTime.now()} | Requisição adição bem sucedida (${account.name}).");
    } else {
      _streamController.add("${DateTime.now()} | Requisição falhou (${account.name}).");
    }
  }
} // A classe fecha aqui

Bons estudos!

Sucesso

Imagem da comunidade

Vitor, super obrigado pela ajuda!!!!