【问题标题】:The method '_debugTypesAreRight' was called on null在 null 上调用了方法“_debugTypesAreRight”
【发布时间】:2020-10-11 01:53:47
【问题描述】:

我尝试使用颤振制作一个简单的计算器,但是当我运行它时; 有错误之类的。我在 google 上搜索了 2 个小时,但没有成功。

我用来制作这个应用程序的教程: https://www.youtube.com/watch?v=4NhLLmrB4I4

小部件库捕获的异常 ══════════════════════════════════════════════════ ═════以下 NoSuchMethodError 被抛出构建生成器:方法 在 null 上调用了“_debugTypesAreRight”。接收方:空 调用:_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('/'),
                ),

              ],
            )
          ],
        ),
      )
    );
  }




}

【问题讨论】:

    标签: android android-studio flutter dart flutter-widget


    【解决方案1】:

    再次检查你的 createState,它应该是 State&lt;MyCalculator&gt; createState,它应该返回 Calculator(),但你永远不会返回任何东西

    class MyCalculator extends StatefulWidget{
      @override
      State<MyCalculator> createState() {
        return Calculator();
      }
    
    }
    

    【讨论】:

    • 在那之后你尝试过flutter clean吗?只是为了确保它运行新代码
    【解决方案2】:

    MyCalculator 类中的createState() 方法期望返回类型为State&lt;MyCalculator&gt;

    class MyCalculator extends StatefulWidget{
      @override
      State<MyCalculator> createState() {
        return Calculator();
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-01-17
      • 2020-02-21
      • 2020-08-29
      • 2021-02-11
      • 2021-01-19
      • 2019-09-12
      • 2020-11-06
      • 2020-07-31
      相关资源
      最近更新 更多