如何解决我正在使用 flutter Provider 包中的 notifyListner,但我的 UI 没有更新
我正在使用 Flutter Provider 包中的 notifyListner,但是每当我在 TextField 中输入字母时,我的 UI 都不会更新。我制作这个应用程序只是为了了解 Provider 的工作原理。每当我在 TextFiled 中键入文本时,我的应用栏和文本都应该更改。这是我的代码,
import 'package:Flutter/material.dart';
import 'package:provider/provider.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<Data>(
create: (context) => Data(),child: MaterialApp(
home: Scaffold(
appBar: AppBar(
title: MyAppBar(),),body: SafeArea(
child: Column(
children: [
MyTextField(),Expanded(
child: MyTextWidget(),],);
}
}
class MyTextField extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
child: TextField(
onChanged: (newValue) {
Provider.of<Data>(context,listen: true).changeString(newValue);
},);
}
}
class MyTextWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
child: Text(Provider.of<Data>(context,listen: true).appName),);
}
}
class MyAppBar extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Text(Provider.of<Data>(context,listen: true).appName);
}
}
class Data extends ChangeNotifier {
String appName = 'Understanding Provider';
void changeString(String newString) {
appName = newString;
notifyListeners();
}
}
请有人帮忙,谢谢!
解决方法
当您在 MyTextField
内更新时,您不应该听取您的提供者的意见:
class MyTextField extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
child: TextField(
onChanged: (newValue) {
Provider.of<Data>(context,listen: false).changeString(newValue);
},),);
}
}
设置 listen: false
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。