createState()
用于创建和Stateful widget
相关的状态,它在Stateful widget
的生命周期中可能会被多次调用。例如,当一个Stateful widget
同时插入到widget树的多个位置时,Flutter framework就会调用该方法为每一个位置生成一个独立的State实例,其实,本质上就是一个StatefulElement
对应一个State
实例。Flutter的Tabbar的后退按钮,只需要在首页有一个
MaterialApp
,跳转到的其他Widget页面只需要使用Scaffold
即可自带返回,一般不需要自己再弄一个MaterialApp
了。状态栏透明:在main方法里调用即可
//需要导入下面的2个包
import 'dart:io';
import 'package:flutter/services.dart';
//在main函数里面加这段就可以
if(Platform.isAndroid){
SystemUiOverlayStyle systemUiOverlayStyle = SystemUiOverlayStyle(
statusBarColor:Colors.transparent,
);
SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
}
- 隐藏状态栏
SystemChrome.setEnabledSystemUIOverlays([SystemUiOverlay.bottom]);
上面的方法如果在main方法里调用,那么app的所有页面都去掉了状态栏,否则在单独页面的initState方法里调用,不过遇到个问题,如果A页面去掉了状态栏,B页面显示了状态栏,那么B返回A的时候状态栏还是显示状态,先记录一下,以后再研究怎么解决
- 修改状态栏文字颜色
状态栏透明后文字一般是白色,如果我们的appbar的颜色是浅色,这时候会看不清状态栏的文字,这时候可以在设置我们的appbar的属性时加上brightness: Brightness.light
,这时候状态栏文字就是黑色了,demo:
AppBar(
brightness: Brightness.light,
。。。
)
- 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层。