TransWikia.com

Flutter Mobx carregar dados ao iniciar a pagina

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.

One Answer

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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP