flutter - 如何解决此错误“方法'/'在null上被调用”
问题描述
我只是在用Flutter做一个BMI 计算器,但最终出现了这个错误,但是当我查看我所有的代码时,我找不到错误。
这是我calculator_brain.dart
所有条件的文件:
import 'dart:math';
class CalculatorBrain {
CalculatorBrain({this.height, this.weight});
int height;
int weight;
double _bmi;
String calculateBMI() {
_bmi = weight / pow(height / 100, 2);
return _bmi.toStringAsFixed(1);
}
String getResult() {
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 the normal body weight! You need to exercice more...';
} else if (_bmi >= 18.5) {
return 'You\'ve got a normal body weight! Good Job!';
} else {
return 'you have a lower than the normal body weight! You\'d be eating more...';
}
}
}
我的 results.dart 显示所有内容。甚至是没有显示错误的屏幕
import 'package:bmi_calculator/constants.dart';
import 'package:bmi_calculator/components/reusable_card.dart';
import 'package:flutter/material.dart';
import '../components/bottom_button.dart';
class Results extends StatelessWidget {
Results(
{@required this.bmiResult,
@required this.resultText,
@required this.interpretation});
final String bmiResult;
final String resultText;
final String interpretation;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('BMI CALCULATOR'),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Expanded(
child: Container(
padding: EdgeInsets.all(15.0),
alignment: Alignment.bottomLeft,
child: Text(
'Your Result',
style: kTitleTextStyle,
),
),
),
Expanded(
flex: 5,
child: ReusableCard(
colour: kActiveCardColor,
cardChild: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Text(
resultText.toUpperCase(),
style: kResultTextStyle,
),
Text(
bmiResult,
style: kBMITextstyle,
),
Text(
interpretation,
style: kBodyTextStyle,
textAlign: TextAlign.center,
),
],
),
),
),
Expanded(
child: BottomButton(
buttonTitle: 'RE-CALCULATE',
onTap: () {
Navigator.pop(context);
},
),
)
],
),
);
}
}
最后,我为计算器和导航器创建的对象:
BottomButton(
buttonTitle: 'CALCULATE',
onTap: () {
CalculatorBrain calculationBrain = CalculatorBrain();
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return Results(
bmiResult: calculationBrain.calculateBMI(),
resultText: calculationBrain.getResult(),
interpretation: calculationBrain.getInterpretation(),
);
},
),
);
},
),
我收到的完整错误是"The following NoSuchMethodError was thrown building Builder(dirty)"
:
The method '/' was called on null.
Receiver: null
Tried calling: /(100)
The relevant error-causing widget was:
MaterialApp file:///Users/macair13/AndroidStudioProjects/bmi-calculator-flutter/lib/main.dart:9:12
When the exception was thrown, this was the stack:
#0 Object.noSuchMethod (dart:core-patch/object_patch.dart:53:5)
#1 CalculatorBrain.calculateBMI (package:bmi_calculator/calculator_brain.dart:11:32)
#2 _InputPageState.build.<anonymous closure>.<anonymous closure> (package:bmi_calculator/screens/input_page.dart:222:51)
#3 MaterialPageRoute.buildPage (package:flutter/src/material/page.dart:87:27)
#4 _ModalScopeState.build.<anonymous closure> (package:flutter/src/widgets/routes.dart:710:43)
解决方案
从代码中,我看到您在哪里传递要计算的数据。我的意思是从你传递身高和体重的地方,它无法计算,因为它没有得到值。当您按下底部按钮时,它没有得到任何东西,所以 null 不能是 / 所以它给出了错误。
CalculatorBrain calculationBrain = CalculatorBrain();
这是您编写的代码,如果您使用它检查它
CalculatorBrain calculationBrain = CalculatorBrain(weight: 5,height: 5);
在构造函数中传递值可能会解决问题。
只需检查并让我知道它是否有效。
推荐阅读
- java - 如何对 AnyLogic 中数据库列的值求和?
- python - MF 8AM-4PM 的 Pandas 过滤器数据集
- python - Python 无法识别同一目录中的类
- visual-studio - 如何在使用 pack 命令生成 NuGet 包时为所有项目保持相同的版本
- excel - 查找每个 ID 的特定日期之前的最大日期和特定日期之后的最小日期
- sql-server - 即读后处理编程方法
- javascript - 如何从外部库导入已注册的 Phaser3 游戏对象;如何分发 Phaser3 游戏对象
- c# - 压缩两个具有相同内容的文件并将它们编码为 base64 给出不同的响应
- ios - 如何在 Firestore 中读取当前用户配置文件
- sql - 如何使用窗口函数在sql中选择第三、第四、第五个日期