From 6fb715923d6e1b93b1feb56a54021a1cf0023e82 Mon Sep 17 00:00:00 2001 From: natsuk4ze Date: Thu, 25 Jan 2024 21:39:29 +0900 Subject: [PATCH] Migrate from AsyncValue.when to Dart 3's switch-case See: https://github.com/rrousselGit/riverpod/issues/2715 --- .../package_details/package_details_page.dart | 10 ++-- lib/features/packages/packages_page.dart | 53 +++++++++---------- 2 files changed, 31 insertions(+), 32 deletions(-) diff --git a/lib/features/package_details/package_details_page.dart b/lib/features/package_details/package_details_page.dart index 716cede..677a046 100644 --- a/lib/features/package_details/package_details_page.dart +++ b/lib/features/package_details/package_details_page.dart @@ -22,11 +22,11 @@ class PackageDetailsPage extends ConsumerWidget { appBar: TitleAppBar(title: l10n.packageDetailsPage.title), body: Padding( padding: const EdgeInsets.symmetric(horizontal: 24), - child: package.when( - data: (package) => PackegeDetailsItem(package), - error: (e, _) => Text(e.toString()), - loading: () => const Center(child: CircularProgressIndicator()), - ), + child: switch (package) { + AsyncData(:final value) => PackegeDetailsItem(value), + AsyncError(:final error) => Text(error.toString()), + _ => const Center(child: CircularProgressIndicator()), + }, ), ); } diff --git a/lib/features/packages/packages_page.dart b/lib/features/packages/packages_page.dart index d5c9683..7f21805 100644 --- a/lib/features/packages/packages_page.dart +++ b/lib/features/packages/packages_page.dart @@ -17,7 +17,7 @@ import 'package:riverpod_annotation/riverpod_annotation.dart'; part 'packages_page.g.dart'; @visibleForTesting -const initialSearchText = 'color'; +const initialSearchText = 'vue'; @riverpod class Sort extends _$Sort { @@ -111,32 +111,31 @@ class _PackageItems extends ConsumerWidget { final sort = ref.watch(sortProvider); final l10n = ref.watch(l10nProvider); - return packages.when( - data: (packages) { - final sortedPackages = sort == null - ? List.of(packages) - : packages.sortedByCompare( - (package) => sort.getValue(package.score), - (a, b) => b.compareTo(a)); + return switch (packages) { + AsyncData(:final value) => Builder(builder: (context) { + final sortedPackages = sort == null + ? List.of(value) + : value.sortedByCompare((package) => sort.getValue(package.score), + (a, b) => b.compareTo(a)); - return sortedPackages.isEmpty - ? SingleChildScrollView( - child: EmptyImage(text: l10n.packagesPage.packageNotFound), - ) - : RefreshIndicator( - onRefresh: () async => ref.refresh(packagesProvider( - search: searchText, - debounce: false, - ).future), - child: ListView.separated( - separatorBuilder: (_, __) => const Divider(), - itemCount: sortedPackages.length, - itemBuilder: (_, int i) => PackageItem(sortedPackages[i]), - ), - ); - }, - error: (e, _) => Text(e.toString()), - loading: () => const Center(child: CircularProgressIndicator()), - ); + return sortedPackages.isEmpty + ? SingleChildScrollView( + child: EmptyImage(text: l10n.packagesPage.packageNotFound), + ) + : RefreshIndicator( + onRefresh: () async => ref.refresh(packagesProvider( + search: searchText, + debounce: false, + ).future), + child: ListView.separated( + separatorBuilder: (_, __) => const Divider(), + itemCount: sortedPackages.length, + itemBuilder: (_, int i) => PackageItem(sortedPackages[i]), + ), + ); + }), + AsyncError(:final error) => Text(error.toString()), + _ => const Center(child: CircularProgressIndicator()), + }; } }