Stack Overflow em Português Asked by Iury Pereira on February 11, 2021
estou estudando/aprendendo sobre o mobx, e estou como seguinte problema:
Eu tenho uma controller que pega e salva algumas configurações com o Shared Preferences. A parte de salvar os dados está funcionando corretamente, mas eu estava querendo exibir os dados salvados, ao abrir a pagina de configuração, mas quando abro, ele até vai na método(_preencherTextoParam) que carrega as config, mas os dados não são exibidos no TextFormField
Código do controller:
import 'package:acmil_frontend_flutter/app/shared/models/Parametros_Model.dart';
import 'package:acmil_frontend_flutter/app/shared/utils/Global_Scaffold.dart';
import 'package:mobx/mobx.dart';
import 'package:flutter_modular/flutter_modular.dart';
import 'repositories/configuracao_repository.dart';
part 'configuracao_controller.g.dart';
@Injectable()
class ConfiguracaoController = _ConfiguracaoControllerBase with _$ConfiguracaoController;
abstract class _ConfiguracaoControllerBase with Store {
final ConfiguracaoRepository configuracaoRepository;
String mensagemErro = "";
@observable
String url = "";
@observable
String empresa = "";
_ConfiguracaoControllerBase (this.configuracaoRepository) {
_preencherTextoParam();
}
@action
setURL(String value) => url = value;
@action
setEmpresa(String value) => empresa = value;
@action
setMensagemErro(String value) => mensagemErro = value;
@action
validarCampos() {
if(url.isNotEmpty){
if( empresa.isNotEmpty ){
_testarConexaoApi();
}else{
mensagemErro = "Preencha o codigo da empresa padrão!";
GlobalScaffold.instance.showSnackBarErro(mensagemErro);
}
}else{
mensagemErro = "Preencha a URL da API a ser consumida.";
GlobalScaffold.instance.showSnackBarErro(mensagemErro);
}
}
_testarConexaoApi() async {
mensagemErro = await configuracaoRepository.getConexaoApi(empresa, url);
if (mensagemErro.contains("Status: Sucesso")){
_gravarParam();
GlobalScaffold.instance.showSnackBarSucesso(mensagemErro);
}
else{
GlobalScaffold.instance.showSnackBarErro(mensagemErro);
}
}
@action
_preencherTextoParam({String controllerUrl, String controllerEmp}) async {
Parametros parametros = Parametros();
await parametros.buscarParametros();
setURL(parametros.url_api);
setEmpresa(parametros.codempresapadrao);
}
_gravarParam() async {
Parametros parametros = Parametros();
parametros.url_api = url;
parametros.codempresapadrao = empresa;
await parametros.gravarParametros();
}
}
Código na page
import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:flutter_modular/flutter_modular.dart';
import 'configuracao_controller.dart';
class ConfiguracaoPage extends StatefulWidget {
final String title;
const ConfiguracaoPage({Key key, this.title = "Configuração"})
: super(key: key);
@override
_ConfiguracaoPageState createState() => _ConfiguracaoPageState();
}
class _ConfiguracaoPageState extends ModularState<ConfiguracaoPage, ConfiguracaoController> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Observer(builder: (_) {
return Container(
decoration: BoxDecoration(color: Color(0xfff0f3f4)),
padding: EdgeInsets.all(16),
child: Center(
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Padding(
padding: EdgeInsets.only(top: 50, bottom: 120),
child: Image.asset(
"Imagens/logo.png",
width: 200,
height: 150,
),
),
Padding(
padding: EdgeInsets.only(bottom: 8),
child: Observer(builder: (_) {
return TextFormField(
onChanged: controller.setURL,
initialValue: controller.url ?? "",
// controller: _controllerURL,
keyboardType: TextInputType.text,
style: TextStyle(fontSize: 20),
decoration: InputDecoration(
contentPadding:
EdgeInsets.fromLTRB(32, 16, 32, 16),
hintText: "Url API",
filled: true,
fillColor: Colors.white,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(32))),
);
}),
),
Observer(builder: (_) {
return TextFormField(
onChanged: controller.setEmpresa,
initialValue: controller.empresa,
// controller: _controllerEmpresa,
keyboardType: TextInputType.text,
style: TextStyle(fontSize: 20),
decoration: InputDecoration(
contentPadding: EdgeInsets.fromLTRB(32, 16, 32, 16),
hintText: "Empresa",
filled: true,
fillColor: Colors.white,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(32))),
);
}),
Padding(
padding: EdgeInsets.only(top: 16, bottom: 10),
child: RaisedButton(
child: Text(
"Testar e Salvar",
style: TextStyle(color: Colors.white, fontSize: 20),
),
color: Colors.pink,
padding: EdgeInsets.fromLTRB(32, 16, 32, 16),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(32)),
onPressed: () {
controller.validarCampos();
},
),
)
],
),
),
),
);
}));
}
}
Acho que tem algo que não entendi sobre mobx, mas estou seguindo vários exemplos que vi por ai na net.
Tenta criar uma reação. espero que te ajude
ReactionDisposer disposer;
@override
void didChangeDependencies() {
super.didChangeDependencies();
ConfiguracaoController = Provider.of<ConfiguracaoController>(context);
disposer = reaction(
//Codigo de reação
);
}
Answered by Felipe Araújo on February 11, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP