91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

flutter如何傳遞值到任意widget

發布時間:2021-08-10 09:27:10 來源:億速云 閱讀:145 作者:小新 欄目:移動開發

這篇文章主要介紹flutter如何傳遞值到任意widget,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

如果我們有這樣一個應用場景:

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();
    },child: Text("add"),),
   ),
  );
 }
 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”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西畴县| 五华县| 淳安县| 广水市| 达孜县| 昌平区| 大姚县| 防城港市| 崇仁县| 门源| 舞钢市| 昌平区| 保康县| 铜川市| 天镇县| 嘉祥县| 霸州市| 东方市| 中宁县| 鄂州市| 轮台县| 互助| 南康市| 临清市| 武隆县| 桓台县| 青川县| 樟树市| 壶关县| 佛教| 巫山县| 都昌县| 伊金霍洛旗| 芒康县| 天镇县| 石屏县| 抚顺县| 东源县| 定州市| 郓城县| 靖远县|