Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Sintax na versão 2.5 do flutter

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Estou acompanhando o curso, mas utilizando a versão 2.5 do flutter, como ficaria esse método nesta versão? estou com dificuldades para consegui uma solução.

4 respostas

Olá, Breno! Tudo bem?

Não tenho certeza do que pode estar errado sem ver os erros, mas acho que um dos problemas pode ser porque você está retornando uma lista (List) do tipo Contact, portanto precisa informar isso na declaração da sua função isso, assim:

Future<List<Contact>> findAll() {
    //...
}

A função completa acredito que fique assim:

Future<List<Contact>> findAll() {
  return createDatabase().then((db) {
    return db.query('contacts').then((maps) {
      final List<Contact> contacts = [];
      for (Map<String, dynamic> map in maps) {
        final Contact contact = Contact(
          map['id'],
          map['name'],
          map['account_number'],
        );
        contacts.add(contact);
      }
      return contacts;
    });
  });
}

Outro ponto que talvez esteja te causando o problema pode ser o seu model de Contact, verifique se ele e seu construtor estão certinhos:

class Contact {
  final int id;
  final String name;
  final int accountNumber;

  Contact(this.id, this.name, this.accountNumber);

  @override
  String toString() {
    return 'Contact: $id, $name, $accountNumber';
  }
}

Espero que isso te ajude de alguma forma, caso contrário, vamos continuar tentando. Se puder enviar os erros que estão aparecendo, ou se seu projeto estiver no GitHub e puder compartilhar o link seria ótimo.

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado. ✓

Meu código está assim.

import 'package:bytebank/models/contact.dart';
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';

Future<Database> createDatabase() {
  return getDatabasesPath().then((dbPath) {
    final String path = join(dbPath, 'bytebank.db');
    return openDatabase(path, onCreate: (db, version) {
      db.execute('CREATE TABLE contracts('
          'Id INTEGER PRIMARY KEY,'
          'name INTEGER,'
          'account_number INTEGER,');
    }, version: 1);
  });
}

Future<int> save(Contact contact) {
  return createDatabase().then((db) {
    final Map<String, dynamic> contactMap = new Map();
    contactMap['id'] = contact.id;
    contactMap['name'] = contact.name;
    contactMap['account_number'] = contact.accountNumber;
    return db.insert('contacts', contactMap);
  });
}

Future<List<Contact>> findAll() {
  return createDatabase().then((db) {
    return db.query("contacts").then((maps) {
      final List<Contact> contacts = [];
      for (Map<String, dynamic> map in maps) {
        final Contact contact = Contact (
          map['id'], 
          map['name'], 
          map['account_number'],
        );
        contacts.add(contact);
      }
      return contacts;
    });
  });
}

Acrescentei o List como havia sugerido

class Contact {
  final int id;
  final String name;
  final int accountNumber;

  Contact(map, {required this.id, required this.name, required this.accountNumber});
}

E assim estão os erros

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

solução!

Oi, Breno, acho que o problema está na forma como está fazendo o seu construtor, que está diferente. Você já tentou alterar o model de Contact da forma como mostrei? Assim:

class Contact {
  final int id;
  final String name;
  final int accountNumber;

    //Construtor sem map e sem required:
  Contact(this.id, this.name, this.accountNumber);

  @override
  String toString() {
    return 'Contact: $id, $name, $accountNumber';
  }
}

E outra coisa, se você utilizar required nas variáveis do construtor, precisa nomear os parâmetros quando for chamá-lo, assim:

final Contact contact = Contact (
          id: map['id'], 
          name: map['name'], 
          accountNumber: map['account_number'],
        );

OBS: Se usar o model que mandei não precisa fazer isso.

Pode tentar corrigir o model e me informar se deu certo?

Caso este post tenha lhe ajudado, por favor, marcar como solucionado. ✓

Deu certo das duas formas. Muito obrigado