日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Flutter】自定义 Flutter 组件 ( 创建自定义 StatelessWidget、StatefulWidget 组件 | 调用自定义组件 )

發(fā)布時間:2025/6/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Flutter】自定义 Flutter 组件 ( 创建自定义 StatelessWidget、StatefulWidget 组件 | 调用自定义组件 ) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 一、Flutter 組件簡介
  • 二、Flutter 自定義 StatelessWidget 組件流程
    • 1、導(dǎo)入父類包
    • 2、選擇繼承的父類
    • 3、設(shè)置成員變量及構(gòu)造函數(shù)
    • 4、重寫 build 方法
    • 5、完整代碼示例
  • 三、Flutter 自定義 StatefulWidget 組件流程
  • 四、使用 final 修飾 Widget 組件成員變量分析
  • 五、調(diào)用自定義組件
    • 1、主要方法
    • 2、完整代碼
    • 3、效果展示
  • 六、博客資源





一、Flutter 組件簡介



Flutter 開發(fā)中 , 組件可以是一個 Button 按鈕 , Text 文本 , 也可以是封裝好的一大塊區(qū)域 ; 組件由 Widget 組成 ;





二、Flutter 自定義 StatelessWidget 組件流程




1、導(dǎo)入父類包


自定義組件需要繼承 StatefulWidget 或 StatelessWidget , 這兩個父類組件都在 material.dart 中 , 因此這里先把依賴導(dǎo)入 ;

import 'package:flutter/material.dart';

2、選擇繼承的父類


自定義組件繼承 StatefulWidget 還是 StatelessWidget , 繼承哪個組件 , 由組件的性質(zhì)決定 ;

  • 如果 組件 只是純展示 , 沒有交互操作 , 那么繼承 StatelessWidget ;
  • 如果 組件 需要根據(jù)交互內(nèi)容 , 動態(tài)修改內(nèi)容 , 那么繼承 StatefulWidget ;

3、設(shè)置成員變量及構(gòu)造函數(shù)


聲明組件的成員變量 , 注意成員變量使用 final 修飾 ;

/// 組件屬性必須使用 final 修飾/// 所有的 Widget 組件都是不可變的final String name;final int? age;/// Dart 構(gòu)造函數(shù)中 , {} 內(nèi)的是可選參數(shù) , 可選參數(shù)必須在參數(shù)的最后/// 這里注意 , 可選參數(shù)如果定義為非空類型 , 那么必須有一個默認(rèn)值/// 可選參數(shù)如果定義為可空類型 , 可以不用進行初始化const StudentStatelessWidget({this.name = "Tom", this.age});

4、重寫 build 方法


StatelessWidget 中的 build 方法是抽象方法 , 必須實現(xiàn) Widget build(BuildContext context) 方法 ;

abstract class StatelessWidget extends Widget {const StatelessWidget({ Key? key }) : super(key: key);@overrideStatelessElement createElement() => StatelessElement(this);@protectedWidget build(BuildContext context); }

繼承 StatefulWidget 或 StatelessWidget 后 , 需要重寫其 build 構(gòu)造方法 ,

在該構(gòu)造方法中 , 自定義組件行為 , 在這里拼裝組件即可 ;

@overrideWidget build(BuildContext context) {return Text("$name : $age");}

5、完整代碼示例


import 'package:flutter/material.dart';/// 自定義組件繼承 StatefulWidget 還是 StatelessWidget /// 由組件的性質(zhì)決定 /// 如果 組件 只是純展示 , 沒有交互操作 , 那么繼承 StatelessWidget /// 如果 組件 需要根據(jù)交互內(nèi)容 , 動態(tài)修改內(nèi)容 , 那么繼承 StatefulWidget /// StatelessWidget 和 StatefulWidget 都需要導(dǎo)入如下包 /// import 'package:flutter/material.dart'; class StudentStatelessWidget extends StatelessWidget{/// 組件屬性必須使用 final 修飾/// 所有的 Widget 組件都是不可變的final String name;final int? age;/// Dart 構(gòu)造函數(shù)中 , {} 內(nèi)的是可選參數(shù) , 可選參數(shù)必須在參數(shù)的最后/// 這里注意 , 可選參數(shù)如果定義為非空類型 , 那么必須有一個默認(rèn)值/// 可選參數(shù)如果定義為可空類型 , 可以不用進行初始化const StudentStatelessWidget({this.name = "Tom", this.age});@overrideWidget build(BuildContext context) {return Text("$name : $age");} }



三、Flutter 自定義 StatefulWidget 組件流程



自定義 StatefulWidget 組件 , 導(dǎo)入的包 定義 final 成員變量 與 StatelessWidget 組件相同 ;

StatefulWidget 中 State createState() 方法是抽象的 ;

因此 , StatefulWidget 組件不再實現(xiàn) Widget build(BuildContext context) 方法 , 而是實現(xiàn) State createState() 方法 ;

abstract class StatefulWidget extends Widget {const StatefulWidget({ Key? key }) : super(key: key);@overrideStatefulElement createElement() => StatefulElement(this);@protected@factoryState createState(); // ignore: no_logic_in_create_state, this is the original sin }

State<StatefulWidget> createState() 方法返回值類型 State 需要設(shè)置一個泛型 , 說明該 State 是用于哪個 StatefulWidget 組件的 ; 該泛型必須是 StatefulWidget 的子類 ;

@optionalTypeArgs abstract class State<T extends StatefulWidget> with Diagnosticable {@protectedWidget build(BuildContext context); }

自定義 State 類必須實現(xiàn) Widget build(BuildContext context) 抽象方法 ;


實現(xiàn)的 StatefulWidget 的 createState 方法返回值 , 一般需要自定義 State<StatefulWidget> 實現(xiàn)類 ;

State<StatefulWidget> createState()

在該 State<StatefulWidget> 實現(xiàn)類中 , 實現(xiàn) build 方法 , 返回要顯示的組件 ;

/// 該類用于管理組件中的狀態(tài) /// 需要繼承 createState 方法返回值類型 State<StatefulWidget> /// 在該類中 , 調(diào)用 setState 方法 , 可以更新組件 class _StudentStatefulWidgetState extends State<StatefulWidget> {/// 成員變量String name;int age;/// 構(gòu)造函數(shù)_StudentStatefulWidgetState(this.name, this.age);@overrideWidget build(BuildContext context) {return Text("$name : $age");} }

完整代碼示例 :

import 'package:flutter/material.dart';/// 自定義組件繼承 StatefulWidget 還是 StatelessWidget /// 由組件的性質(zhì)決定 /// 如果 組件 只是純展示 , 沒有交互操作 , 那么繼承 StatelessWidget /// 如果 組件 需要根據(jù)交互內(nèi)容 , 動態(tài)修改內(nèi)容 , 那么繼承 StatefulWidget /// StatelessWidget 和 StatefulWidget 都需要導(dǎo)入如下包 /// import 'package:flutter/material.dart'; class StudentStatefulWidget extends StatefulWidget{/// 組件屬性必須使用 final 修飾/// 所有的 Widget 組件都是不可變的final String name;final int? age;/// Dart 構(gòu)造函數(shù)中 , {} 內(nèi)的是可選參數(shù) , 可選參數(shù)必須在參數(shù)的最后/// 這里注意 , 可選參數(shù)如果定義為非空類型 , 那么必須有一個默認(rèn)值/// 可選參數(shù)如果定義為可空類型 , 可以不用進行初始化const StudentStatefulWidget({this.name = "Tom", this.age});@overrideState<StatefulWidget> createState() => _StudentStatefulWidgetState(name, age!); }/// 該類用于管理組件中的狀態(tài) /// 需要繼承 createState 方法返回值類型 State<StatefulWidget> /// 在該類中 , 調(diào)用 setState 方法 , 可以更新組件 class _StudentStatefulWidgetState extends State<StatefulWidget> {/// 成員變量String name;int age;/// 構(gòu)造函數(shù)_StudentStatefulWidgetState(this.name, this.age);@overrideWidget build(BuildContext context) {return Text("$name : $age");} }



四、使用 final 修飾 Widget 組件成員變量分析



組件屬性必須使用 final 修飾 , 如果不使用 final 修飾組件屬性 , 會有如下報錯 ;

Can't define a const constructor for a class with non-final fields. (Documentation) Try making all of the fields final, or removing the keyword 'const' from the constructor.


我們自定義的 StudentWidget 繼承了 StatelessWidget 類 , StatelessWidget 繼承了 Widget ;

abstract class StatelessWidget extends Widget { }

Widget 類由 @immutable 注解修飾 , 被該注解修飾的類 , 該類以及其子類中 的 成員變量都是不可變的 , 即都要被 final 類型修飾 ;

@immutable abstract class Widget extends DiagnosticableTree { }



五、調(diào)用自定義組件




1、主要方法


在 main.dart 中 , 使用如下代碼 , 創(chuàng)建組件 ;

StudentStatelessWidget(name: "Tom",age: 18 ), StudentStatefulWidget(name: "Jerry",age: 16 ),

2、完整代碼


完整代碼 :

import 'package:flutter/material.dart'; import 'package:flutter_widget/widget/student_stateful_widget.dart'; import 'package:flutter_widget/widget/student_stateless_widget.dart';void main() {runApp(MyApp()); }class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Flutter Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: MyHomePage(title: 'Flutter Demo Home Page'),);} }class MyHomePage extends StatefulWidget {MyHomePage({Key? key, required this.title}) : super(key: key);final String title;@override_MyHomePageState createState() => _MyHomePageState(); }class _MyHomePageState extends State<MyHomePage> {int _counter = 0;void _incrementCounter() {setState(() {_counter++;});}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text(widget.title),),body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[StudentStatelessWidget(name: "Tom",age: 18),StudentStatefulWidget(name: "Jerry",age: 16),Text('You have pushed the button this many times:',),Text('$_counter',style: Theme.of(context).textTheme.headline4,),],),),floatingActionButton: FloatingActionButton(onPressed: _incrementCounter,tooltip: 'Increment',child: Icon(Icons.add),), // This trailing comma makes auto-formatting nicer for build methods.);} }

3、效果展示


效果展示 : 紅色矩形框中是顯示的兩個組件 ;





六、博客資源



GitHub : https://github.com/han1202012/flutter_widget

總結(jié)

以上是生活随笔為你收集整理的【Flutter】自定义 Flutter 组件 ( 创建自定义 StatelessWidget、StatefulWidget 组件 | 调用自定义组件 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 无套内谢的新婚少妇国语播放 | 超碰人人澡 | 午夜污污| 日本中文字幕在线不卡 | 欧美韩国一区 | 不卡国产在线 | 精品国产乱码久久久久 | 免费毛片av | 一区二区三区四区人妻 | 国产精品二区三区 | 欧美日韩一区二区三区四区五区六区 | 欧美操女人 | 伊人影视久久 | 人人澡人人澡人人澡 | 亚洲第一黄色片 | 免费在线观看成人 | 在线观看免费高清视频 | 丰满少妇高潮一区二区 | 三上悠亚在线观看一区二区 | 在线观看av日韩 | 久久久精品国产 | 欧美图片一区 | 日本三级视频在线观看 | 亚洲欧美一区二区三区在线 | 开心激情深爱 | 久久综合日本 | 秘密基地电影免费版观看国语 | 黄91在线观看 | 狠狠干夜夜爽 | 欧洲做受高潮欧美裸体艺术 | 啪啪免费视频网站 | 国产成人精品免费视频 | 在线国产91 | 艳妇乳肉豪妇荡乳av | 国产精品野外户外 | 久久久久亚洲av成人无码电影 | 亚洲伦理在线播放 | 激情综合色 | 久久国产亚洲 | av一区在线观看 | 97成人超碰 | 少妇一级淫免费观看 | 国产精品成人免费看片 | 国产免费激情视频 | 51精品国产人成在线观看 | 日韩精品观看 | 日本乳汁视频 | 亚洲 自拍 另类 欧美 丝袜 | 毛片无限看 | av直接看| 天天操天天射天天舔 | 超碰不卡 | 国产精品自拍在线 | 久久国产精品网站 | 91九色高潮 | wwwwxxxxx日本 | 久久福利免费视频 | 欧美老熟妇又粗又大 | 国产做爰免费视频观看 | n0659极腔濑亚美莉在线播放播放 | 在线看黄色的网站 | 99久久精品免费看国产免费软件 | 激情亚洲 | 欧美自拍色图 | 欧美a∨亚洲欧美亚洲 | 精品无码av一区二区三区 | 五月天导航| 欧美日韩一级黄色片 | 国精产品一区一区三区在线 | 阿v天堂2017| 黄色日韩在线 | 日韩激情国产 | 韩国三级hd中文字幕有哪些 | 国产成人99 | 久久国产香蕉视频 | 日韩欧美综合久久 | 激情婷婷综合 | 中文字幕av高清片 | 一本大道伊人av久久综合 | 性色av一区二区三区在线观看 | 精品综合网 | caoporn人人| 国产美女自慰在线观看 | 美女被草| 四虎成人精品永久免费av九九 | 九九热在线观看 | 国产第一精品视频 | 一起艹在线观看 | 欧美不在线 | 欧美性在线视频 | 毛片久久久久久久 | 国产99免费 | 久久77777| 精品久久久无码中文字幕边打电话 | 成人区人妻精品一区二 | 自拍视频在线 | 五月天激情视频 | 久久精品久久久久 | 草草浮力影院 |