You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何给文本设置颜色?BMI计算结果超重偏瘦文本标红实现

实现方案

你可以通过两种方案实现需求,优先推荐第一种,逻辑和视图分层更清晰:


方案1:修改CalculatorBrain类新增颜色判断逻辑

在现有逻辑层里新增对应结果的颜色获取方法,和现有BMI判断规则对齐,后续修改规则只需要调整逻辑层代码即可,无需改动UI层。

第一步:修改CalculatorBrain代码

修改后的完整代码如下:

import 'dart:math';
import 'package:flutter/material.dart'; // 导入依赖使用Color类

class CalculatorBrain {
  CalculatorBrain({this.height, this.weight});

  final int height;
  final int weight;

  double _bmi;

  String calculateBMI() {
    _bmi = weight / pow(height / 100, 2);
    return _bmi.toStringAsFixed(1);
  }

  String getResults(){
    if (_bmi >= 25) {
      return 'Overweight';
    } else if (_bmi > 18.5) {
      return 'Normal';
    } else {
      return 'Underweight';
    }
  }

  String getInterpretation () {
    if (_bmi >= 25) {
      return 'You have a higher than normal weight. Try to exercise more.';
    } else if (_bmi > 18.5) {
      return 'You have a normal body weight. Good job!';
    } else {
      return 'You have a lower than normal body weight. You can eat a bit more.';
    }
  }

  // 新增:获取结果文本对应的颜色
  Color getResultColor() {
    if (_bmi >= 25 || _bmi <= 18.5) {
      return Colors.red; // 超重/偏瘦返回红色
    } else {
      return Colors.green; // 正常返回绿色,也可以根据需求改成其他颜色
    }
  }
}

第二步:UI层调用

在你显示结果的Text组件中直接调用该方法设置颜色即可,示例代码:

// 假设你已经实例化了CalculatorBrain对象,名为calc
Text(
  calc.getResults(),
  style: TextStyle(
    fontSize: 24,
    fontWeight: FontWeight.bold,
    color: calc.getResultColor(), // 直接调用方法获取颜色
  ),
)

方案2:无需修改逻辑层,直接在UI层判断

如果你不想改动现有逻辑层代码,可以直接在UI层根据返回的结果字符串判断颜色,实现更简单:

// 假设你已经获取到了getResults()的返回值,名为result
Text(
  result,
  style: TextStyle(
    fontSize: 24,
    fontWeight: FontWeight.bold,
    color: (result == 'Overweight' || result == 'Underweight') ? Colors.red : Colors.green,
  ),
)

内容的提问来源于stack exchange,提问作者Bhaskar2510

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:27:02