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 = " ";
});
}
}