在flutter中使用更改通知程序时侦听属性

时间:2020-04-25 08:30:52

标签: flutter dart

这是我尝试执行的代码。在MyTextField类中,我提到了listen属性为false,但是一旦我在文本字段中键入内容,我就可以在我的应用栏和文本小部件中看到更改。这样输出的原因可能是什么。我希望当listen属性为false时,它不应监听任何内容,但只有将其提及为false后,我才能监听更改。没有listen属性,当我在文本字段中输入内容时,我的应用程序栏和文本小部件中找不到任何更改

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();
  }
}

0 个答案:

没有答案