flutter传递值到任意widget(当需要widget嵌套使用需要传递值的时候)

flutter传递值到任意widget(当需要widget嵌套使用需要传递值的时候),第1张

概述flutter传递值到任意widget(当需要widget嵌套使用需要传递值的时候) 如果我们有这样一个应用场景: WidgetA执行点击之后将数据通过widgetB传递到其下的widgetC. 通常可以通过设置构造函数,传递对应参数到制定的widget树中,如下面代码所描述: 表示需要将widgetA中的点击改变内容传递到widgetB中的widgetC中展示: 需要通过设置widgetB的构造函数,接收对应参数,再传递给widgetC展示: class Inheritedwidget extends StatefulWidget { @override _InheritedW

如果我们有这样一个应用场景:

WidgetA执行点击之后将数据通过WidgetB传递到其下的WidgetC。

通常可以通过设置构造函数,传递对应参数到制定的Widget树中,如下面代码所描述:

表示需要将WidgetA中的点击改变内容传递到WidgetB中的WidgetC中展示;

需要通过设置WidgetB的构造函数,接收对应参数,再传递给WidgetC展示;

class inheritedWidget extends StatefulWidget { @overrIDe _inheritedWidgetState createState() => _inheritedWidgetState();}class _inheritedWidgetState extends State<inheritedWidget> { int count=0; @overrIDe voID initState() {  // Todo: implement initState  super.initState(); } @overrIDe Widget build(BuildContext context) {  print(count);  return Scaffold(   appbar: Appbar(Title: Text("inherited Widget"),),body: Container(   child: Center(    child: Column(     children: <Widget>[      Text("class0"),class1(count),],floatingActionbutton: floatingActionbutton(onpressed: (){    return addCount();   },child: Text("add"),); } voID addCount() {  setState(() {   count=1+count;  }); }}

WidgetB:

class class1 extends StatelessWidget { int count; class1(this.count); @overrIDe Widget build(BuildContext context) {  return Container(   child: Column(     children: <Widget>[      Text("class1"),class2(count),); }}

WidgetC:

class class2 extends StatelessWidget { int count; class2(this.count); @overrIDe Widget build(BuildContext context) {  return Container(   child: Center(    child: Text("$count"),); }}

以上方法当然可以实现需要的效果,但是当有多层的Widget嵌套关系的时候代码阅读性降低,可以通过以下方法传递值到指定的Widget中;

通过类似于AndroID中的contentProvIDer提供一个中间类,将需要传递的数据通过中间类传递到制定的Widget中。

中间类:

//countProvIDer类 提供count属性和child属性 用于与原Widget相关联,class CountProvIDer extends inheritedWidget{ final int count; final Widget child; //构造方法 CountProvIDer({this.count,this.child}):super(child:child); //提供方法获取到countprovIDer类对象static CountProvIDer of(BuildContext context){ return context.inheritFromWidgetOfExactType(CountProvIDer);} @overrIDe bool updateShouldNotify(inheritedWidget oldWidget) {  // Todo: implement updateShouldNotify  return false; }}

通过counterprovIDer包裹需要展示的Widget并传入需要改变的值;

class inheritedWidget extends StatefulWidget { @overrIDe _inheritedWidgetState createState() => _inheritedWidgetState();}class _inheritedWidgetState extends State<inheritedWidget> { int count=0; @overrIDe Widget build(BuildContext context) {  print(count);  return CountProvIDer(   count:count,child: Scaffold(    backgroundcolor: colors.blue,appbar: Appbar(Title: Text("inherited Widget"),body: Container(    child: Center(     child: Column(      children: <Widget>[       Text("class0"),class1(),floatingActionbutton: floatingActionbutton(onpressed: (){     return addCount();    },); } voID addCount() {  setState(() {   count=1+count;  }); }}

使用中间类提供的数据执行更新对应Widget。

class class2 extends StatelessWidget { @overrIDe Widget build(BuildContext context) {  int count = CountProvIDer.of(context).count;  return Container(   child: Center(    child: Text("$count"),); }}

通过以上方法即可在不同Widget中传递需要改变的值。

总结

以上所述是小编给大家介绍的Flutter传递值到任意Widget(当需要Widget嵌套使用需要传递值的时候),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

总结

以上是内存溢出为你收集整理的flutter传递值到任意widget(当需要widget嵌套使用需要传递值的时候)全部内容,希望文章能够帮你解决flutter传递值到任意widget(当需要widget嵌套使用需要传递值的时候)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1145827.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存