Advertisement
Guest User

Untitled

a guest
Mar 19th, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.94 KB | None | 0 0
  1. import 'package:flutter/foundation.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter_bloc/flutter_bloc.dart';
  4. import 'package:todos_app_core/todos_app_core.dart';
  5. import 'package:flutter_todos/blocs/todos/todos.dart';
  6. import 'package:flutter_todos/screens/screens.dart';
  7. import 'package:flutter_todos/flutter_todos_keys.dart';
  8.  
  9. class DetailsScreen extends StatelessWidget {
  10. final String id;
  11.  
  12. DetailsScreen({Key key, @required this.id})
  13. : super(key: key ?? ArchSampleKeys.todoDetailsScreen);
  14.  
  15. @override
  16. Widget build(BuildContext context) {
  17. final todosBloc = BlocProvider.of<TodosBloc>(context);
  18. return BlocBuilder(
  19. bloc: todosBloc,
  20. builder: (BuildContext context, TodosState state) {
  21. final todo = (state as TodosLoaded)
  22. .todos
  23. .firstWhere((todo) => todo.id == id, orElse: () => null);
  24. final localizations = ArchSampleLocalizations.of(context);
  25. return Scaffold(
  26. appBar: AppBar(
  27. title: Text(localizations.todoDetails),
  28. actions: [
  29. IconButton(
  30. tooltip: localizations.deleteTodo,
  31. key: ArchSampleKeys.deleteTodoButton,
  32. icon: Icon(Icons.delete),
  33. onPressed: () {
  34. todosBloc.dispatch(DeleteTodo(todo));
  35. Navigator.pop(context, todo);
  36. },
  37. )
  38. ],
  39. ),
  40. body: todo == null
  41. ? Container(key: FlutterTodosKeys.emptyDetailsContainer)
  42. : Padding(
  43. padding: EdgeInsets.all(16.0),
  44. child: ListView(
  45. children: [
  46. Row(
  47. crossAxisAlignment: CrossAxisAlignment.start,
  48. children: [
  49. Padding(
  50. padding: EdgeInsets.only(right: 8.0),
  51. child: Checkbox(
  52. key: FlutterTodosKeys.detailsScreenCheckBox,
  53. value: todo.complete,
  54. onChanged: (_) {
  55. todosBloc.dispatch(
  56. UpdateTodo(
  57. todo.copyWith(complete: !todo.complete),
  58. ),
  59. );
  60. }),
  61. ),
  62. Expanded(
  63. child: Column(
  64. crossAxisAlignment: CrossAxisAlignment.start,
  65. children: [
  66. Hero(
  67. tag: '${todo.id}__heroTag',
  68. child: Container(
  69. width: MediaQuery.of(context).size.width,
  70. padding: EdgeInsets.only(
  71. top: 8.0,
  72. bottom: 16.0,
  73. ),
  74. child: Text(
  75. todo.task,
  76. key: ArchSampleKeys.detailsTodoItemTask,
  77. style:
  78. Theme.of(context).textTheme.headline,
  79. ),
  80. ),
  81. ),
  82. Text(
  83. todo.note,
  84. key: ArchSampleKeys.detailsTodoItemNote,
  85. style: Theme.of(context).textTheme.subhead,
  86. ),
  87. ],
  88. ),
  89. ),
  90. ],
  91. ),
  92. ],
  93. ),
  94. ),
  95. floatingActionButton: FloatingActionButton(
  96. key: ArchSampleKeys.editTodoFab,
  97. tooltip: localizations.editTodo,
  98. child: Icon(Icons.edit),
  99. onPressed: todo == null
  100. ? null
  101. : () {
  102. Navigator.of(context).push(
  103. MaterialPageRoute(
  104. builder: (context) {
  105. return AddEditScreen(
  106. key: ArchSampleKeys.editTodoScreen,
  107. onSave: (task, note) {
  108. todosBloc.dispatch(
  109. UpdateTodo(
  110. todo.copyWith(task: task, note: note),
  111. ),
  112. );
  113. },
  114. isEditing: true,
  115. todo: todo,
  116. );
  117. },
  118. ),
  119. );
  120. },
  121. ),
  122. );
  123. },
  124. );
  125. }
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement