Flutter:尝试根据bool是true还是false有条件地显示小部件

nhaq1z21  于 2023-06-24  发布在  Flutter
关注(0)|答案(1)|浏览(144)

我想显示一个小部件的基础上,是一个bool的变量是真还是假。但是我得到了错误:_TypeError(类型“Null”不是类型“Widget”的子类型)。

import 'package:expense_tracker/Models/expense.dart';
import 'package:flutter/material.dart';

class ExpensesItem extends StatelessWidget {
  const ExpensesItem(this.isAdditionalDisplayed, this.expense, {super.key,});

  final Expense expense;
  final bool isAdditionalDisplayed; //HERE IS THE BOOL VARIABLE

  _displayAdditional() {
    if(isAdditionalDisplayed == true) {
      Column(
        children: [
          Row(
            children: [
              SizedBox(
                height: 100,
                width: 360,
                child: Text(expense.additional))],
                )
              ],
            );
    }
    if(isAdditionalDisplayed == false) {
      SizedBox(height: 0,);
    }
  } //HERE I ASK IF _DISPLAYADDITIONAL IS TRUE OR FALSE. IF ITS TRUE IT DISPLAYS THE WIDGET, IF IT'S FALSE IT DISPLAYS AN EMPTY SIZEDBOX.

  @override
  Widget build(BuildContext context) {
    return Card(
      child: Padding(
        padding: const EdgeInsets.symmetric(
          horizontal: 20,
          vertical: 16,
        ),
        child: Column(
          children: [
            Text(expense.title),
            const SizedBox(height: 4),
            Column(
              children: [
                Row(
                  children: [
                    SizedBox(
                      height: 100,
                      width: 360,
                      child: Text(expense.additional))],
                )
              ],
            ),
            _displayAdditional(), //HERE THE WIDGET SHOULD BE DISPLAYED. THIS IS WHERE I GET THE ERROR
          ],
        ),
      ),
    );
  }
}

已尝试添加到第二个if语句以检查_isAdditionalDisplayed是否为null。这给出了一个错误,它不能为null,并且将始终为false:if(isAdditionalDisplayed == false || isAdditionalDisplayed == null) {错误:操作数不能为null,因此条件总是“false”。尝试删除条件、封闭条件或整个条件语句。
已尝试在调用_displayAdditional时添加一个删除标记:_displayAdditional()!,错误:_TypeError(用于空值的空校验运算符)
这两个变化同时发生,我得到了两个错误。有一个或另一个我得到一个或另一个错误。
这是非常混乱的。在一个地方它说isAdditionalDisplayed不能为空。在另一种情况下,它说它是空的。

yzckvree

yzckvree1#

看起来问题是你没有从函数返回小部件。

import 'package:expense_tracker/Models/expense.dart';
import 'package:flutter/material.dart';

class ExpensesItem extends StatelessWidget {
  const ExpensesItem(this.isAdditionalDisplayed, this.expense, {super.key,});

  final Expense expense;
  final bool isAdditionalDisplayed;

  Widget _displayAdditional() {
    return isAdditionalDisplayed ? Column(
        children: [
          Row(
            children: [
              SizedBox(
                height: 100,
                width: 360,
                child: Text(expense.additional))],
                )
              ],
            ) : SizedBox.shrink();
  }

  @override
  Widget build(BuildContext context) {
    return Card(
      child: Padding(
        padding: const EdgeInsets.symmetric(
          horizontal: 20,
          vertical: 16,
        ),
        child: Column(
          children: [
            Text(expense.title),
            const SizedBox(height: 4),
            Column(
              children: [
                Row(
                  children: [
                    SizedBox(
                      height: 100,
                      width: 360,
                      child: Text(expense.additional))],
                )
              ],
            ),
            _displayAdditional(), 
          ],
        ),
      ),
    );
  }
}

相关问题