Как перенести текст переменной в флаттер TextField - PullRequest
0 голосов
/ 15 апреля 2020

Я новичок в вибрации и пытаюсь разработать свое первое приложение.

Я провел много исследований и не смог найти ответ на свой вопрос.

Я ищу информацию об адресе, районе и городе через почтовый индекс с помощью API.

Я храню эти данные в переменных, и мне бы хотелось, чтобы при нажатии на кнопку для поиска этой информации Возврат будет происходить в TextField, а не в тексте, как сейчас в моем коде.

Эта информация, которую я привожу во время регистрации пользователя, и я хотел бы привести ее в стандартном формате.

Вот мой код ...

    import 'package:flutter/material.dart';
    import 'package:http/http.dart' as http;
    import 'dart:convert';


    class cadastro extends StatefulWidget {
    @override
    _cadastroState createState() => _cadastroState();
   }

   class _cadastroState extends State<cadastro> {
   String _logradouro = "";
   String _localidade = "";
   String _bairro = "";

   TextEditingController _controllerCep = TextEditingController();

   _recuperarCep() async {
   String cepDigitado = _controllerCep.text;
   String url = "http://viacep.com.br/ws/${cepDigitado}/json/";
   http.Response response;

   response = await http.get(url);
   Map<String, dynamic> retorno = json.decode(response.body);
   String logradouro = retorno["logradouro"];
   String bairro = retorno["bairro"];
   String localidade = retorno["localidade"];

setState(() {
  _logradouro = "${logradouro}";
  _localidade = "${localidade}";
  _bairro = "${bairro}";
});
  }

  @override
  Widget build(BuildContext context) {
  return Scaffold(
    backgroundColor: Colors.white,
    body: Container(
      width: double.infinity,
      child: SingleChildScrollView(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: <Widget>[
          child: Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: <Widget>[
                  Text(
                    "Cep",
                    style: (TextStyle(
                      color: Color(0xff4f4138),
                      fontSize: 20,
                    )),
                  ),
                  Padding(
                    padding: EdgeInsets.only(right: 20),
                    child: RaisedButton(
                      color: Color(0xffffdb2e),
                      textColor: Color(0xff4f4138),
                      padding: EdgeInsets.all(15),
                      child: Text(
                        "Buscar",
                        style: TextStyle(
                          fontSize: 20,
                        ),
                      ),
                      onPressed: _recuperarCep,
                    ),
                  )
                ],
              ),
            ),
            Padding(
              padding: EdgeInsets.only(left: 20, right: 20, bottom: 20),
              child: TextField(
                maxLength: 8,
                keyboardType: TextInputType.number,
                style: TextStyle(
                  color: Color(0xff4f4138),
                  fontSize: 20,
                ),
                decoration: InputDecoration(
                  fillColor: Color(0xff4f4138),
                ),
                controller: _controllerCep,
              ),
            ),
            Padding(
              padding: EdgeInsets.only(left: 20, bottom: 30, top: 30),
              child: Text(
                "Logradouro: " + _logradouro,
                style: (TextStyle(
                  color: Color(0xff4f4138),
                  fontSize: 20,
                )),
              ),
            ),
            Padding(
              padding:
                  EdgeInsets.only(left: 20, right: 20, bottom: 20, top: 20),
              child: Text(
                "Bairro: " + _bairro,
                style: (TextStyle(
                  color: Color(0xff4f4138),
                  fontSize: 20,
                )),
              ),
            ),
            Padding(
              padding:
                  EdgeInsets.only(left: 20, right: 20, bottom: 30, top: 20),
              child: Text(
                "Cidade: " + _localidade,
                style: (TextStyle(
                  color: Color(0xff4f4138),
                  fontSize: 20,
                )),
              ),
            ),
          ],
        ),
      ),
     ));
    }
   }

Ответы [ 3 ]

0 голосов
/ 15 апреля 2020

Это код для вас, это должно быть то, что вы ищете

TextEditingController _controllerLogradouro = TextEditingController();
TextEditingController _controllerBairro = TextEditingController();
TextEditingController _controllerCidade = TextEditingController();
//Initialize this with your other TextEditingController

setState(() {
      _controllerLogradouro.text = "Logradouro: ${logradouro}";
      _controllerCidade.text = "Cidade: ${localidade}";
      _controllerBairro.text = "Bairro: ${bairro}";
    });

Column(
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: <Widget>[
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: <Widget>[
                  Text(
                    "Cep",
                    style: (TextStyle(
                      color: Color(0xff4f4138),
                      fontSize: 20,
                    )),
                  ),
                  Padding(
                    padding: EdgeInsets.only(right: 20),
                    child: RaisedButton(
                      color: Color(0xffffdb2e),
                      textColor: Color(0xff4f4138),
                      padding: EdgeInsets.all(15),
                      child: Text(
                        "Buscar",
                        style: TextStyle(
                          fontSize: 20,
                        ),
                      ),
                      onPressed: _recuperarCep,
                    ),
                  )
                ],
              ),
              Padding(
                padding: EdgeInsets.only(left: 20, right: 20, bottom: 20),
                child: TextField(
                  maxLength: 8,
                  keyboardType: TextInputType.number,
                  style: TextStyle(
                    color: Color(0xff4f4138),
                    fontSize: 20,
                  ),
                  decoration: InputDecoration(
                    fillColor: Color(0xff4f4138),
                  ),
                  controller: _controllerCep,
                ),
              ),
              Padding(
                padding: EdgeInsets.only(left: 20, bottom: 30, top: 30),
                child: TextFormField(
                  style: TextStyle(
                    color: Color(0xff4f4138),
                    fontSize: 20,
                  ),
                  controller: _controllerLogradouro,
                ),
              ),
              Padding(
                padding:
                    EdgeInsets.only(left: 20, right: 20, bottom: 20, top: 20),
                child: TextFormField(
                  controller: _controllerBairro,
                  style: TextStyle(
                    color: Color(0xff4f4138),
                    fontSize: 20,
                  ),
                ),
              ),
              Padding(
                padding:
                    EdgeInsets.only(left: 20, right: 20, bottom: 30, top: 20),
                child: TextFormField(
                  controller: _controllerCidade,
                  style: TextStyle(
                    color: Color(0xff4f4138),
                    fontSize: 20,
                  ),
                ),
              ),
            ],
          ),

Я думаю, что я поместил ваши переменные в нужное место, извините, если я не говорил только по-английски sh

0 голосов
/ 15 апреля 2020

при условии, что вы находитесь внутри своей функции: добавьте эту строку

setState((){
_controllerCep.text = _logradouro.toString();
});

теперь независимо от значения вашей переменной _logradouro, равного значению в вашем текстовом поле

0 голосов
/ 15 апреля 2020
  1. Измените 3 элемента Text на TextField.
  2. Определите 3 TextEditingControllers и назначьте их для TextFields.
  3. В вашем методе recuperarCep вместо установки переменных для полученных значений установите для соответствующего свойства textField контроллера 'text' значение.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...