diff --git a/examples/flutter/github_search/lib/search_result_widget.dart b/examples/flutter/github_search/lib/search_result_widget.dart index 7b0f425a..512f786c 100644 --- a/examples/flutter/github_search/lib/search_result_widget.dart +++ b/examples/flutter/github_search/lib/search_result_widget.dart @@ -15,6 +15,7 @@ class SearchResultWidget extends StatelessWidget { final item = items[index]; return InkWell( + key: ValueKey(item.url), onTap: () => showItem(context, item), child: Container( alignment: FractionalOffset.center, diff --git a/examples/flutter/github_search/lib/search_state.dart b/examples/flutter/github_search/lib/search_state.dart index b688ef82..fec020f4 100644 --- a/examples/flutter/github_search/lib/search_state.dart +++ b/examples/flutter/github_search/lib/search_state.dart @@ -1,3 +1,5 @@ +import 'package:flutter/foundation.dart'; + import 'github_api.dart'; // The State represents the data the View requires. The View consumes a Stream @@ -9,7 +11,8 @@ import 'github_api.dart'; // // The State Stream responds to input from the View by accepting a // Stream. We call this Stream the onTextChanged "intent". -class SearchState {} +@immutable +sealed class SearchState {} class SearchLoading extends SearchState {} diff --git a/examples/flutter/github_search/lib/search_widget.dart b/examples/flutter/github_search/lib/search_widget.dart index fef5ee36..771b9d16 100644 --- a/examples/flutter/github_search/lib/search_widget.dart +++ b/examples/flutter/github_search/lib/search_widget.dart @@ -115,18 +115,17 @@ class SearchScreenState extends State { } Widget _buildChild(SearchState state) { - if (state is SearchNoTerm) { - return const SearchIntro(); - } else if (state is SearchEmpty) { - return const EmptyWidget(); - } else if (state is SearchLoading) { - return const LoadingWidget(); - } else if (state is SearchError) { - return const SearchErrorWidget(); - } else if (state is SearchPopulated) { - return SearchResultWidget(items: state.result.items); + switch (state) { + case SearchNoTerm(): + return const SearchIntro(); + case SearchEmpty(): + return const EmptyWidget(); + case SearchLoading(): + return const LoadingWidget(); + case SearchError(): + return const SearchErrorWidget(); + case SearchPopulated(): + return SearchResultWidget(items: state.result.items); } - - throw Exception('${state.runtimeType} is not supported'); } }