I need to rebuild the body of the home screen when I add new task to get all the tasks including the last task added, I tried many solutions from many resources but I didn't find an solution.
here the home screen widget which build list view of all tasks. Home screen widget
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocConsumer<TasksCubit, TasksStates>(
listener: (context, state) {},
builder: (context, state) {
TasksCubit cubit = TasksCubit.get(context);
return Scaffold(
body: ListView.separated(
itemBuilder: (context, index) {
return BuildTaskItem(
task: cubit.tasksList[index],
);
},
separatorBuilder: (context, index) => Divider(
thickness: 1,
),
itemCount: cubit.tasksList.length,
),
);
},
);
}
}
that the add screen which I can add task using insert into database(), when I add task and hit the button which trigger the function, it emits the add task success state and emits get tasks success but it isn't refresh the home screen with the new task
add task widget
Widget build(BuildContext context) {
return BlocConsumer<TasksOperationsCubit, TasksOperationsStates>(
listener: (context, state) {},
builder: (context, state) {
TasksOperationsCubit cubit = TasksOperationsCubit.get(context);
return Scaffold(
body: Padding(
padding: const EdgeInsets.all(20.0),
child: SingleChildScrollView(
child: Form(
key: formKey,
child: Column(
children: [
defaultMaterialButton(
color: Colors.pink,
text: 'Add Task',
textTheme: ButtonTextTheme.primary,
height: 50.0,
textSize: 25.0,
minWidth: double.infinity,
pressed: () {
if (formKey.currentState!.validate()) {
TaskEntity task = TaskEntity(
task: titleController.text,
date: dateController.text,
time: timeController.text,
piriority: piriorityController.text,
category: category,
);
cubit.insertIntoDatabase(task);
}
},
here the method that I add task into the database from the tasks operations cubit
tasks operations cubit
class TasksOperationsCubit extends Cubit<TasksOperationsStates> {
TasksCubit tasksCubit;
static TasksOperationsCubit get(context) => BlocProvider.of(context);
void insertIntoDatabase(TaskEntity task) {
insertTaskUsecase.todoRepository.insertTaskIntoDatabase(task).then((value) {
value.fold((failure) {
emit(InsertIntoDatabaseErrorState(error: failure.toString()));
}, (unit) {
emit(InsertIntoDatabaseSuccessState());
tasksCubit.getAllTasks();
});
});
}
}
here the get all tasks method form the the tasks cubit
tasks cubit
class TasksCubit extends Cubit<TasksStates> {
static TasksCubit get(context) => BlocProvider.of(context);
List<TaskEntity> tasksList = [];
List<TaskEntity> getAllTasks() {
LoadingGetAllTasksState();
getAllTasksUsecase.todoRepository.getAllTasksFromDatabase().then((value) {
value.fold((failure) {
emit(GetAllTasksErrorState(error: failure.toString()));
}, (tasks) {
tasksList = List.from(tasks);
print(tasks.toString());
emit(GetAllTasksSuccessState());
});
});
return tasksList;
}
}
I wish someone can help me finding a solution, and thanks all.