buildView method
Implementation
@override
Widget buildView(
BuildContext context,
HomeUIState state,
HomeUIStateNotifier notifier,
) {
return Scaffold(
appBar: AppBar(
title: const AppText.large('FSA Todo List'),
),
body: () {
switch (state.status) {
case HomeUIStatus.initial:
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const AppText.medium('No todos loaded.'),
const SizedBox(height: 16),
AppButton.primary(
label: 'Fetch from Repository',
onPressed: notifier.fetchTodos,
),
],
),
);
case HomeUIStatus.loading:
return const Center(child: CircularProgressIndicator());
case HomeUIStatus.error:
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
AppText.medium('Error: ${state.errorMessage}'),
const SizedBox(height: 16),
AppButton.primary(
label: 'Retry',
onPressed: notifier.fetchTodos,
),
],
),
);
case HomeUIStatus.success:
return ListView.separated(
itemCount: state.todos.length,
separatorBuilder: (context, index) => const Divider(height: 1),
itemBuilder: (context, index) {
final todo = state.todos[index];
return TodoTile(
todo: todo,
onToggle: () => notifier.toggleTodo(todo.id),
onTap: () => AppRoute.details.push(context, arguments: todo),
);
},
);
}
}(),
floatingActionButton: state.status == HomeUIStatus.success
? FloatingActionButton(
onPressed: () => AddTodoDialog.show(context, notifier),
child: const Icon(Icons.add),
)
: null,
);
}