Свойство Listen при использовании уведомлений об изменениях во флаттере - PullRequest
0 голосов
/ 25 апреля 2020

Это был код, который я пытался выполнить. В классе MyTextField я упомянул свойство listen в false, но как только я что-то наберу в текстовом поле, я смогу увидеть изменения в моей панели приложений и в текстовом виджете. В чем может быть причина такого выхода. Я надеюсь, что когда свойство listen имеет значение false, оно не должно ничего слушать, но я могу прослушивать изменения только после упоминания false. Без свойства прослушивания я не смог найти никаких изменений в панели приложения и текстовом виджете, когда вводил текстовое поле

class MyApp extends StatelessWidget {
  final String data = 'Secret message';
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider(
      create: (context)=> Data(),
          child: MaterialApp(
        home: Scaffold(
          appBar: AppBar(
            title: MyText(),
          ),
          body: Level1(),
        ),
      ),
    );
  }
}

class Level1 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      child:Level2(),
    );
  }
}

class Level2 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: Column(children: [
        MyTextField(),
        Level3()
      ],),
    );
  }
}

class Level3 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: Text(Provider.of<Data>(context).data),
    );
  }
}

class MyText extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Text(
      Provider.of<Data>(context,listen: false).data
    );
  }
}

class MyTextField extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return TextField(
      onChanged: (newText){
        **Provider.of<Data>(context,listen: false).changeString(newText);**
      },
    );
  }
}

class Data extends ChangeNotifier{
  String data = 'Dummy data';
  void changeString(String newString){
    data = newString;
    notifyListeners();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...