需要一些帮助来解决这个问题"The method 'addListener' was called on null."



错误:

方法"addListener"是在null上调用的。接收方:空尝试调用:addListener(闭包:(dynamic(=>函数"addtemp"中的动态:。(

我的代码:

import 'package:flutter/material.dart';
class Temp3 extends StatefulWidget {
@override
_Temp3State createState() => _Temp3State();
}
class _Temp3State extends State<Temp3> {
double fenTemp = 0.0, celTemp = 0.0;
var temperature = ['Fehergeit', 'Clecsies', 'Kalvin'];
String selctedTemp = 'Fehergeit';
String selctedTemp1 = 'Clecsies';
var fenController;
var celController;
var kalController;
bool isFen = true;
controller(String temp) {
var s;
switch (temp.substring(0, 1)) {
case 'F':
fenController = TextEditingController();
s = fenController;
break;
case 'C':
celController = TextEditingController();
s = celController;
break;
default:
kalController = TextEditingController();
s = kalController;
}
addtemp(s);
}
@override
initState() {
super.initState();
fenController.addListener(addtemp);
celController.addListener(addtemp);
kalController.addListener(addtemp);
}
addtemp(var s) {
switch (s) {
case 'F':
fenTemp = double.parse(fenController.text);
celTemp = convert(fenTemp, true);
if (isFen) celController.text = celTemp.toString();
isFen = true;
break;
case 'C':
setState(() {
celTemp = double.parse(celController.text);
fenTemp = convert(celTemp, false);
if (!isFen) fenController.text = fenTemp.toString();
isFen = false;
});
break;
default:
celTemp = double.parse(celController.text);
}
}
// fenListener() {
//   fenTemp = double.parse(fenController.text);
//   celTemp = convert(fenTemp, true);
//   if (isFen) celController.text = celTemp.toString();
//   isFen = true;
// }
// celListener() {
//   setState(() {
//     celTemp = double.parse(celController.text);
//     fenTemp = convert(celTemp, false);
//     if (!isFen) fenController.text = fenTemp.toString();
//     isFen = false;
//   });
// }
// kalListener(){}
double convert(double temp, bool isF) {
return isF ? (temp - 32) * (5 / 9) : (temp * (9 / 5) + 32);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Temperature 3'),
),
body: Padding(
padding: EdgeInsets.all(15),
child: Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
DropdownButton(
items: temperature.map((item) {
return DropdownMenuItem(
child: Text(item),
value: item,
);
}).toList(),
onChanged: (newValue) {
setState(() {
selctedTemp = newValue;
});
},
value: selctedTemp,
),
TextField(
controller: controller(selctedTemp),
keyboardType: TextInputType.number,
decoration: InputDecoration(
hintText: 'Enter temperature',
suffixText: selctedTemp.substring(0, 1),
),
),
],
),
),
SizedBox(
width: 40,
),
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
DropdownButton(
value: selctedTemp1,
items: temperature.map((item) {
return DropdownMenuItem(
child: Text(item),
value: item,
);
}).toList(),
onChanged: (newValue) {
setState(() {
selctedTemp1 = newValue;
});
},
),
TextField(
controller: controller(selctedTemp1),
keyboardType: TextInputType.number,
decoration: InputDecoration(
hintText: 'Enter temperature',
suffixText: selctedTemp1.substring(0, 1),
),
),
],
),
),
],
),
),
),
);
}
}

我该怎么解决:

生成生成器时引发了以下NoSuchMethodError:方法"addListener"是在null上调用的。接收方:空尝试调用:addListener(闭包:(dynamic(=>函数"addtemp"中的动态:。(导致错误的相关小部件是:MaterialApplib\main.dart:11

当抛出异常时,这是堆栈:

您应该在调用addListener:之前进行初始化


initState() {
super.initState();
fenController = TextEditingController();
celController = TextEditingController();
kalController = TextEditingController();
fenController.addListener(addtemp);
celController.addListener(addtemp);
kalController.addListener(addtemp);
}

也不要忘记在上调用dispose()

相关内容

最新更新