Dart I';我试图在按下时设置setState()中的变量,但我';我犯了一个错误

Dart I';我试图在按下时设置setState()中的变量,但我';我犯了一个错误,dart,flutter,Dart,Flutter,这是变量初始化 var displayResult = ''; 这是新闻代码 Padding( padding: EdgeInsets.all(5.0), child: Row( children: <Widget>[ Expanded( child: RaisedButton(

这是变量初始化

  var displayResult = '';
这是新闻代码

 Padding(
                padding: EdgeInsets.all(5.0),
                child: Row(
                  children: <Widget>[
                    Expanded(
                        child: RaisedButton(
                            color: Theme
                                .of(context)
                                .primaryColor,
                            textColor: Theme
                                .of(context)
                                .primaryColorLight,
                            child: Text("calculate"),
                            onPressed: () {
                              setState(() {
                              this.displayResult = _calculateTotalReturn();
                              });
                            },
                        )),
这就是我得到的错误

Performing hot reload...
Syncing files to device iPhone XR...
flutter: ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
flutter: The following assertion was thrown building SIForm(dirty, dependencies:
flutter: [_LocalizationsScope-[GlobalKey#4c1f9], _InheritedTheme], state: _SIFormState#b2966):
flutter: 'package:flutter/src/widgets/text.dart': Failed assertion: line 237 pos 15: 'data != null': is not
flutter: true.
flutter:
flutter: Either the assertion indicates an error in the framework itself, or we should provide substantially
flutter: more information in this error message to help you determine and fix the underlying cause.
flutter: In either case, please report this assertion by filing a bug on GitHub:
flutter:   https://github.com/flutter/flutter/issues/new?template=BUG.md
flutter:
flutter: When the exception was thrown, this was the stack:
flutter: #2      new Text (package:flutter/src/widgets/text.dart:237:15)
flutter: #3      _SIFormState.build (package:simple_cal/main.dart:153:24)
flutter: #4      StatefulElement.build (package:flutter/src/widgets/framework.dart:3825:27)
flutter: #5      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3736:15)
flutter: #6      Element.rebuild (package:flutter/src/widgets/framework.dart:3559:5)
flutter: #7      BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2273:33)
flutter: #8      _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:700:20)
flutter: #9      _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:268:5)
flutter: #10     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:988:15)
flutter: #11     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:928:9)
flutter: #12     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:749:7)
flutter: #14     _Timer._runTimers (dart:isolate/runtime/libtimer_impl.dart:382:19)
flutter: #15     _Timer._handleMessage (dart:isolate/runtime/libtimer_impl.dart:416:5)
flutter: #16     _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:171:12)
flutter: (elided 3 frames from class _AssertionError and package dart:async)
flutter: ════════════════════════════════════════════════════════════════════════════════════════════════════
Reloaded 1 of 432 libraries in 641ms.
正在执行热重新加载。。。
正在将文件同步到设备iPhone XR。。。
颤振:══╡ WIDGETS库捕获到异常╞═══════════════════════════════════════════════════════════
颤振:在构建SIForm时抛出以下断言(脏的,依赖项:
颤振:[[u本地化范围-[GlobalKey#4c1f9],[u继承主题],状态:[u SIFormState#b2966]:
颤振:“包:颤振/src/widgets/text.dart”:失败的断言:第237行第15位:“数据!”null”:不是
弗利特:是的。
颤振:
颤振:要么断言表明框架本身存在错误,要么我们应该提供
颤振:此错误消息中的更多信息可帮助您确定并修复根本原因。
颤振:无论哪种情况,请在GitHub上提交一个bug来报告这一断言:
颤振:https://github.com/flutter/flutter/issues/new?template=BUG.md
颤振:
颤振:抛出异常时,这是堆栈:
颤振:2个新文本(包:颤振/src/widgets/Text.dart:237:15)
颤振:#3#SIFormState.build(包:simple#u-cal/main.dart:153:24)
flatter:#4 StatefulElement.build(包:flatter/src/widgets/framework.dart:3825:27)
flatter:#5 ComponentElement.performRebuild(包:flatter/src/widgets/framework.dart:3736:15)
flatter:#6 Element.rebuild(包:flatter/src/widgets/framework.dart:3559:5)
flatter:#7buildowner.buildScope(包:flatter/src/widgets/framework.dart:2273:33)
颤振:8#u WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&ScheduleBinding&PaintingBinding&SemanticsBinding&RenderBinding&WidgetsBinding.drawFrame(包:颤振/src/widgets/binding.dart:700:20)
flatter:#9"WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&ScheduleBinding&PaintingBinding&SemanticsBinding&RenderBinding."handlePersistentFrameCallback(包:flatter/src/rendering/binding.dart:268:5)
flatter:#10 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback(包:flatter/src/scheduler/binding.dart:988:15)
颤振:11#u WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame(包:颤振/src/scheduler/binding.dart:928:9)
颤振:#12#WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.scheduleWarmUpFrame。(包:颤振/src/scheduler/binding.dart:749:7)
颤振:14计时器。运行计时器(dart:isolate/runtime/libtimer\u impl.dart:382:19)
颤振:#15#计时器。handleMessage(dart:isolate/runtime/libtimer_impl.dart:416:5)
颤振:#16 RawReceivePortImpl.handleMessage(dart:isolate/runtime/libisolate_patch.dart:171:12)
颤振:(从类断言错误和包dart中删除3帧:异步)
颤振:════════════════════════════════════════════════════════════════════════════════════════════════════
在641ms内重新加载432个库中的1个。
这是完整的main.dart文件

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

Widget MyApp() {
  return MaterialApp(
    title: 'Simple Intrest app',
    home: SIForm (),
    theme: ThemeData(
      primaryColor: Colors.deepPurple,
      accentColor: Colors.deepPurpleAccent
    ),
  );
}

class SIForm extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
      return _SIFormState ();
  }
}

class _SIFormState extends State<SIForm> {
  var _currencies = ["INR", "USD", "CAD"];

  var _currentItemSelected = "INR";

  var displayResult = '';

  TextEditingController principleController = TextEditingController();
  TextEditingController roiController = TextEditingController();
  TextEditingController termController = TextEditingController();


  @override
  Widget build(BuildContext context) {
    TextStyle textStyle = Theme
        .of(context)
        .textTheme
        .title;

    return Scaffold(

      appBar: AppBar(
        title: Text("Simple Interest Calc"),
      ),

      body: Container(padding: EdgeInsets.only(top: 50.0),
        child: ListView(
          children: <Widget>[
            Padding(
                padding: EdgeInsets.all(5.0),
                child: TextField(
                  keyboardType: TextInputType.number,
                  controller: principleController,
                  decoration: InputDecoration(
                      labelText: 'principle',
                      hintText: '0.00',
                      border: OutlineInputBorder(
                          borderRadius: BorderRadius.circular(5.0)
                      )
                  ),
                )),

            Padding(
                padding: EdgeInsets.all(5.0),
                child: TextField(
                  controller: roiController,
                  keyboardType: TextInputType.number,
                  decoration: InputDecoration(
                      labelText: 'Rate of Interest',
                      hintText: '0.00',
                      border: OutlineInputBorder(
                          borderRadius: BorderRadius.circular(5.0)
                      )
                  ),
                )),

            Padding(
                padding: EdgeInsets.all(5.0),
                child: Row(
                  children: <Widget>[
                    Expanded(child: TextField(
                      controller: termController,
                      keyboardType: TextInputType.number,
                      decoration: InputDecoration(
                          labelText: 'Terms',
                          hintText: '%',
                          border: OutlineInputBorder(
                              borderRadius: BorderRadius.circular(5.0)
                          )
                      ),
                    )),


                    Container(width: 10.0),
                    Expanded(
                      child: DropdownButton<String>(
                        items: _currencies.map((String value) {
                          return DropdownMenuItem<String>(
                            value: value,
                            child: Text(value),
                          );
                        }).toList(),
                        value: _currentItemSelected,
                        onChanged: (val) {
                          _ondropDownChange(val);
                        },),
                    ),
                  ],
                )),

            Padding(
                padding: EdgeInsets.all(5.0),
                child: Row(
                  children: <Widget>[
                    Expanded(
                        child: RaisedButton(
                            color: Theme
                                .of(context)
                                .primaryColor,
                            textColor: Theme
                                .of(context)
                                .primaryColorLight,
                            child: Text("calculate"),
                            onPressed: () {
                              setState(() {
                              this.displayResult = _calculateTotalReturn();
                              });
                            },
                        )),
                    Container(width: 5.0),
                    Expanded(
                        child: RaisedButton(
                            color: Theme
                                .of(context)
                                .accentColor,
                            textColor: Theme
                                .of(context)
                                .primaryColorLight,
                            child: Text("Reset"),
                            onPressed: () {
                              setState(() {
                             //   _reset();
                              });
                            }
                        )),
                  ],
                )),

            Padding(
                padding: EdgeInsets.all(5.0),
                child: Text(this.displayResult),
            )
          ],
        ),
      ),
    );
  }

  void _ondropDownChange(String value) {
    setState(() {
      this._currentItemSelected = value;
    });
  }

  String _calculateTotalReturn() {
    setState(() {
      double principle = double.parse(principleController.text);
      double roi = double.parse(roiController.text);
      double term = double.parse(termController.text);
      double tap = principle + (principle * roi * term) / 100;
      String result = "After $term years, your investment will worth $tap $_currentItemSelected";
      return result;
    });
  }

  void _reset() {
    setState(() {
      this.principleController.text = " ";
      this.roiController.text = " ";
      this.termController.text = " ";
      this.displayResult = " ";
    });
  }
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
Widget MyApp(){
返回材料PP(
标题:“简单Intrest应用程序”,
主页:SIForm(),
主题:主题数据(
原色:颜色。深紫色,
accentColor:颜色。深紫色
),
);
}
类SIForm扩展StatefulWidget{
@凌驾
状态createState(){
返回_SIFormState();
}
}
类_SIFormState扩展状态{
风险值货币=[“印度卢比”、“美元”、“加元”];
var\u currentItemSelected=“INR”;
var displayResult='';
TextEditingController principleController=TextEditingController();
TextEditingController=TextEditingController();
TextEditingController termController=TextEditingController();
@凌驾
小部件构建(构建上下文){
text样式text样式=主题
.of(上下文)
.文本主题
标题
返回脚手架(
appBar:appBar(
标题:文本(“单利计算”),
),
车身:容器(衬垫:仅限边缘套件(顶部:50.0),
子:ListView(
儿童:[
填充物(
填充:所有边缘设置(5.0),
孩子:TextField(
键盘类型:TextInputType.number,
控制器:主控制器,
装饰:输入装饰(
labelText:“原则”,
hintText:'0.00',
边框:大纲输入边框(
边界半径:边界半径。圆形(5.0)
)
),
)),
填充物(
填充:所有边缘设置(5.0),
孩子:TextField(
控制器:控制器,
键盘类型:TextInputType.number,
装饰:输入装饰(
labelText:“利率”,
hintText:'0.00',
边框:大纲输入边框(
边界半径:边界半径。圆形(5.0)
)
),
)),
填充物(
填充:所有边缘设置(5.0),
孩子:排(
儿童:[
已展开(子项:TextField(
控制器:终端控制器,
键盘类型:TextInputType.number,
装饰:输入装饰(
labelText:“术语”,
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

Widget MyApp() {
  return MaterialApp(
    title: 'Simple Intrest app',
    home: SIForm (),
    theme: ThemeData(
      primaryColor: Colors.deepPurple,
      accentColor: Colors.deepPurpleAccent
    ),
  );
}

class SIForm extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
      return _SIFormState ();
  }
}

class _SIFormState extends State<SIForm> {
  var _currencies = ["INR", "USD", "CAD"];

  var _currentItemSelected = "INR";

  var displayResult = '';

  TextEditingController principleController = TextEditingController();
  TextEditingController roiController = TextEditingController();
  TextEditingController termController = TextEditingController();


  @override
  Widget build(BuildContext context) {
    TextStyle textStyle = Theme
        .of(context)
        .textTheme
        .title;

    return Scaffold(

      appBar: AppBar(
        title: Text("Simple Interest Calc"),
      ),

      body: Container(padding: EdgeInsets.only(top: 50.0),
        child: ListView(
          children: <Widget>[
            Padding(
                padding: EdgeInsets.all(5.0),
                child: TextField(
                  keyboardType: TextInputType.number,
                  controller: principleController,
                  decoration: InputDecoration(
                      labelText: 'principle',
                      hintText: '0.00',
                      border: OutlineInputBorder(
                          borderRadius: BorderRadius.circular(5.0)
                      )
                  ),
                )),

            Padding(
                padding: EdgeInsets.all(5.0),
                child: TextField(
                  controller: roiController,
                  keyboardType: TextInputType.number,
                  decoration: InputDecoration(
                      labelText: 'Rate of Interest',
                      hintText: '0.00',
                      border: OutlineInputBorder(
                          borderRadius: BorderRadius.circular(5.0)
                      )
                  ),
                )),

            Padding(
                padding: EdgeInsets.all(5.0),
                child: Row(
                  children: <Widget>[
                    Expanded(child: TextField(
                      controller: termController,
                      keyboardType: TextInputType.number,
                      decoration: InputDecoration(
                          labelText: 'Terms',
                          hintText: '%',
                          border: OutlineInputBorder(
                              borderRadius: BorderRadius.circular(5.0)
                          )
                      ),
                    )),


                    Container(width: 10.0),
                    Expanded(
                      child: DropdownButton<String>(
                        items: _currencies.map((String value) {
                          return DropdownMenuItem<String>(
                            value: value,
                            child: Text(value),
                          );
                        }).toList(),
                        value: _currentItemSelected,
                        onChanged: (val) {
                          _ondropDownChange(val);
                        },),
                    ),
                  ],
                )),

            Padding(
                padding: EdgeInsets.all(5.0),
                child: Row(
                  children: <Widget>[
                    Expanded(
                        child: RaisedButton(
                            color: Theme
                                .of(context)
                                .primaryColor,
                            textColor: Theme
                                .of(context)
                                .primaryColorLight,
                            child: Text("calculate"),
                            onPressed: () {
                              setState(() {
                              this.displayResult = _calculateTotalReturn();
                              });
                            },
                        )),
                    Container(width: 5.0),
                    Expanded(
                        child: RaisedButton(
                            color: Theme
                                .of(context)
                                .accentColor,
                            textColor: Theme
                                .of(context)
                                .primaryColorLight,
                            child: Text("Reset"),
                            onPressed: () {
                              setState(() {
                             //   _reset();
                              });
                            }
                        )),
                  ],
                )),

            Padding(
                padding: EdgeInsets.all(5.0),
                child: Text(this.displayResult),
            )
          ],
        ),
      ),
    );
  }

  void _ondropDownChange(String value) {
    setState(() {
      this._currentItemSelected = value;
    });
  }

  String _calculateTotalReturn() {
    setState(() {
      double principle = double.parse(principleController.text);
      double roi = double.parse(roiController.text);
      double term = double.parse(termController.text);
      double tap = principle + (principle * roi * term) / 100;
      String result = "After $term years, your investment will worth $tap $_currentItemSelected";
      return result;
    });
  }

  void _reset() {
    setState(() {
      this.principleController.text = " ";
      this.roiController.text = " ";
      this.termController.text = " ";
      this.displayResult = " ";
    });
  }
}