前言
最近忙了一段時(shí)間喉前,沒有記錄Flutter開發(fā)過程中遇到的問題没酣,今天抽點(diǎn)時(shí)間做個(gè)總結(jié),記錄一下開發(fā)經(jīng)驗(yàn)卵迂!
開發(fā)過程遇到的
1裕便、當(dāng)使用textfileld編輯時(shí),點(diǎn)擊空白處见咒,如何收起鍵盤偿衰?
使用GestureDetector組件包裹視圖,在onTap點(diǎn)擊方法里添加:
FocusScope.of(context).requestFocus(FocusNode());
2改览、CupertinoActionSheet和showCupertinoModalPopup
iOS風(fēng)格的底部彈框組件下翎,CupertinoActionSheetAction是CupertinoActionSheet的子組件,也可自定義子組件宝当,配合showCupertinoModalPopup實(shí)現(xiàn)底部彈框视事。
3、OffStage組件
控制子組件是否展示庆揩,offStage為true時(shí)隱藏俐东,false時(shí)展示,可保持頁面狀態(tài)订晌,單個(gè)頁面有多個(gè)tab切換頁面時(shí)可用虏辫,但加載時(shí),所有子頁面一次性全部加載锈拨,開銷比較大砌庄。推薦使用PageView+ AutomaticKeepAliveClientMixin。
4奕枢、IndexedStack組件
繼承自Stack組件娄昆,可以堆疊子視圖,通過index控制子視圖的展示验辞,與OffStage類似稿黄。
5、InkWell組件
InkWell組件提供水波紋點(diǎn)擊效果跌造,可自定義實(shí)現(xiàn)獨(dú)特的點(diǎn)擊效果杆怕。
6族购、父組件如何調(diào)用子組件的方法?
如果子組件是StatelessWidget陵珍,父組件調(diào)用子組件方法很簡(jiǎn)單寝杖,直接使用子組件類名調(diào)用其內(nèi)部定義的方法即可。如果子組件是StatefulWidget互纯,子組件方法定義在State里瑟幕,那么如何調(diào)用呢?
class ChildView extends StatefulWidget {
ChildView({
Key? key,
}) : super(key: key);
@override
State createState() {
return IbsImageStateState();
}
}
class ChildViewState extends State< ChildView > {
@override
Widget build(BuildContext context) {
return Container();
}
void publicMethod() {
//子組件內(nèi)實(shí)現(xiàn)方法...
}
}
在父組件就可以定義
final GlobalKey<ChildViewState> _stateKey = new GlobalKey<ChildViewState>();
將_stateKey作為ChildView的key值留潦,就可以通過:
_stateKey.currentState!. publicMethod();
調(diào)用到子組件內(nèi)部定義的方法只盹。
注意:
ChildViewState
不能定義為_ChildViewState
,否則父組件里定義GlobalKey將獲取不到ChildViewState兔院,在Flutter里殖卑,加了下劃線默認(rèn)是私有的方法或者屬性,外部無法獲取到坊萝。
7孵稽、Row、Column十偶、Expanded和Container組件使用問題
1菩鲜、如果要實(shí)現(xiàn)Text組件換行,可在Text組件外面嵌套一層Expanded組件惦积,但若將Expanded組件外面嵌套一層Container組件時(shí)接校,換行就沒效果,布局還是會(huì)溢出報(bào)錯(cuò)狮崩;
2馅笙、若Expanded組件直接作為Column的children子組件時(shí),布局會(huì)報(bào)錯(cuò)厉亏,需要在Expanded組件嵌套一層Row組件。
后語
以上就時(shí)開發(fā)過程中遇到的問題烈和,如有錯(cuò)誤請(qǐng)指正爱只,共勉!