flutter 记录遇到的各种问题及解决
The method ‘xxx’ was called on null
findRootAncestorStateOfType was called on mull
showCupertinoModalPopup(
context: context,
开始给context设置了null,所以报这个错
margin: EdgeInsets.only(left: 30.0, right: 30.0),
在container里设置margin没有效果,加上了alignment,有效果了。。
No Material widget found.
Checkbox widgets require a Material widget ancestor.
使用CheckBox的时候,直接使用了container,
查阅资料,CheckBox是一个material风格的组件,使用material组件需要在build方法中使用scaffold作为根控件,即在最外面包一层scaffold
'package:flutter/src/material/checkbox.dart': Failed assertion: line 71 pos 15: 'tristate || value != null': is not true.
复选框的属性tristate为必需
Unhandled Exception: type 'String' is not a subtype of type 'int'
在删除操作的时候,数组删除某个元素,传过来的index参数,写成了widget.index,传过去会被认为是string的history.index,而不是int类型的index,所以要先声明一个int变量=widget.index,将这个变量传过去即可
原代码:
widget.callback("$widget.index");
void() { titleList.removeAt(index); }
会报错
int index = widget.index;
widget.callback("$index");
void() { titleList.removeAt(index); }
以为这样就不会报错了
但还是报错了。。。
把传int类型的index参数改成了string类型的值,将要删除的元素直接传过去,titleList.remove(value);
这样子没问题了
RenderBox was not laid out:
一般情况是未指定控件的大小(如TextField),可以在外出包含一层container或SizeBox、Expanded
输入框圆角设置
使用decoration: BoxDecoration设置
代码对齐快捷键
Shift + Alt + F 实现代码的对齐;
生活习惯—— 饮食情况,单选框,最上面一块无法点击,row布局无法点击,column布局正常 ?
解决:
疾病多选页面,= 点击保存和选择时间全部按钮会变成最后一个按钮的选中状态?
解决: 换成系统返回方法没有这个bug
上面方法不严谨,其实原因是在选中状态后修改了bgcolor的值,应该只修改isSelected,
setState(() {
isSelected = !isSelected;
// if (isSelected) {
// ButtonColor.bgColor = Colors.orangeAccent;
// ButtonColor.fontColor = Colors.white;
// } else {
// ButtonColor.bgColor = Colors.grey[200];
// ButtonColor.fontColor = Colors.grey;
// }
// print("$isSelected");
}),
在设置颜色的时候判断是否被选中然后设置对应的颜色
color: isSelected?Colors.white:Colors.grey,
初始化也不需要设置color的默认值
super.initState();
// ButtonColor.bgColor = Colors.grey[200];
// ButtonColor.fontColor = Colors.grey;
已添加的病史可删除 = type 'String' is not a subtype of type 'int' ?,
解决:参数传int类型index改为了string类型title
基本信息和生活习惯picker选择和输入,item全部更新了数据 ?
解决:用一个数组,每次选中的值替换数组中相应位置的元素
final List results = [
"",
"",
"",
"",
"",
];
在setState方法里修改数组
void showPickerResult(String value, int index) {
setState(() {
pickerResult = value;
widget.results.replaceRange(index, index + 1, [value]);
});
}
页面跳转传值到下一页面、返回传值到上一页面?
解决:第二个界面返回第一个界面传值使用goBackWithParams方法。
第一个界面push到第二个界面的时候用pushWidgetResult方法,可以接收到第二个界面传回来的值。
// 传参数方法可以用path,类似于url拼接;还可以用类似跳转到webview的方法 NavigatorUtils
滑动页面,输入的数据就没了??
错误原因:数据在_InformationItemState里初始化,每次滑动都会走createState方法,所以一滑动数据就会重新初始化,相当于创建了一个新的_InformationItemState,
解决:数据初始化应该放在InformationItem里面
Picker行高修改后,文字不居中?
解决:在text外包一层center
输入框弹出的时候,A RenderFlex overflowed by 228 pixels on the bottom. ?
解决:Singleview
好像没有用
默认选中行?
解决:
scrollController: FixedExtentScrollController(
initialItem: widget.defaultRow
),
[VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: Concurrent modification during iteration: Instance(length:2) of '_GrowableList'.
遍历数组时,对数组进行了add或者remove操作
如
for (HealthData health in _healthList) {
if (health.dataType == data.dataType) {
health.dataTime = data.dataTime;
health.dataValue = data.dataValue;
health.unit = data.unit;
} else {
_healthList.add(data);
}
}
有输入框有listview(或是其他可滑动的控件)的页面,如下:
listview即使加了Expanded包裹还是会报错,页面空白,无法正常显示出来
后来试了下,将KeyboardActions这一层去掉,可以正常显示
图片.png
原因暂不明确,回头研究一下
防止点击过快
onPressed: () {
if (_count > 0) {
return;
}
_editInfo();
}
延迟跳转
Future popBack() async {
return await Future.delayed(
Duration(milliseconds: defaultRefreshMilliseconds), () {
Navigator.of(context).pop();
});
}