【问题标题】:I m getting 3types of errors1) RenderBox was not laid out2) Failed assertion: line 1930 pos 12: 'hasSize' and Null check operator used on a null value我遇到 3 种错误 1) RenderBox 未布置 2) 断言失败:第 1930 行 pos 12: 'hasSize' 和 Null 检查运算符用于空值
【发布时间】:2021-08-25 09:50:52
【问题描述】:

我正在创建一个包含 TaskList 和 Task Tiles 的待办事项应用程序,通过创建任务列表的复选框并使用回调函数,我得到了 3 种类型的错误。

  1. RenderBox 未布置 2) 断言失败:第 1930 行 pos 12: 'hasSize' 3) 空值检查运算符用于空值

TaskList 类代码:

import 'package:flutter/material.dart';
import 'package:todoey_flutter/widgets/TaskTile.dart';


class TaskList extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ListView(
      children: <Widget>[
        TaskTile(),
        TaskTile(),
      ],
    );
  }
}

包含复选框和回调的TaskTile代码:

import 'package:flutter/material.dart';
class TaskTile extends StatefulWidget {
  @override
  _TaskTileState createState() => _TaskTileState();
}


class _TaskTileState extends State<TaskTile> {
  bool isChecked= false;


  @override
  Widget build(BuildContext context) {
    return ListTile(
      title: Text(
        'This is my task.',
        style: TextStyle(
        decoration: isChecked ? TextDecoration.lineThrough : null,
    ),),
      trailing: TaskCheckBox(isChecked, (bool checkboxState) {
        setState(() {
          isChecked = checkboxState;
        });
      },
      ),
    );
  }
}

class TaskCheckBox extends StatelessWidget {

  TaskCheckBox (this.checkboxState, this.toggleCheckBoxState);
  final bool checkboxState;
  final Function toggleCheckBoxState;


  @override
  Widget build(BuildContext context) {
    return Checkbox(
      activeColor: Colors.blueAccent,
        value: checkboxState,
        onChanged: toggleCheckBoxState(),
    );
  }
}

【问题讨论】:

  • fixe 1-> onChanged: ()=>toggleCheckBoxState(),
  • 请检查答案我希望它对你有用
  • 它对我不起作用

标签: flutter dart checkbox render


【解决方案1】:

我认为它解决了你的解决方案

ListView(
  shrinkWrap: true,
  physics: AlwaysScrollableScrollPhysics(),
 children: <Widget>[
        TaskTile(),
        TaskTile(),
      ],
)

TaskTile 类:

import 'package:flutter/material.dart';
class TaskTile extends StatefulWidget {
  @override
  _TaskTileState createState() => _TaskTileState();
}


class _TaskTileState extends State<TaskTile> {
  bool isChecked= false;


  @override
  Widget build(BuildContext context) {
    return ListTile(
      title: Text(
        'This is my task.',
        style: TextStyle(
          decoration: isChecked ? TextDecoration.lineThrough : null,
        ),),
      trailing: Checkbox(
        activeColor: Colors.blueAccent,
        value: isChecked,
        onChanged: (value){
          setState(() {
            isChecked = value;
          });
        },
      )
    );
  }
}

【讨论】:

  • 等一下我再检查一遍
  • 更新了我的答案,TaskCheckBox 不需要在尾随中实现这个,因为在尾随中你不会在没有 checkBox 的情况下更新 setState 值
  • 不,当我将 value 分配给 isChecked 时,它弹出以下错误:'bool?' 类型的值不能分配给“bool”类型的变量。
  • 它刚刚添加!在一个值的末尾。非常感谢。
  • 这是我的荣幸
【解决方案2】:

修复 1-> onChanged: ()=&gt;toggleCheckBoxState() 而第二个可能是装饰不能为空,所以传递TextDecoration(),空构造函数。

and 3rds 如果 listview 有约束 parent,则使用 ExpandedshrinkWrap true 包装 listview。

【讨论】:

  • 给定代码中没有任何 boxDecoration。你说的是文字装饰吗?
  • 对不起,我更新了我的答案。谢谢@UsamaBinTahir
猜你喜欢
  • 2021-08-19
  • 2021-03-04
  • 2023-01-24
  • 2020-09-02
  • 2020-11-30
  • 2020-03-01
  • 2018-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多