【问题标题】:Why is a variable from separate file coming into a file as null when I don't have it set as null?当我没有将其设置为空时,为什么来自单独文件的变量进入文件时为空?
【发布时间】: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) 您是否也将其他内容定义为数据?

标签: flutter dart


【解决方案1】:

不完全确定问题出在哪里,绝对不在代码中。完全重启我的电脑解决了它。

【讨论】:

    猜你喜欢
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 2020-06-06
    • 2013-10-02
    • 1970-01-01
    相关资源
    最近更新 更多