2
respostas

Lista do InheritedWidget não pode ser colocado dentro de um ListView

Nas aulas do curso, o Kako cria uma lista dentro de um InheritedWidget chamado TaskInherited. Eis a lista abaixo:

final List<Task> taskList = [
    Task('Aprender Flutter',
        '/Users/labes/dev/meuprojetoflutter/lib/assets/images/dash.png', 3),
    Task('Andar de bike',
        '/Users/labes/dev/meuprojetoflutter/lib/assets/images/bike.webp', 2),
    Task('Meditar',
        '/Users/labes/dev/meuprojetoflutter/lib/assets/images/meditar.jpeg', 5),
    Task('Ler um livro',
        '/Users/labes/dev/meuprojetoflutter/lib/assets/images/livro.jpg', 4),
    Task('Jogar Videogame',
        '/Users/labes/dev/meuprojetoflutter/lib/assets/images/jogar.jpg', 1),
  ];

O problema é que, logo depois, ele tenta usar essa lista dentro do children de um ListView, fazendo isso aqui:

body: ListView(
    children: TaskInherited.of(context).taskList,

Isso, no projeto dele, funciona perfeitamente. Porém, não consegui fazer com que funcionasse no meu, provavelmente por conta da versão do Flutter, que já é outra. A mensagem que recebo de erro é essa aqui: "The property 'taskList' can't be unconditionally accessed because the receiver can be 'null'. Try making the access conditional (using '?.') or adding a null check to the target ('!')."

Mesmo colocando os null checks que ele pede em todos os lugares solicitados, dá tela vermelha e aparece outra mensagem de erro: "Null check operator used on a null value".

Como proceder?

2 respostas

O meu tava dando esse mesmo problema mas vi que o meu static TaskInherited of(BuildContext context) no arquivo task_inherited.dart estava diferente do dele, eu corrigi e deu certo:

static TaskInherited of(BuildContext context) {
    final TaskInherited? result =
        context.dependOnInheritedWidgetOfExactType<TaskInherited>();
    assert(result != null, 'No TaskInherited found in context');
    return result!;
  }

outra solução pode ser alterar no body mesmo para:

body: ListView(
  children: TaskInherited.of(context)?.taskList ?? [],
),

Pessoal, eu tinha tido esse msm problema, mas eu vi q e pq no children no listView eu tinha colocado com parentes e neste caso, não se usa

Forma Certa: body: ListView( children: InheritedBox.of(context).listBoxes ),

Forma Errada: body ListView( children[ inhetiredBox.of(context).listBoxes] )