Boa tarde. Estou fazendo o curso de flutter (controller, navegação e estados - 04 Esplorando novos conceitos em widgets). Uma coisa que estou tendo problemas é que mesmo a List de tasks sendo atualizada, isso não é refletido na tela inicial. O que notei, é que no vídeo o instrutor começa já com uma lista pré-carregada, então quando ele coloca mais um item (ele ainda não aparece em tela), mas assim que ele rola a tela o item é carregado. Mas agora vamos pro seguinte cenário.... usando o mesmo fonte do treinamento com a unica differença de começando com uma lista vazia. Após adicionar um item na lista, ele não aparece na tela inicial. Obs: uma forma de fazer aparecer é virando o celular.
A ajuda que preciso é:
- um código detalhado de como fazer com que a nova task apareça de forma automática, por favor.
- O melhor caminha seria utilizar key? Se sim... pode me dar um exemplo?
Vou colocar abaixo o código das minhas 2 principais classes:
TaskInherit
import 'package:flutter/material.dart';
import 'package:primeiro_projeto/components/task.dart';
class TaskInherited extends InheritedWidget {
TaskInherited({
Key? key,
required Widget child,
}) : super(key: key, child: child);
List<Task> taskList = [];
void newTask(String name, String photo,int difficulty){
taskList.add(Task(name, photo, difficulty));
// taskList = List.from(taskList)
// ..add(Task(name, photo, difficulty));
}
@override
bool updateShouldNotify(TaskInherited oldWidget) {
return oldWidget.taskList.length != taskList.length;
}
static TaskInherited of(BuildContext context) {
final TaskInherited? result =
context.dependOnInheritedWidgetOfExactType<TaskInherited>();
assert(result != null, 'No TaskInherited found in context');
return result!;
}
}
Initial_sreen
import 'package:flutter/material.dart';
// import 'package:primeiro_projeto/components/task.dart';
import 'package:primeiro_projeto/data/task_inherited.dart';
import 'package:primeiro_projeto/screens/form_screen.dart';
class InitialScreen extends StatefulWidget {
const InitialScreen({Key? key}) : super(key: key);
@override
State<InitialScreen> createState() => _InitialScreenState();
}
class _InitialScreenState extends State<InitialScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
leading: Container(),
title: const Text('Tarefas'),
),
body: ListView(
children: TaskInherited.of(context).taskList,
),
floatingActionButton: FloatingActionButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (contextNew) => FormScreen(taskContext: context,),
),
);
},
child: const Icon(Icons.add),
),
);
}
}