flutter备忘录

  1. createState() 用于创建和Stateful widget相关的状态,它在Stateful widget的生命周期中可能会被多次调用。例如,当一个Stateful widget同时插入到widget树的多个位置时,Flutter framework就会调用该方法为每一个位置生成一个独立的State实例,其实,本质上就是一个StatefulElement对应一个State实例。

  2. Flutter的Tabbar的后退按钮,只需要在首页有一个MaterialApp,跳转到的其他Widget页面只需要使用Scaffold即可自带返回,一般不需要自己再弄一个MaterialApp了。

  3. 状态栏透明:在main方法里调用即可

//需要导入下面的2个包
import 'dart:io';
import 'package:flutter/services.dart';
//在main函数里面加这段就可以
    if(Platform.isAndroid){
      SystemUiOverlayStyle systemUiOverlayStyle = SystemUiOverlayStyle(
        statusBarColor:Colors.transparent,
      );
      SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
    }
  1. 隐藏状态栏
SystemChrome.setEnabledSystemUIOverlays([SystemUiOverlay.bottom]);

上面的方法如果在main方法里调用,那么app的所有页面都去掉了状态栏,否则在单独页面的initState方法里调用,不过遇到个问题,如果A页面去掉了状态栏,B页面显示了状态栏,那么B返回A的时候状态栏还是显示状态,先记录一下,以后再研究怎么解决

  1. 修改状态栏文字颜色
    状态栏透明后文字一般是白色,如果我们的appbar的颜色是浅色,这时候会看不清状态栏的文字,这时候可以在设置我们的appbar的属性时加上brightness: Brightness.light,这时候状态栏文字就是黑色了,demo:
AppBar(
      brightness: Brightness.light,
      。。。
    )
  1. FutureBuilder和StreamBuilder的区别:
    FutureBuilder的future执行前,会先发送ConnectionState.waiting状态,然后future完成以后,发送ConnectionState.done状态
    StreamBuilder的stream执行前,会先发送ConnectionState.waiting,然后sink.add数据以后发送ConnectionState.active状态,如果不执行sink.close()方法的话,不会发送ConnectionState.done状态

    我现在自己做了一个mvvm框架,就是用StreamBuilder做的ui层,用StreamController做的vm层。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容