Flutter : поле текстовой формы при изменении значения на текстовый виджет

#flutter #dart

#трепетание #дротик

Вопрос:

Я новичок, я пытаюсь изменить значение при вводе в текстовое поле, значение обновляет текстовый виджет.

Я пробовал два способа: один из onchanged, другой использует TextEditingController, ничего из этого не работает.

 final txtController = TextEditingController();
String onchangeval = "";

TextFormField(
  onChanged: (value){
    onchangeval = value;
  },
  controller: txtController
),
Text("value_1 : "   onchangeval),
Text("value_2 : "   txtController.text),
  

ПРИМЕЧАНИЕ: в настоящее время используется extends HookWidget

Ответ №1:

Вам нужно вызвать setState (), который сообщает платформе, что состояние виджета изменилось и что виджет должен быть перерисован.

 class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  final txtController = TextEditingController();
  String onchangeval = "";

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisSize: MainAxisSize.min,
      children: [
        TextFormField(
            onChanged: (value) {
              setState(() {
                onchangeval = value;
              });
            },
            controller: txtController),
        Text("value_1 : "   onchangeval),
        Text("value_2 : "   txtController.text),
      ],
    );
  }
}
  

Комментарии:

1. Привет, я использую extends HookWidget, есть идеи также использовать setstate?

2. @FeelRightz Я предлагаю вам опубликовать еще один вопрос и опубликовать свой полный код, чтобы иметь возможность ответить вам правильно. 🙂

Ответ №2:

Вы должны вставить его setstate . documentation: https://api.flutter.dev/flutter/widgets/State/setState.html

Для обеспечения setstate работы вам необходимо изменить тип вашего виджета на StatefulWidget

 final txtController = TextEditingController();
String onchangeval = "";

TextFormField(
  onChanged: (value){
setState(() {
    onchangeval = value;
});
  },
  controller: txtController
),
Text("value_1 : "   onchangeval),
Text("value_2 : "   txtController.text),
  

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

Ответ №3:

Вы должны использовать setState()

 class MyHomePage extends StatefulWidget {
  MyHomePage({Key key}) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final txtController = TextEditingController();
  String onchangeval = "";

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            TextFormField(
                onChanged: (value) {
                  setState(() {
                    onchangeval = value;
                  });
                },
                controller: txtController),
            Text(
              onchangeval,
            ),
          ],
        ),
      ),
    );
  }
}
  

См.: https://api.flutter.dev/flutter/widgets/StatefulWidget-class.html

Комментарии:

1. Привет, я использую extends HookWidget, есть идеи также использовать setstate?