首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >争论类型是“bool?”不能分配参数类型'bool‘

问争论类型是“bool?”不能分配参数类型'bool‘
EN

Stack Overflow用户
提问于 2021-12-28 22:16:35
回答 1查看 3.8K关注 0票数 -1

我正在开发一个颤振应用程序,我得到了错误的The argument type 'bool?' can't be assigned to the parameter type 'bool'.如何解决它?

下面是我的代码中出现错误的部分。我还在谷歌上搜索错误,他们说,我应该把products[key],改为() => products[key],。但没什么用。如果您需要更多的信息,请询问。

代码语言:javascript
复制
void main() => runApp(MaterialApp(home: ToDo()));

class ToDo extends StatefulWidget {
  @override
  _ToDoState createState() => _ToDoState();
}

class _ToDoState extends State<ToDo> {
  Map<String, bool> products = {
    'ToDo': false, 'Java': false, 'Python': false, 'Schule': false, 'Hi': false
  };
  void addItem(String item) {
    setState(() {
      products[item] = false;
    });
    Navigator.of(context).pop();
  }
  
  void deleteItem(String key) {
    setState(() {
      products.remove(key);
    });
  }

  void toggleDone(String key) {
    setState(() {
      products.update(key, (bool done) => !done);
    });
  }

  void newEntry() {
    showDialog<AlertDialog>(
        context: context,
        builder: (BuildContext context) {
          return AlertDialog(
            content: TextField(
              onSubmitted: addItem,
            ),
          );
        }
      );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(
          'ToDo-App',
          style: TextStyle(
              color: Colors.black,
              fontSize: 18.0,
              fontFamily: 'Opinehe',
              fontWeight: FontWeight.w400,
              decoration: TextDecoration.underline),
        ),
        backgroundColor: Color.fromRGBO(35, 152, 185, 100),
      ),
      body: ListView.builder(
        itemCount: products.length,
        itemBuilder: (context, i) {
          String key = products.keys.elementAt(i);
          return SingleToDo(
              key,
              products[key],
              () => deleteItem(key),
              () => toggleDone(key),
          );
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: newEntry,
        child: Icon(Icons.add),
      ),
    );
  }
}
代码语言:javascript
复制
class SingleToDo extends StatelessWidget {
  final String title;
  final bool done;
  final Function remove;
  final Function toggleDone;
  const SingleToDo(this.title, this.done, this.remove, this.toggleDone);

  @override
  Widget build(BuildContext context) {
    return Container(
      padding: EdgeInsets.symmetric(horizontal: 22),
      child: ListTile(
        contentPadding: EdgeInsets.symmetric(vertical: 8.0),
        leading: Checkbox(
          value: done,
          onChanged: (bool? value) => toggleDone(),
        ),
        title: Text(
          title,
          style: TextStyle(
              fontSize: 18.0,
              fontWeight: FontWeight.w300,
              color: Colors.black54),
        ),
        trailing: IconButton(
          icon: Icon(Icons.delete_outline),
          onPressed: () => remove(),
        )
      ),
    );
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-28 22:28:11

从获取值可以有空,在您的模式类上,它是必需的非空数据。

您可以检查值是否为空,然后传递值,或者使用默认值(如果null类似)

products[key] ?? false,

如果您知道表达式从未计算为空!,则使用products[key]!,。

检查dart的重要性-概念

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70513116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档