如何保存TextField输入值并将其提供给其他屏幕?

时间:2020-03-27 13:25:29

标签: flutter flutter-layout

对于颤振是全新的,并且面临一些问题rn,我有一个文本字段,我在某个字符串中输入了内容,然后我通过TextEditingController保存了输入内容,接下来我想在另一个屏幕上显示输入内容,但是发生了什么我的情况是,每次更改屏幕时,TextEdditingcontroller.text值都会重置,

完整代码,位于:https://github.com/0x-xsh/studentchat/tree/master/lib

LINE 142中https://github.com/0x-xsh/studentchat/blob/master/lib/NewProblem.dart处的

issue,它在控制台中打印输入值,但是将空白字符串发送到新屏幕。因此当执行https://github.com/0x-xsh/studentchat/blob/master/lib/ProblemList.dart第19行时,它将返回错误。 我试图在第142行做一个setState,但问题相同。

2 个答案:

答案 0 :(得分:1)

我会在我们的List<Problem>类中添加一个ProblemList参数。

然后,当我们导航到我们的ProblemList页面时,可以传递此列表,并使用以下命令进行访问:

class ProblemList extends StatefulWidget {

  final List<Problem> pList;

  const ProblemList({this.pList});

  @override
  ProblemListState createState() => ProblemListState();
}

class ProblemListState extends State<ProblemList> {


  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("My Problems"),
          leading: Icon(Icons.list),
        ),
        body: Text(widget.pList[0].desc), //<-------- This is where you access the list
      ),
    );
  }
}

第142行变为:

onPressed: () {
               Problem problem = new Problem(problemDescription.text, problemDetails.text);
               problems.add(problem);
               print(problems[0].desc);
               Navigator.push(context,
               MaterialPageRoute(builder: (context) => 
               ProblemList(pList: problems))); //<----- Passing the list to the class
                  },

答案 1 :(得分:0)

您无法像在ProblemList.dart中那样访问其他页面的状态...

您需要将列表作为参数传递给ProblemList。 尝试在ProblemList类中声明一个List<Problem> problems;,将此变量添加到类构造函数中,并在NewProblem.dart的第147行中发送列表。

此外,您的代码是一团糟...文件有一个名称,而类有另一个名称..非常令人困惑... 始终尝试对文件和类使用正确的命名约定。这将帮助您和任何试图帮助您的人:)

https://dart.dev/guides/language/effective-dart/style

当您对Flutter有了更好的了解后,我建议您学习Flutter的状态管理。有很多方法。查看一些选项,然后选择最适合您项目需求的选项...