android - 在 null 上调用了方法“_debugTypesAreRight”
问题描述
我尝试使用颤振制作一个简单的计算器,但是当我运行它时;有错误之类的。我在谷歌搜索了 2 个小时,但没有成功。
我用于制作此应用的教程: https ://www.youtube.com/watch?v=4NhLLmrB4I4
小部件库捕获的异常══════════════════════════════════════════════════ ══════════ 在构建 Builder 时抛出以下 NoSuchMethodError:在 null 上调用了方法 '_debugTypesAreRight'。接收方:null 尝试调用:_debugTypesAreRight(“MyCalculator”实例)
代码:
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
/**
* Simple calculator
*/
void main() => runApp(MyApp());
class MyApp extends StatelessWidget{
@override
Widget build(BuildContext context) {
return MaterialApp(
title: "Calculator",
home: MyCalculator()
);
}
}
class MyCalculator extends StatefulWidget{
@override
State<StatefulWidget> createState() {
Calculator();
}
}
class Calculator extends State<MyCalculator>{
//TextFormField'e gelecek A ve B sayıları için conroller
final controller_numberA = TextEditingController();
final controller_numberB = TextEditingController();
final my_form_key = GlobalKey<FormState>();
String result = "";
String textToShow = "";
//toplam fonk.
void sum(){
//Formu kontrol et
//Seçilen işlem var ise
if(my_form_key.currentState.validate()){
int numberA = int.parse(controller_numberA.text);
int numberB = int.parse(controller_numberB.text);
int result = numberA + numberB;
setState(() {
//Yapılan işlemi gösterecek olan text
textToShow="$numberA + $numberB = $result";
});
}
}
void minus(){
//Formu kontrol et
//Seçilen işlem var ise
if(my_form_key.currentState.validate()){
int numberA = int.parse(controller_numberA.text);
int numberB = int.parse(controller_numberB.text);
int result = numberA - numberB;
setState(() {
//Yapılan işlemi gösterecek olan text
textToShow="$numberA - $numberB = $result";
});
}
}
void times(){
//Formu kontrol et
//Seçilen işlem var ise
if(my_form_key.currentState.validate()){
int numberA = int.parse(controller_numberA.text);
int numberB = int.parse(controller_numberB.text);
int result = numberA * numberB;
setState(() {
//Yapılan işlemi gösterecek olan text
textToShow="$numberA * $numberB = $result";
});
}
}
void divide(){
//Formu kontrol et
//Seçilen işlem var ise
if(my_form_key.currentState.validate()){
int numberA = int.parse(controller_numberA.text);
int numberB = int.parse(controller_numberB.text);
double result = numberA / numberB;
setState(() {
//Yapılan işlemi gösterecek olan text
textToShow="$numberA / $numberB = $result";
});
}
}
@override
Widget build(BuildContext context) {
//Tasarımı yapalım
return Scaffold(
body: Form(
key: my_form_key,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
//2 tane TextFieldForm oluşturalım
TextFormField(
controller: controller_numberA,
validator: (value){
if(value.isEmpty) return "Please enter a number";
},
decoration: InputDecoration(hintText: "Enter a number"),
keyboardType: TextInputType.number),
TextFormField(
controller: controller_numberB,
validator: (value){
if(value.isEmpty) return "Please enter a number";
},
decoration: InputDecoration(hintText: "Enter a number"),
keyboardType: TextInputType.number),
//Sonuç TexField'i oluşturma
Text(textToShow,style: TextStyle(fontSize: 20.0),),
//Buton dizisi oluşturalım
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
RaisedButton(
onPressed: sum,
child: Text('+'),
),
RaisedButton(
onPressed: minus,
child: Text('-'),
),
RaisedButton(
onPressed: times,
child: Text('*'),
),
RaisedButton(
onPressed: divide,
child: Text('/'),
),
],
)
],
),
)
);
}
}
解决方案
再次检查你的 createState,它应该是State<MyCalculator> createState
并且它应该返回 Calculator(),但你永远不会返回任何东西
class MyCalculator extends StatefulWidget{
@override
State<MyCalculator> createState() {
return Calculator();
}
}
推荐阅读
- excel - Excel根据多个条件从另一张表中获取值
- python - Linux 上的 Redis 管道崩溃
- javascript - 显示具有多个对象的数组值
- shell - 使用管道调用输出到 stderr 的命令行应用程序
- admob - adMob 隐私权政策
- angular - Angular 7. NullInjectorError:没有 HttpClient 的提供者!即使 app.module 有 HttpClientModule。如何解决?
- python - 合并创建新列的两个熊猫数据框
- dart - Flutter:我如何一次又一次地停止渲染“Widget build()”?
- php - 如何在laravel中链接多个外键
- eclipse - Yocto Hello World C++ CMake 项目无法编译简单的测试程序