出现标题的错误的原因,极大的可能是,页面中有多个ScrollView的组件,如:ListView,SingleChildScrollView,CustomScrollView,有同样的滚动方向,但是又没有ScrollController。
这时候只要在除了第一个出现的scrollview外的scrollview中,加入:primary:false,即可
参考:The provided ScrollController is currently attached to more than one ScrollPosition · Issue #93862 · flutter/flutter (github.com)
我在遇到这个问题的情况就是:
1、页面中有弹出菜单和子菜单,高度超过了1屏
2、点击子菜单出现详情的时候,也需要滚屏(部分内容)
因此,相当于一个页面出现了3个ScrollView,在没有加primary:false前,只要子菜单一弹出,就开始报错。在子菜单中加入:primary:false后,不再出错,但点击子菜单显示详情的时候,又出现了这个错误。
将子菜单和详情对应的scrollview中都加入primary:false后,问题 解决。
在使用flutter的http库请求API时,发现返回的数据均为乱码,例如这样:ä¸æµ·å¸é¿å®åºé¿å®è·¯1189å·æ¥ç¦å£«å¹¿åºä¸åº401-402
原来使用的是:json.decode(response.body),看来不能直接对字符串进行处理。所以还是安稳的改用:json.decode(utf8.decode(response.bodyBytes))
至此问题解决。
Flutter默认的APP是直接包含状态栏的,当然如果你使用Scaffold,并且设置了appBar,那就不用纠结,他能够管理沉浸式的顶部。
如果由自己控制,会发现statusBar,被APP的主要内容压着,所以必须要整体高度去掉statusBar(电池条)的高度
1、data:ui的方法:MediaQueryData.fromWindow(window).padding.top ,这个要import data:ui
2、context方法: MediaQuery.of(context).padding.top
方法2会有个小问题,如果你使用了SafeArea来进行包含项目,并设置top:true,你获取到的 top 就是 EdgeInsets.zero。即为0,看了下源码才发现,SafeArea其实就是Padding,根据你设置的参数设置好Padding后。同时remove了原来的padding。所以导致获取到的值就是0了。。。。因此使用方法2的时候。要先将top值存为全局变量才OK。