Não se estou fazendo da forma correta, porém aqui está o código.
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get_api/app/modules/home/home_controller.dart';
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: GetBuilder<HomeController>(
builder: (HomeController homeController) => Text('${homeController.postList.length.toString()}',),
),
),
body: GetBuilder<HomeController>(
init: HomeController(),
initState: (_) => HomeController.to.getPosts(),
builder: (HomeController homeController) => homeController.postList.length == 0 ?
Center(
child: CircularProgressIndicator(),
) :
ListView.builder(
itemCount: homeController.postList.length,
itemBuilder: (_, index) => ListTile(
title: Text('${homeController.postList[index].title}'),
subtitle: Text('${homeController.postList[index].body}'),
),
),
),
);
}
}
Output:
(23933): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (23933): The following NoSuchMethodError was thrown building _BodyBuilder:
I/flutter (23933): The getter '_allStates' was called on null.
I/flutter (23933): Receiver: null
I/flutter (23933): Tried calling: _allStates
I/flutter (23933):
I/flutter (23933): The relevant error-causing widget was:
I/flutter (23933): Scaffold
Editei sua resposta como deveria funcionar.
Basicamente, você precisa tipar o GetBuilder pra ele fazer a busca daquele controlador na memória.
Usando Bindings e Obx não é necessário tipar nada, preciso fazer um vídeo urgentemente sobre essa última atualização.
E só uma dica:
initState: (_) => HomeController.to.getPosts(),
Isso é desnecessário.
tu pode remover essa linha e simplesmente fazer isso no seu Controller:
HomeController extends GetController{
onInit() => getPosts();
da mesma forma, se tu quer fechar alguma coisa no dispose, tu não precisa do dispose do GetBuilder, tu pode fazer simplesmente isso:
onClose() => print("controller fechado");
Continua com o mesmo erro
Output:
══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (11133): The following NoSuchMethodError was thrown building _BodyBuilder:
I/flutter (11133): The getter '_allStates' was called on null.
I/flutter (11133): Receiver: null
I/flutter (11133): Tried calling: _allStates
I/flutter (11133):
I/flutter (11133): The relevant error-causing widget was:
I/flutter (11133): Scaffold
I/flutter (11133):
lib\…\home\home_page.dart:8
I/flutter (11133):
I/flutter (11133): When the exception was thrown, this was the stack:
I/flutter (11133): #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:53:5)
I/flutter (11133): #1 _GetBuilderState.initState
Foi mal, não tinha visto que tu tinha um GetBuilder na tua appBar, tirei o init dela e coloquei no body ae no teu comentário, certamente vai funcionar.
Então, uma coisa inusitada, no Flutter, a appbar é renderizado depois do body, então tu deve colocar o init sempre no primeiro widget do body, igual minha última alteração no teu código.
Flutter renderiza o body, depois a appbar, depois a bottomBar e por último o FloatingActionButton.
Agora funcionou!! Muito Obrigado pela a ajuda, disposição e esclarecimento sobre a renderização dos widgets!
Most helpful comment
Agora funcionou!! Muito Obrigado pela a ajuda, disposição e esclarecimento sobre a renderização dos widgets!