【发布时间】:2020-12-19 03:11:04
【问题描述】:
我在有状态小部件中设置了一个变量,该变量等于另一个文件中的字符串。我希望仅在用户第一次启动程序时设置它,因为以后可以更改它。唯一的问题是,当我在声明它的地方将其设置为非 null 时,该变量以 null 的形式出现。任何人都知道为什么会发生这种情况以及如何解决这个问题?谢谢!
这是我声明变量 currentSelectedType 的地方。我将其设置为“等值”。现在,当我尝试在另一个导入它的文件中设置另一个变量等于它时,它说它为空。还有我有时用来清除值的 resetData 函数。但这不应该是我的问题。
import 'package:flutter/cupertino.dart';
TextEditingController amountEditingController = TextEditingController();
TextEditingController descriptionEditingController = TextEditingController();
TextEditingController dataEditingController = TextEditingController();
TextEditingController rateEditingController = TextEditingController();
DateTime selectedDate = DateTime.now();
String currentSelectedType = "Equal Value";
resetData() {
amountEditingController = TextEditingController();
descriptionEditingController = TextEditingController();
payeeEditingController = TextEditingController();
rateEditingController = TextEditingController();
selectedDate = DateTime.now();
currentSelectedType = null;
}
这是我尝试将 holder 设置为等于在另一个文件中声明的 currentSelectedType 变量的位(另一个文件称为 variable_data 并作为数据导入)。但是 currentSelectedType 在这里是空的。这是我的问题。我希望它是我最初声明的内容,而不是空值。我只是必须能够将持有人设置为等于其初始值。
import 'package:testproject/widgetdata/variable_data.dart' as Data;
class InsertDataDrawer extends StatefulWidget {
@override
_InsertDataDrawerState createState() => _InsertDataDrawerState();
}
class _InsertDataDrawerState extends State<InsertDataDrawer> {
String selectedDate;
var deviceTypes = [''];
var dropTypes = recurring_type;
String holder = Data.currentSelectedType;
关于如何调用重置数据函数的精简代码
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
width: MediaQuery.of(context).size.width * .85,
height: 50,
child: RaisedButton(
textColor: Colors.white,
color: Colors.green,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10)),
child: Text("Save Data"),
onPressed: () {
submitData();
},
),
)
],
),
submitData() async {
Data.resetData();
Navigator.pop(context);
Fluttertoast.showToast(
msg: "Data successfully submitted",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.TOP,
timeInSecForIosWeb: 3,
backgroundColor: Colors.blue,
textColor: Colors.white,
fontSize: 15 );
}
【问题讨论】:
-
你在哪里调用resetData函数?你是在 initState 中调用 resetData() 吗?
-
我在一个由用户点击按钮触发的函数中调用它。
-
你怎么调用的函数能显示出来?你叫它像 RaisedButton(onPressed : resetData(), child: Text("Reset"));
-
在问题中添加了 sn-ps 以显示其调用方式
-
(1) 在 submitData() 函数的第一行代码中添加 print("call") 语句。只是为了调试它是否是从代码中的某个地方调用的。 (2) 您是否也将其他内容定义为数据?