class UserInputArea extends StatefulWidget {
@override
State<UserInputArea> createState() => _UserInputAreaState();
}
class _UserInputAreaState extends State<UserInputArea> {
@override
Widget build(BuildContext context) {
String convertedText='';
setState(() {
convertedText = Provider.of<UserText>(context, listen: true).convertedText;
print('convertedText :: $convertedText');
});
return Card(
elevation: 10,
child: Container(
padding: EdgeInsets.all(10),
child: TextField(
decoration: InputDecoration(hintText: convertedText.isNotEmpty ? convertedText : 'Enter text'),
keyboardType: TextInputType.multiline,
maxLines: 5,
onChanged: (value){
Provider.of<UserText>(context, listen: false).updateText(value);
},
),
),
);
}
}
每当convertedText更新时,需要更新hintText字段。仅当屏幕以某种方式刷新时,才会发生此更新(在应用程序栏中,如果点击主页按钮图标,则TextField中的数据将更新),使用应侦听更改并更新所需字段的提供程序包,不起作用。因此将页面转换为有状态小部件并添加了setState()&在里面移动了convertedText变量。但是它仍然不工作,并且不能弄清楚,这里到底缺少什么?任何帮助都表示感谢。提前感谢
2条答案
按热度按时间sg24os4d1#
请使用TextEditingController class
您的代码将如下所示
在上面的代码中,当你进入页面时,提示文本将在2秒后测试,值将是“chabging后测试”,没有任何问题,你不需要setState((){})我累了,它工作
xjreopfe2#
我认为将
SetState()
放入方法中并从onChanged
调用方法可以解决这个问题。然后将它从Widget build
中移走。类似于: