setState сбрасывает Datepicker и не меняет текст - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь изменить значение текста с помощью кнопки, но у меня есть 2 проблемы: 1- setState сбрасывает дату 2- Текст не изменяется

Отредактировано Здесь Я отправляю код:

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;
  @override
  _MyHomePageState createState() => _MyHomePageState();}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {

TextEditingController dateCtl = TextEditingController();
String operad = "Operador";
DateTime date;
var formatter = new DateFormat('dd-MM-yyyy');

    return Scaffold(appBar: AppBar(title: Text(widget.title),),
      body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.start,
          children: <Widget>[
          Row(mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[
          SizedBox(height: 35,width: 100,
          child:Text('Fecha:',style: TextStyle(fontSize: 18.0),textAlign: TextAlign.end,)),
          SizedBox(height: 35,width: 250,
          child:
          TextFormField(
            readOnly: true,
            textAlign: TextAlign.center,
            controller: dateCtl,
            onTap: () async{date = await showDatePicker(
                                       context: context,
                                      initialDate: DateTime.now(),
                                      firstDate: DateTime.now().subtract(Duration(days: 2)),
                                      lastDate: DateTime.now().add(Duration(days: 2)));
                if (date == null) {
                  date = DateTime.now();
                } else {
                  dateCtl.text = formatter.format(date);}}))]),
Row(mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
SizedBox(width: 95, height: 40,
child: RaisedButton(

          child: Text("A. Pacho",style: TextStyle(color:Color.fromRGBO(255, 255, 255, 5),fontSize: 16, fontStyle: FontStyle.italic),textAlign: TextAlign.center),
          color: Color.fromRGBO(16, 172, 40,80),
          padding: EdgeInsets.only(left:2, right:1.5),
          highlightColor: Color.fromRGBO(230, 17, 17, 10),
          elevation: 5.0,
          shape: RoundedRectangleBorder(
                 borderRadius: new BorderRadius.circular(15.0)),
          onPressed: () {
                setState(() {
                  operad = "Adolfo Pacho";
                });},)),]),

Row(mainAxisAlignment: MainAxisAlignment.center,
  children: <Widget>[
SizedBox(width: 160, height: 30,child:Text('$operad')),
SizedBox(width: 15,),
],),

Что мне нужно сделать, это: Когда я нажал кнопку RaisedButton, текст внутри Sizedbox должен измениться.

Что это делает: Когда я нажал кнопку RaisedButton текст внутри поля размера не изменяется, а средство выбора даты сбрасывается.

: (

1 Ответ

0 голосов
/ 13 февраля 2020

Вы можете скопировать полный код выполнения вставки ниже
Вы поместили переменную в build, и это вызвало сброс
Изменение с

@override
  Widget build(BuildContext context) {
    TextEditingController dateCtl = TextEditingController();
    String operad = "Operador";
    DateTime date;
    var formatter = new DateFormat('dd-MM-yyyy');

на

  TextEditingController dateCtl = TextEditingController();
  String operad = "Operador";
  DateTime date;
  var formatter = new DateFormat('dd-MM-yyyy');

  @override
  Widget build(BuildContext context) {

работает демо

enter image description here полный код

import 'package:flutter/material.dart';
import 'package:intl/intl.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  TextEditingController dateCtl = TextEditingController();
  String operad = "Operador";
  DateTime date;
  var formatter = new DateFormat('dd-MM-yyyy');

  @override
  Widget build(BuildContext context) {

    return Scaffold(
        appBar: AppBar(
          title: Text(widget.title),
        ),
        body: Center(
            child:
                Column(mainAxisAlignment: MainAxisAlignment.start, children: <
                    Widget>[
          Row(mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[
            SizedBox(
                height: 35,
                width: 100,
                child: Text(
                  'Fecha:',
                  style: TextStyle(fontSize: 18.0),
                  textAlign: TextAlign.end,
                )),
            SizedBox(
                height: 35,
                width: 250,
                child: TextFormField(
                    readOnly: true,
                    textAlign: TextAlign.center,
                    controller: dateCtl,
                    onTap: () async {
                      date = await showDatePicker(
                          context: context,
                          initialDate: DateTime.now(),
                          firstDate: DateTime.now().subtract(Duration(days: 2)),
                          lastDate: DateTime.now().add(Duration(days: 2)));
                      if (date == null) {
                        date = DateTime.now();
                      } else {
                        dateCtl.text = formatter.format(date);
                      }
                    }))
          ]),
          Row(mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[
            SizedBox(
                width: 95,
                height: 40,
                child: RaisedButton(
                  child: Text("A. Pacho",
                      style: TextStyle(
                          color: Color.fromRGBO(255, 255, 255, 5),
                          fontSize: 16,
                          fontStyle: FontStyle.italic),
                      textAlign: TextAlign.center),
                  color: Color.fromRGBO(16, 172, 40, 80),
                  padding: EdgeInsets.only(left: 2, right: 1.5),
                  highlightColor: Color.fromRGBO(230, 17, 17, 10),
                  elevation: 5.0,
                  shape: RoundedRectangleBorder(
                      borderRadius: new BorderRadius.circular(15.0)),
                  onPressed: () {
                    setState(() {
                      operad = "Adolfo Pacho";
                    });
                  },
                )),
          ]),
          Row(mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[
            SizedBox(width: 160, height: 30, child: Text('$operad')),
            SizedBox(
              width: 15,
            ),
          ])
        ])));
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...