這篇文章主要介紹flutter如何傳遞值到任意widget,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!
在海州等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、網(wǎng)站設(shè)計 網(wǎng)站設(shè)計制作按需開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計,營銷型網(wǎng)站,外貿(mào)網(wǎng)站制作,海州網(wǎng)站建設(shè)費用合理。
如果我們有這樣一個應(yīng)用場景:
WidgetA執(zhí)行點擊之后將數(shù)據(jù)通過widgetB傳遞到其下的widgetC。
通??梢酝ㄟ^設(shè)置構(gòu)造函數(shù),傳遞對應(yīng)參數(shù)到制定的widget樹中,如下面代碼所描述:
表示需要將widgetA中的點擊改變內(nèi)容傳遞到widgetB中的widgetC中展示;
需要通過設(shè)置widgetB的構(gòu)造函數(shù),接收對應(yīng)參數(shù),再傳遞給widgetC展示;
class Inheritedwidget extends StatefulWidget { @override _InheritedWidgetState createState() => _InheritedWidgetState(); } class _InheritedWidgetState extends State{ 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: [ 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:[ 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"), ), ); } }
以上方法當(dāng)然可以實現(xiàn)需要的效果,但是當(dāng)有多層的widget嵌套關(guān)系的時候代碼閱讀性降低,可以通過以下方法傳遞值到指定的widget中;
通過類似于Android中的contentProvider提供一個中間類,將需要傳遞的數(shù)據(jù)通過中間類傳遞到制定的widget中。
中間類:
//countProvider類 提供count屬性和child屬性 用于與原widget相關(guān)聯(lián), class CountProvider extends InheritedWidget{ final int count; final Widget child; //構(gòu)造方法 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{ 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: [ Text("class0"), class1(), ], ), ), ), floatingActionButton: FloatingActionButton(onPressed: (){ return addCount(); },child: Text("add"),), ), ); } void addCount() { setState(() { count=1+count; }); } }
使用中間類提供的數(shù)據(jù)執(zhí)行更新對應(yīng)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”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!