问题描述: 每当输入内容的时候,光标总是跑到开头,正常来说,应该是一直保持在末尾的 解决办法: _phone是我controller控制器的值,设置一下selection,就可以解决这个问题了
onChanged:(value){ _phone.text = value; _phone.selection = TextSelection.fromPosition( TextPosition(offset: _phone.text.length) ); },问题截图:
解决办法: SingleChildScrollView控件 该控件是用来支持小部件滚动的,类似于Android中的ScrollView,只需将我们的内容外面嵌套个SingleChildScrollView就可以了, 注意一点的是, 不能嵌套超出内容很多的内容,官方文档是这样解释的
需要注意的是,通常SingleChildScrollView只应在期望的内容不会超过屏幕太多时使用,这是因为SingleChildScrollView不支持基于Sliver的延迟实例化模型,所以如果预计视口可能包含超出屏幕尺寸太多的内容时,那么使用SingleChildScrollView将会非常昂贵(性能差),此时应该使用一些支持Sliver延迟加载的可滚动组件,如ListView。
问题描述: 关于Flutter中声明周期的问题,真的是把我坑坏了,由于本人是前端出身,在Vue的生命周期的灌溉下,一度以为原理都差不多。Flutter的 initState 生命周期,是每一次浏览当前控件时,都会调用一次。举个简单的例子,大多数的APP都会有一个轮播图控件,开发人员会将轮播组件单独提出来,是肯定需要获取后台 给的轮播图的路径的,我一开始的做法是,在initState中调用Dio请求,获取数据。问题就出现在这里,假如我下滑后查看别的,再次滑到轮播图组件哪里,就会出现卡顿的问题,就像轮播图突然出现了一样,这就是因为我在initState当中获取数据的问题,每一次页面渲染,都会去调用initState方法,每一次都相当于从新获取了一遍数据 解决办法 在父组件获取数据,序列化数据后,或者转为List格式后,再传值给子组件,这样就避免了每次调用都会卡顿的问题
沉浸式状态栏
if (Platform.isAndroid) { // 以下两行 设置android状态栏为透明的沉浸。写在组件渲染之后, // 是为了在渲染后进行set赋值,覆盖状态栏,写在渲染之前MaterialApp组件会覆盖掉这个值。 SystemUiOverlayStyle systemUiOverlayStyle = SystemUiOverlayStyle(statusBarColor: Colors.transparent); SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle); }修改状态栏的主题色,有dark和light两种
@override Widget build(BuildContext context) { return AnnotatedRegion<SystemUiOverlayStyle>( value: SystemUiOverlayStyle.light, child: Material(child:Scaffold(),),); }