gpt4 book ai didi

flutter - 我想将数据从第二屏幕传递到第一屏幕

转载 作者:行者123 更新时间:2023-12-03 04:20:25 26 4
gpt4 key购买 nike

我正在制作一个简单的TODO应用,我想将数据从应用的第二屏幕传递到第一屏幕。我的第一个屏幕最初是空白的,没有任何显示,它有一个 float 按钮来添加任务。单击后,将转到第二页,用户在其中输入任务和作者,然后单击“提交”按钮,然后将我们带到第一页,在此显示。我想将数据作为List传递。在过去的24小时中,我尝试使用ModalRoute实现所有操作,还创建了一个ToDo类实例,以使其不会产生NULL错误,但没有任何结果。我正在附加代码,以便您可以理解我的问题。
这是我的FirstScreen()

import 'package:flutter/material.dart';
import 'todo.dart';
import 'todocard.dart';

class ToDos extends StatefulWidget{
@override
_ToDosState createState() => _ToDosState();
}

class _ToDosState extends State<ToDos> {

@override
Widget build(BuildContext context) {

List<ToDo> todos =[

];
final routeArgs = ModalRoute.of(context).settings.arguments as Map ;
todos.add(ToDo(author: routeArgs['task'],task: routeArgs['author']));

return Container(
child: Scaffold(
appBar: AppBar(
title: Text("TODO LIST"),
centerTitle: true,
),
body: Column(
children:todos.map((e) => ToDoCard(
todo: e,
)).toList(),
//ToDoCard is just a Card widget

),
floatingActionButton: FloatingActionButton(
elevation: 0.0,
child: Text("+"),
onPressed: ()
{
Navigator.pushNamed(context, '/add_task');
},
),
),

);
}
}
我的SecondScreen是:
import 'package:flutter/material.dart';

class AddTask extends StatefulWidget {
@override
_AddTaskState createState() => _AddTaskState();
}

class _AddTaskState extends State<AddTask> {
@override
Widget build(BuildContext context) {
String author,task;
return Container(
child: Scaffold(
appBar: AppBar(
title: Text("ADD TASK"),
centerTitle: true,
),
body: Column(
children: <Widget>[
Text("Enter Your Task"),
TextField(
decoration: InputDecoration(
border: InputBorder.none,
hintText: 'task'
),
onChanged: (text){
task = text;
},
),

TextField(
decoration: InputDecoration(
border: InputBorder.none,
hintText: 'author'
),
onChanged: (text){
author = text;
},
),

Row(
children: <Widget>[
RaisedButton(
onPressed: () {
Navigator.pop(context, {
'author': author,
'task': task,
});
},
child: Text("Submit"),
),
SizedBox(width: 10.0,),
RaisedButton(
onPressed: () {
Navigator.pop(context);
},
child: Text("Cancel"),
),
],
)

],
),
));
}
}
main.dart如下所示:
import 'package:flutter/material.dart';
import 'todo.dart';
import 'add_task.dart';
import 'display_todo.dart';

void main() {
runApp(MaterialApp(
title: 'Passing Data',
initialRoute: '/',
routes: {
'/': (context) => ToDos(),
'/add_task': (context) => AddTask(),
},
));
}
将信息显示为Card的ToDoCard:
import 'todo.dart';
import 'package:flutter/material.dart';

class ToDoCard extends StatelessWidget {
final ToDo todo;
ToDoCard({this.todo});
@override
Widget build(BuildContext context) {
return Card(
color: Colors.cyan,
margin: EdgeInsets.fromLTRB(20, 20, 20, 0),
child: Padding(
padding: EdgeInsets.fromLTRB(13, 10, 13, 10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[

Text(
todo.author,
style: TextStyle(
color: Colors.black,
fontSize: 20.0,
),
),
SizedBox(height: 10.0,),
Text(
todo.task,
style: TextStyle(
color: Colors.black,
fontSize: 20.0,
),
),
SizedBox(height: 10.0,),
// RaisedButton.icon(onPressed: delete, icon: Icon(Icons.delete), label:
Text("Delete quote"), color: Colors.red,),

],
),
),
);
}
}
待办事项类:
class ToDo{
final String task;
final String author;
ToDo({this.task,this.author});
}

最佳答案

您可以将结果传回Navigator.pop()上,并通过await调用pushNamed进行检索。
检索第1页中的值:

onPressed: () async
{
dynamic result = await Navigator.pushNamed(context, '/add_task');
if(result != null) {
setState(() {todos.add(result);});
}
},
从提交按钮的第2页传递值
onPressed: () {
Navigator.pop(context, ToDo(task: task, author: author));
},

关于flutter - 我想将数据从第二屏幕传递到第一屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62969744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com