Flutter开发 - 今日总结

前言

最近忙了一段时间,没有记录Flutter开发过程中遇到的问题,今天抽点时间做个总结,记录一下开发经验!

开发过程遇到的

1、当使用textfileld编辑时,点击空白处,如何收起键盘?

使用GestureDetector组件包裹视图,在onTap点击方法里添加:FocusScope.of(context).requestFocus(FocusNode());

2、CupertinoActionSheet和showCupertinoModalPopup

iOS风格的底部弹框组件,CupertinoActionSheetAction是CupertinoActionSheet的子组件,也可自定义子组件,配合showCupertinoModalPopup实现底部弹框。

3、OffStage组件

控制子组件是否展示,offStage为true时隐藏,false时展示,可保持页面状态,单个页面有多个tab切换页面时可用,但加载时,所有子页面一次性全部加载,开销比较大。推荐使用PageView+ AutomaticKeepAliveClientMixin。

4、IndexedStack组件

继承自Stack组件,可以堆叠子视图,通过index控制子视图的展示,与OffStage类似。

5、InkWell组件

InkWell组件提供水波纹点击效果,可自定义实现独特的点击效果。

6、父组件如何调用子组件的方法?

如果子组件是StatelessWidget,父组件调用子组件方法很简单,直接使用子组件类名调用其内部定义的方法即可。如果子组件是StatefulWidget,子组件方法定义在State里,那么如何调用呢?

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() {
      //子组件内实现方法...
  }
}

在父组件就可以定义
final GlobalKey _stateKey = new GlobalKey();
将_stateKey作为ChildView的key值,就可以通过:
_stateKey.currentState!. publicMethod();调用到子组件内部定义的方法。

注意:ChildViewState不能定义为_ChildViewState,否则父组件里定义GlobalKey将获取不到ChildViewState,在Flutter里,加了下划线默认是私有的方法或者属性,外部无法获取到。

7、Row、Column、Expanded和Container组件使用问题

1、如果要实现Text组件换行,可在Text组件外面嵌套一层Expanded组件,但若将Expanded组件外面嵌套一层Container组件时,换行就没效果,布局还是会溢出报错;
2、若Expanded组件直接作为Column的children子组件时,布局会报错,需要在Expanded组件嵌套一层Row组件。

后语

以上就时开发过程中遇到的问题,如有错误请指正,共勉!

你可能感兴趣的:(Flutter开发 - 今日总结)