#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?