根据 Flutter 中的选定类别为小部件元素分配不同的颜色

Posted

技术标签:

【中文标题】根据 Flutter 中的选定类别为小部件元素分配不同的颜色【英文标题】:Assigning different color to a widget elements based on a selected category in Flutter 【发布时间】:2021-11-21 09:04:51 【问题描述】:

我是 Flutter 和编程的新手,我需要指导。 我正在构建一个应用程序,用户可以在其中创建任务,并根据选定的类别与小部件一起显示相应的颜色。

目前,我收到错误:正文可能正常完成,导致返回“null”,但返回类型可能是不可为空的类型。 尝试在末尾添加 return 或 throw 语句。

函数(我在 _selectedCatColor 上得到错误):

Color _selectedCatColor(String catTitile) 
    switch (catTitile) 
      case 'Work':
        return Colors.deepPurple;
      case 'Personal':
        return Colors.green;
      case 'Kids':
        return Colors.red;
      case 'Parents':
        return Colors.indigo;
      case 'Friends':
        return Colors.yellow;
      case 'Misc':
        return Colors.teal.shade800;
    
  

我怎么称呼它:

 void submitData() 
   final enteredTitle = titleController.text;
   final enteredCategory = _selectedCategory;
   final enteredColor = _selectedCatColor(_selectedCategory!);

我的直觉是这很简单,但我想不通。

【问题讨论】:

【参考方案1】:

您的函数的返回类型是Color,它不可为空。你的函数永远不应该返回 null。 (如果你想让它可以为空,它应该是Color?。)

另一方面,您的函数体有一个用于查找一些字符串比较的 switch 语句。现在我想我这样称呼你的函数:

_selectedCatColor("Jack")

您的函数根本不会返回任何内容,因为您的 switch 语句不处理“Jack”。 Dart 可以确定这可能会发生,这就是它向您提供该消息的原因。

避免这种情况的一种方法是在你的 switch 语句中设置一个默认值,例如:

case 'Misc':
        return Colors.teal.shade800;
default:
        return Colors.teal.shade800;

现在您将始终返回 Color

【讨论】:

以上是关于根据 Flutter 中的选定类别为小部件元素分配不同的颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 的主小部件中为小部件设置背景颜色?

Flutter:在从小部件树中删除时或在其生命周期结束时为小部件设置动画?

Flutter:根据所选类别在 GridView 内显示值

Flutter:InkWell 在 Card 中完全不起作用

在 Flutter 应用程序中的 ListView 滚动上隐藏/关闭键盘

根据 r shiny 中的选定类别创建图表饼图