Getx: Como fazer com que o tema do app "escute" a mudança do valor no controller?

Created on 5 Jun 2020  Â·  5Comments  Â·  Source: jonataslaw/getx

`import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:practicing_get/app/app_controller.dart';
import 'package:practicing_get/app/pages/home/home_page.dart';

class AppWidget extends StatelessWidget {
final appController = Get.put(AppController());

@override
Widget build(BuildContext context) {
return GetMaterialApp(
home: HomePage(),
theme: ThemeData(
primarySwatch: Colors.amber,
brightness: appController.isDark ? Brightness.dark : Brightness.light,
),
);
}
}
`

Controller

`import 'package:get/get.dart';

class AppController extends GetController {
static AppController get to => Get.find();

bool isDark = false;

@override
void onInit() {
super.onInit();
}

changeTheme(bool value) {
print('Method Called');
isDark = value;
update();
}
}
`

Switch

`import 'package:flutter/material.dart';
import 'package:practicing_get/app/app_controller.dart';

class SwitchComponent extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Switch(
value: AppController.to.isDark,
onChanged: (v) {
AppController.to.changeTheme(v);
},
);
}
}`

Desta forma só está mudando de tema quando dou um hot reload.

Most helpful comment

só pra te explicar, vc está alterando a variável isDark, mas vc tem que lembrar que como vc fez um stateless widget, ele não vai atualizar
o controller só altera o estado de Widgets que estejam dentro de um GetBuilder<Controller>()
por isso que não está mudando o tema

só pra ter certeza vou te falar: não coloque um GetBuilder antes do GetMaterialApp, não daria certo

Fazer a tradução deu muito certo, tu virou o guru do Get ehuaheu

All 5 comments

Isso tudo é necessário?
Você pode usar simplesmente Get.changeTheme(ThemeData.Dark()) pra mudar o tema, esqueça a abordagem "dark age" de fazer isso na mão.

só pra te explicar, vc está alterando a variável isDark, mas vc tem que lembrar que como vc fez um stateless widget, ele não vai atualizar
o controller só altera o estado de Widgets que estejam dentro de um GetBuilder<Controller>()
por isso que não está mudando o tema

só pra ter certeza vou te falar: não coloque um GetBuilder antes do GetMaterialApp, não daria certo

só pra te explicar, vc está alterando a variável isDark, mas vc tem que lembrar que como vc fez um stateless widget, ele não vai atualizar
o controller só altera o estado de Widgets que estejam dentro de um GetBuilder<Controller>()
por isso que não está mudando o tema

só pra ter certeza vou te falar: não coloque um GetBuilder antes do GetMaterialApp, não daria certo

Fazer a tradução deu muito certo, tu virou o guru do Get ehuaheu

obrigado! Pra ser sincero eu to achando um ótimo passatempo ficar lendo as issues que aparecem aqui e responder as que eu sei kkkkkk
acho que é porque vc vendeu o Get no README igual um vendedor faz kkkkk, fiquei no hype

Entendi. Muito Obrigado!

Was this page helpful?
0 / 5 - 0 ratings

Related issues

aztecrabbit picture aztecrabbit  Â·  3Comments

ChiwanAhn picture ChiwanAhn  Â·  4Comments

rupamking1 picture rupamking1  Â·  3Comments

GoldenSoju picture GoldenSoju  Â·  3Comments

williamsilva-98 picture williamsilva-98  Â·  4Comments