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

The getter 'length' was called on null.

Olá pessoal !!!

Estou recebendo o seguinte erro: E/SQLiteLog(32672): (1) no such table: contatos => The getter 'length' was called on null. Receiver: null Tried calling: length <= A tela fica vermelha com a mensagem informada acima.

Assim que eu fiz o downgrade de versão do banco para efetuar os testes eu venho recebendo esse erro, estou em cima desse erro faz 4 dias... Eu já não sei mais o que fazer. Segue meu código, para vocês analisarem e me ajudar nesse problema

import 'package:flutter/material.dart';
import 'package:persistencia_com_flutter/database/dao/contact_dao.dart';
import 'package:persistencia_com_flutter/models/contact.dart';

import 'contact_form.dart';

class ContactList extends StatefulWidget {
  @override
  _ContactListState createState() => _ContactListState();
}

final ContactDao _dao = ContactDao();

class _ContactListState extends State<ContactList> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Novos Contatos'),
      ),
      body: FutureBuilder<List<Contact>>(
        initialData: List(),
        future: Future.delayed(Duration(seconds: 1))
            .then((value) => _dao.findAll()),
        builder: (context, snapshot) {
          switch (snapshot.connectionState) {
            case ConnectionState.none:
              break;
            case ConnectionState.waiting:
              return Center(
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: <Widget>[
                    CircularProgressIndicator(),
                    Text('Carregando')
                  ],
                ),
              );
              break;
            case ConnectionState.active:
              break;
            case ConnectionState.done:
              final List<Contact> contatos = snapshot.data;
              return ListView.builder(
                itemBuilder: (context, index) {
                  final Contact contact = contatos[index];
                  return _ContactItem(contact);
                },
                itemCount: contatos.length,
              );
              break;
          }
//          if (snapshot.data != null) {}
//
//          final List<Contact> contatos = snapshot.data;
          return Text('Unknown Error');
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          Navigator.of(context)
              .push(
                MaterialPageRoute(
                  builder: (context) => ContactForm(),
                ),
              );
//              .then((value) => setState(() {}));
        },
        child: Icon(
          Icons.add,
        ),
      ),
    );
  }
}

class _ContactItem extends StatelessWidget {
  final Contact contact;

  _ContactItem(this.contact);

  @override
  Widget build(BuildContext context) {
    return Card(
      child: ListTile(
        title: Text(
          contact.nome,
          style: TextStyle(fontSize: 24.0),
        ),
        subtitle: Text(
          contact.numeroDaConta.toString(),
          style: TextStyle(
            fontSize: 16.0,
          ),
        ),
      ),
    );
  }
}
2 respostas

Olá! Esse erro ocorre porque você esta chamando a propriedade length em uma variavel que ainda não foi populada. Pelo seu código, deve ser na parte em que você esta associando a List contatos com o valor de snapshot.data. Verifique primeiro se snapshot possui um valor ou se ele é null, se ele for null verifique de qual lugar você esta se pegando ele. Você também pode adicionar um tratamento para só fazer esse procedimento que vai usar o snapshot.data se ele não for null também, ai vai da solução que você quer aplicar. Provavelmente você ta acessando uma tabela que não existe. O inicio do seu erro diz "no such table". Verifique também se o downgrade não fez você perder as tables que você tinha antes.

solução!

Gustavo, boa noite!

Obrigado pelo retorno.

Eu notei que a tabela não estava criada, fiz a criação da mesma executei o processo novamente e deu tudo certo.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software