真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

flutter如何傳遞值到任意widget

這篇文章主要介紹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è)資訊頻道!


分享文章:flutter如何傳遞值到任意widget
文章地址:http://weahome.cn/article/pcgeoj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部