美文网首页Flutter
flutter 记录遇到的各种问题及解决

flutter 记录遇到的各种问题及解决

作者: 夏天爱西瓜汁 | 来源:发表于2020-01-19 14:12 被阅读0次

    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();
        });
      }
    

    相关文章

      网友评论

        本文标题:flutter 记录遇到的各种问题及解决

        本文链接:https://www.haomeiwen.com/subject/ogyrzctx.html