Olá. Estou no momento na aula 4 ("conversando entre widgets") do curso. Enquanto era explicado sobre a comunicação e envio de dados entre os widgets (no caso, dados do formulário para a tela inicial) me surgiu uma dúvida: será que não daria pra fazer isso usando o setState? O que pensei foi:
- na classe que define o State da página inicial, armazenaria a lista de containers que apresentaria os dados recebidos do formulário.
- nesta mesma classe, também definiria uma função que faz o seguinte: adiciona um novo container na lista de containers e, logo após, chama o método setState() para reconstruir a tela.
- este método seria chamado ao pressionar o botão na página do formulário e após as validações passarem.
O código para as classes da tela inicial e para a tela de formulário seriam mais ou menos os seguintes:
class MyHomePageState extends State<MyHomePage> {
static List<Widget> containeres = [];
//Lista de containers que possuem um unico filho: um texto que eh adicionado no formulario
void add(String nome) {
containeres.add(Container(child: Text(nome),));
setState(() {});
}
@override
...
floatingActionButton: FloatingActionButton.large(child: Icon(Icons.add) ,onPressed: (){
Navigator.push(context, MaterialPageRoute(builder: (context) => Formulario(this))); //página de formulário recebe referência da página inicial e guarda em uma variável chamada "paginaInicial".
}
}
Dentro da página de formulário:
FloatingActionButton.large(onPressed: () {
if (chave.currentState!.validate()) {
widget.paginaInicial.add(nome as String);
Navigator.pop(context);
}
}
Dito isso ficam 3 perguntas:
- Por que este código não está funcionando? obs.: quando retiro a linha (widget.paginaInicial.add(nome as String);) e deixo apenas a linha de voltar à página inicial (Navigator.pop(context);) ele funciona.
- Esse raciocínio faz sentido? Ou por algum motivo essa abordagem não funcionaria?
- Caso essa abordagem não funcione, de que forma o uso de context e Inherited solucionaria isso? Ou melhoraria, caso funcione? obs.: agradeço se a resposta vier como uma explicação sobre context, porque realmente ainda não consegui entender o conceito, e de que forma ele se diferencia de state.
Obrigado.