Итак, я пытаюсь использовать обратный вызов, чтобы добавить задачу в свой список задач. Но я не могу получить доступ к setState () в моей функции обратного вызова. Позвольте мне объяснить,
Это мой add_task_screen, содержащий мой modalBottomSheet.
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class AddTaskScreen extends StatelessWidget {
String newTaskText;
final Function addNewTask;
AddTaskScreen({@required this.addNewTask});
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
child: Padding(
padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),
child: Container(
color: Color(0xFF757575),
child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20.0),
topRight: Radius.circular(20.0),
)
),
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 65.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Padding(
padding: EdgeInsets.only(top: 15.0),
child: Text(
'Add Task',
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.lightBlueAccent,
fontSize: 30.0
),
),
),
TextField(
style: TextStyle(fontSize: 22.0 ),
autofocus: true,
textAlign: TextAlign.center,
onChanged: (value) {
newTaskText = value;
},
),
SizedBox(
height: 15.0,
),
FlatButton(
color: Colors.lightBlueAccent,
child: Text(
'Add',
style: TextStyle(
color: Colors.white,
fontSize: 20.0,
),
),
onPressed: () {
addNewTask(newTaskText);
},
)
],
),
),
),
),
),
);
}
}
Итак, когда я нажимаю «Добавить», я хочу добавить свою задачу в свою задачу - список. но используя обратный вызов, просто чтобы обновить другие части моего приложения. Итак, я использую обратный вызов в tasks_screen, который является родительским элементом страницы add_tasks. Вот моя страница tasks_screen,
import 'package:flutter/material.dart';
import 'package:todoey/widgets/tasks_list.dart';
import 'package:todoey/screens/add_task_screen.dart';
import 'package:todoey/models/task.dart';
class TasksScreen extends StatelessWidget {
List<Task> tasks = [];
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.lightBlueAccent,
floatingActionButton: FloatingActionButton(
backgroundColor: Colors.lightBlueAccent,
child: Icon(Icons.add, size: 40.0),
onPressed: () {
showModalBottomSheet(
context: context,
builder: (context) => AddTaskScreen(
addNewTask: (String newTaskText) {
print(newTaskText);
tasks.add(Task(taskText: newTaskText));
// FIXME: Some issue here...
setState(() {
tasks.add(Task(taskText: newTaskText));
});
Navigator.pop(context);
},
),
isScrollControlled: true
);
},
),
body: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
padding: EdgeInsets.only(top: 60.0, left: 30, right: 30.0, bottom: 30.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
CircleAvatar(
child: Icon(Icons.list, size: 30.0, color: Colors.lightBlueAccent,),
backgroundColor: Colors.white,
radius: 30.0,
),
SizedBox(
height: 10.0,
),
Text(
'Todoey',
style: TextStyle(
color: Colors.white,
fontSize: 50.0,
fontWeight: FontWeight.w700,
),
),
Text(
'12 Tasks',
style: TextStyle(
color: Colors.white,
fontSize: 18.0,
),
),
],
),
),
Expanded(
child: Container(
padding: EdgeInsets.symmetric(horizontal: 20.0),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
topRight: Radius.circular(20.0),
topLeft: Radius.circular(20.0)
),
),
child: TasksList(tasks: tasks),
),
),
],
),
);
}
}
Итак, я получаю сообщение об ошибке в setState () под комментарием FIXME. Ошибка - это заголовок вопроса. Ирония заключается в том, что задача печатается на моей консоли. Но когда я пытаюсь изменить состояние, чтобы добавить задачу в свой список задач, а затем выскакивать из bottomSheet, я получаю сообщение об ошибке. Примечание. Задача - это модель.
Подскажите пожалуйста, как это исправить. Заранее спасибо.