微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我正在使用 flutter Provider 包中的 notifyListner,但我的 UI 没有更新

如何解决我正在使用 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 举报,一经查实,本站将立刻删除。