From 2af31a03579e379ccc75e71a6a37769163a4e4c9 Mon Sep 17 00:00:00 2001 From: Ming Ming Date: Mon, 25 Jul 2022 13:51:52 +0800 Subject: [PATCH] Favor functions in package:collection --- app/lib/bloc/album_search.dart | 2 +- app/lib/bloc/search_suggestion.dart | 1 + app/lib/entity/album/cover_provider.dart | 2 +- app/lib/entity/album_util.dart | 2 +- app/lib/entity/file/file_cache_manager.dart | 5 ++-- app/lib/iterable_extension.dart | 13 ++-------- app/lib/use_case/cache_favorite.dart | 2 +- app/lib/widget/album_importer.dart | 1 + app/lib/widget/dynamic_album_browser.dart | 4 ++-- app/lib/widget/handler/enhance_handler.dart | 4 ++-- app/lib/widget/people_browser.dart | 2 +- app/lib/widget/person_browser.dart | 3 ++- app/lib/widget/photo_list_util.dart | 2 +- app/lib/widget/sharing_browser.dart | 2 +- app/test/entity/album/sort_provider_test.dart | 24 +++++++++---------- app/test/iterable_extension_test.dart | 16 ------------- 16 files changed, 32 insertions(+), 53 deletions(-) diff --git a/app/lib/bloc/album_search.dart b/app/lib/bloc/album_search.dart index ade714e5..131f2d61 100644 --- a/app/lib/bloc/album_search.dart +++ b/app/lib/bloc/album_search.dart @@ -1,7 +1,7 @@ import 'package:bloc/bloc.dart'; +import 'package:collection/collection.dart'; import 'package:logging/logging.dart'; import 'package:nc_photos/entity/album.dart'; -import 'package:nc_photos/iterable_extension.dart'; abstract class AlbumSearchBlocEvent { const AlbumSearchBlocEvent(); diff --git a/app/lib/bloc/search_suggestion.dart b/app/lib/bloc/search_suggestion.dart index 69d0da10..c961eb65 100644 --- a/app/lib/bloc/search_suggestion.dart +++ b/app/lib/bloc/search_suggestion.dart @@ -1,4 +1,5 @@ import 'package:bloc/bloc.dart'; +import 'package:collection/collection.dart'; import 'package:flutter/foundation.dart'; import 'package:logging/logging.dart'; import 'package:nc_photos/ci_string.dart'; diff --git a/app/lib/entity/album/cover_provider.dart b/app/lib/entity/album/cover_provider.dart index 87b75d5b..21b94630 100644 --- a/app/lib/entity/album/cover_provider.dart +++ b/app/lib/entity/album/cover_provider.dart @@ -1,3 +1,4 @@ +import 'package:collection/collection.dart'; import 'package:equatable/equatable.dart'; import 'package:logging/logging.dart'; import 'package:nc_photos/entity/album.dart'; @@ -5,7 +6,6 @@ import 'package:nc_photos/entity/album/item.dart'; import 'package:nc_photos/entity/album/provider.dart'; import 'package:nc_photos/entity/file.dart'; import 'package:nc_photos/entity/file_util.dart' as file_util; -import 'package:nc_photos/iterable_extension.dart' as iterable_extension; import 'package:nc_photos/type.dart'; abstract class AlbumCoverProvider with EquatableMixin { diff --git a/app/lib/entity/album_util.dart b/app/lib/entity/album_util.dart index 25ccbd0f..39b587a7 100644 --- a/app/lib/entity/album_util.dart +++ b/app/lib/entity/album_util.dart @@ -1,5 +1,5 @@ +import 'package:collection/collection.dart'; import 'package:nc_photos/entity/album.dart'; -import 'package:nc_photos/iterable_extension.dart'; import 'package:tuple/tuple.dart'; enum AlbumSort { diff --git a/app/lib/entity/file/file_cache_manager.dart b/app/lib/entity/file/file_cache_manager.dart index b97cb33a..f8ccac06 100644 --- a/app/lib/entity/file/file_cache_manager.dart +++ b/app/lib/entity/file/file_cache_manager.dart @@ -1,3 +1,4 @@ +import 'package:collection/collection.dart'; import 'package:drift/drift.dart' as sql; import 'package:logging/logging.dart'; import 'package:nc_photos/account.dart'; @@ -9,7 +10,6 @@ import 'package:nc_photos/entity/sqlite_table.dart' as sql; import 'package:nc_photos/entity/sqlite_table_converter.dart'; import 'package:nc_photos/entity/sqlite_table_extension.dart' as sql; import 'package:nc_photos/exception.dart'; -import 'package:nc_photos/iterable_extension.dart'; import 'package:nc_photos/list_util.dart' as list_util; import 'package:nc_photos/object_extension.dart'; import 'package:nc_photos/remote_storage_util.dart' as remote_storage_util; @@ -164,7 +164,8 @@ class FileSqliteCacheUpdater { ..orderBy([sql.OrderingTerm.asc(db.dirFiles.rowId)]); final dirChildRowIds = await dirChildRowIdQuery.map((r) => r.read(db.dirFiles.child)!).get(); - final diff = list_util.diff(dirChildRowIds, _childRowIds.sorted()); + final diff = list_util.diff( + dirChildRowIds, _childRowIds.sorted(Comparable.compare)); if (diff.item1.isNotEmpty) { await db.batch((batch) { // insert new children diff --git a/app/lib/iterable_extension.dart b/app/lib/iterable_extension.dart index 93a624ba..83bffc5c 100644 --- a/app/lib/iterable_extension.dart +++ b/app/lib/iterable_extension.dart @@ -1,14 +1,12 @@ import 'dart:async'; +import 'package:collection/collection.dart'; import 'package:flutter/foundation.dart'; import 'package:nc_photos/list_extension.dart'; import 'package:nc_photos/override_comparator.dart'; import 'package:tuple/tuple.dart'; extension IterableExtension on Iterable { - /// Return a new sorted list - List sorted([int Function(T a, T b)? compare]) => toList()..sort(compare); - /// Return a new stable sorted list List stableSorted([int Function(T a, T b)? compare]) => toList()..stableSort(compare); @@ -17,14 +15,7 @@ extension IterableExtension on Iterable { /// toString for each items String toReadableString() => "[${join(', ')}]"; - Iterable mapWithIndex(U Function(int index, T element) fn) sync* { - int i = 0; - for (final e in this) { - yield fn(i++, e); - } - } - - Iterable> withIndex() => mapWithIndex((i, e) => Tuple2(i, e)); + Iterable> withIndex() => mapIndexed((i, e) => Tuple2(i, e)); /// Whether the collection contains an element equal to [element] using the /// equality function [equalFn] diff --git a/app/lib/use_case/cache_favorite.dart b/app/lib/use_case/cache_favorite.dart index 2a95ec25..09d37d9e 100644 --- a/app/lib/use_case/cache_favorite.dart +++ b/app/lib/use_case/cache_favorite.dart @@ -1,3 +1,4 @@ +import 'package:collection/collection.dart'; import 'package:drift/drift.dart' as sql; import 'package:event_bus/event_bus.dart'; import 'package:kiwi/kiwi.dart'; @@ -8,7 +9,6 @@ import 'package:nc_photos/entity/file.dart'; import 'package:nc_photos/entity/sqlite_table.dart' as sql; import 'package:nc_photos/entity/sqlite_table_extension.dart' as sql; import 'package:nc_photos/event/event.dart'; -import 'package:nc_photos/iterable_extension.dart'; import 'package:nc_photos/list_util.dart' as list_util; import 'package:nc_photos/use_case/list_favorite_offline.dart'; diff --git a/app/lib/widget/album_importer.dart b/app/lib/widget/album_importer.dart index 0410cc47..f59dd05f 100644 --- a/app/lib/widget/album_importer.dart +++ b/app/lib/widget/album_importer.dart @@ -1,3 +1,4 @@ +import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:kiwi/kiwi.dart'; diff --git a/app/lib/widget/dynamic_album_browser.dart b/app/lib/widget/dynamic_album_browser.dart index c30032c2..34085f2a 100644 --- a/app/lib/widget/dynamic_album_browser.dart +++ b/app/lib/widget/dynamic_album_browser.dart @@ -1,3 +1,4 @@ +import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; import 'package:kiwi/kiwi.dart'; @@ -17,7 +18,6 @@ import 'package:nc_photos/entity/file.dart'; import 'package:nc_photos/entity/file_util.dart' as file_util; import 'package:nc_photos/event/event.dart'; import 'package:nc_photos/exception_util.dart' as exception_util; -import 'package:nc_photos/iterable_extension.dart'; import 'package:nc_photos/k.dart' as k; import 'package:nc_photos/object_extension.dart'; import 'package:nc_photos/or_null.dart'; @@ -465,7 +465,7 @@ class _DynamicAlbumBrowserState extends State )); } if (successes.isNotEmpty) { - final indexes = successes.map((e) => e.index).sorted(); + final indexes = successes.map((e) => e.index).sorted(Comparable.compare); setState(() { for (final i in indexes.reversed) { _sortedItems.removeAt(i); diff --git a/app/lib/widget/handler/enhance_handler.dart b/app/lib/widget/handler/enhance_handler.dart index 89b8eb0e..25b875fc 100644 --- a/app/lib/widget/handler/enhance_handler.dart +++ b/app/lib/widget/handler/enhance_handler.dart @@ -1,6 +1,7 @@ import 'dart:math' as math; import 'package:android_intent_plus/android_intent.dart'; +import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; import 'package:logging/logging.dart'; import 'package:nc_photos/account.dart'; @@ -9,7 +10,6 @@ import 'package:nc_photos/app_localizations.dart'; import 'package:nc_photos/entity/file.dart'; import 'package:nc_photos/entity/file_util.dart' as file_util; import 'package:nc_photos/help_utils.dart'; -import 'package:nc_photos/iterable_extension.dart'; import 'package:nc_photos/k.dart' as k; import 'package:nc_photos/mobile/android/android_info.dart'; import 'package:nc_photos/mobile/android/content_uri_image_provider.dart'; @@ -423,7 +423,7 @@ class _StylePickerState extends State<_StylePicker> { runSpacing: 8, spacing: 8, children: [ - ..._bundledStyles.mapWithIndex((i, e) => _buildItem( + ..._bundledStyles.mapIndexed((i, e) => _buildItem( i, Image( image: ResizeImage.resizeIfNeeded( diff --git a/app/lib/widget/people_browser.dart b/app/lib/widget/people_browser.dart index 6db9c45e..280c1c2b 100644 --- a/app/lib/widget/people_browser.dart +++ b/app/lib/widget/people_browser.dart @@ -1,5 +1,6 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:cached_network_image_platform_interface/cached_network_image_platform_interface.dart'; +import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; @@ -14,7 +15,6 @@ import 'package:nc_photos/entity/person.dart'; import 'package:nc_photos/exception.dart'; import 'package:nc_photos/exception_util.dart' as exception_util; import 'package:nc_photos/help_utils.dart' as help_utils; -import 'package:nc_photos/iterable_extension.dart'; import 'package:nc_photos/k.dart' as k; import 'package:nc_photos/snack_bar_manager.dart'; import 'package:nc_photos/theme.dart'; diff --git a/app/lib/widget/person_browser.dart b/app/lib/widget/person_browser.dart index c9da4da1..a26533fe 100644 --- a/app/lib/widget/person_browser.dart +++ b/app/lib/widget/person_browser.dart @@ -1,5 +1,6 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:cached_network_image_platform_interface/cached_network_image_platform_interface.dart'; +import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; @@ -429,7 +430,7 @@ class _PersonBrowserState extends State .toList(); setState(() { itemStreamListItems = _backingFiles! - .mapWithIndex((i, f) => _ListItem( + .mapIndexed((i, f) => _ListItem( index: i, file: f, account: widget.account, diff --git a/app/lib/widget/photo_list_util.dart b/app/lib/widget/photo_list_util.dart index f6bc56a1..5c71b530 100644 --- a/app/lib/widget/photo_list_util.dart +++ b/app/lib/widget/photo_list_util.dart @@ -1,3 +1,4 @@ +import 'package:collection/collection.dart'; import 'package:logging/logging.dart'; import 'package:nc_photos/date_time_extension.dart'; import 'package:nc_photos/entity/album.dart'; @@ -5,7 +6,6 @@ import 'package:nc_photos/entity/album/cover_provider.dart'; import 'package:nc_photos/entity/album/provider.dart'; import 'package:nc_photos/entity/album/sort_provider.dart'; import 'package:nc_photos/entity/file.dart'; -import 'package:nc_photos/iterable_extension.dart'; class DateGroupHelper { DateGroupHelper({ diff --git a/app/lib/widget/sharing_browser.dart b/app/lib/widget/sharing_browser.dart index 9a7e0e1f..189ad4f2 100644 --- a/app/lib/widget/sharing_browser.dart +++ b/app/lib/widget/sharing_browser.dart @@ -1,5 +1,6 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:cached_network_image_platform_interface/cached_network_image_platform_interface.dart'; +import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:intl/intl.dart'; @@ -18,7 +19,6 @@ import 'package:nc_photos/entity/file.dart'; import 'package:nc_photos/entity/file/data_source.dart'; import 'package:nc_photos/entity/share.dart'; import 'package:nc_photos/exception_util.dart' as exception_util; -import 'package:nc_photos/iterable_extension.dart'; import 'package:nc_photos/k.dart' as k; import 'package:nc_photos/object_extension.dart'; import 'package:nc_photos/or_null.dart'; diff --git a/app/test/entity/album/sort_provider_test.dart b/app/test/entity/album/sort_provider_test.dart index cf523c8e..dcc6fecd 100644 --- a/app/test/entity/album/sort_provider_test.dart +++ b/app/test/entity/album/sort_provider_test.dart @@ -1,7 +1,7 @@ +import 'package:collection/collection.dart'; import 'package:nc_photos/ci_string.dart'; import 'package:nc_photos/entity/album/item.dart'; import 'package:nc_photos/entity/album/sort_provider.dart'; -import 'package:nc_photos/iterable_extension.dart'; import 'package:test/test.dart'; import '../../test_util.dart' as util; @@ -85,7 +85,7 @@ void _timeFileAscending() { lastModified: DateTime.utc(2020, 1, 2, 3, 4, 2), )) .build() - .mapWithIndex((i, f) => AlbumFileItem( + .mapIndexed((i, f) => AlbumFileItem( addedBy: CiString("admin"), addedAt: f.lastModified!, file: f, @@ -113,7 +113,7 @@ void _timeFileDescending() { lastModified: DateTime.utc(2020, 1, 2, 3, 4, 2), )) .build() - .mapWithIndex((i, f) => AlbumFileItem( + .mapIndexed((i, f) => AlbumFileItem( addedBy: CiString("admin"), addedAt: f.lastModified!, file: f, @@ -141,7 +141,7 @@ void _timeNonFileAscending() { lastModified: DateTime.utc(2020, 1, 2, 3, 4, 2), )) .build() - .mapWithIndex((i, f) => AlbumFileItem( + .mapIndexed((i, f) => AlbumFileItem( addedBy: CiString("admin"), addedAt: f.lastModified!, file: f, @@ -177,7 +177,7 @@ void _timeNonFileDescending() { lastModified: DateTime.utc(2020, 1, 2, 3, 4, 2), )) .build() - .mapWithIndex((i, f) => AlbumFileItem( + .mapIndexed((i, f) => AlbumFileItem( addedBy: CiString("admin"), addedAt: f.lastModified!, file: f, @@ -213,7 +213,7 @@ void _timeNonFileHead() { lastModified: DateTime.utc(2020, 1, 2, 3, 4, 2), )) .build() - .mapWithIndex((i, f) => AlbumFileItem( + .mapIndexed((i, f) => AlbumFileItem( addedBy: CiString("admin"), addedAt: f.lastModified!, file: f, @@ -249,7 +249,7 @@ void _filenameFileAscending() { lastModified: DateTime.utc(2020, 1, 2, 3, 4, 2), )) .build() - .mapWithIndex((i, f) => AlbumFileItem( + .mapIndexed((i, f) => AlbumFileItem( addedBy: CiString("admin"), addedAt: f.lastModified!, file: f, @@ -277,7 +277,7 @@ void _filenameFileDescending() { lastModified: DateTime.utc(2020, 1, 2, 3, 4, 2), )) .build() - .mapWithIndex((i, f) => AlbumFileItem( + .mapIndexed((i, f) => AlbumFileItem( addedBy: CiString("admin"), addedAt: f.lastModified!, file: f, @@ -317,7 +317,7 @@ void _filenameFileNatural() { lastModified: DateTime.utc(2020, 1, 2, 3, 4, 1), )) .build() - .mapWithIndex((i, f) => AlbumFileItem( + .mapIndexed((i, f) => AlbumFileItem( addedBy: CiString("admin"), addedAt: f.lastModified!, file: f, @@ -348,7 +348,7 @@ void _filenameNonFileAscending() { lastModified: DateTime.utc(2020, 1, 2, 3, 4, 2), )) .build() - .mapWithIndex((i, f) => AlbumFileItem( + .mapIndexed((i, f) => AlbumFileItem( addedBy: CiString("admin"), addedAt: f.lastModified!, file: f, @@ -384,7 +384,7 @@ void _filenameNonFileDescending() { lastModified: DateTime.utc(2020, 1, 2, 3, 4, 2), )) .build() - .mapWithIndex((i, f) => AlbumFileItem( + .mapIndexed((i, f) => AlbumFileItem( addedBy: CiString("admin"), addedAt: f.lastModified!, file: f, @@ -420,7 +420,7 @@ void _filenameNonFileHead() { lastModified: DateTime.utc(2020, 1, 2, 3, 4, 2), )) .build() - .mapWithIndex((i, f) => AlbumFileItem( + .mapIndexed((i, f) => AlbumFileItem( addedBy: CiString("admin"), addedAt: f.lastModified!, file: f, diff --git a/app/test/iterable_extension_test.dart b/app/test/iterable_extension_test.dart index c8747d90..bac7b20b 100644 --- a/app/test/iterable_extension_test.dart +++ b/app/test/iterable_extension_test.dart @@ -5,22 +5,6 @@ import 'package:tuple/tuple.dart'; void main() { group("IterableExtension", () { - test("sorted", () { - final src = [1, 4, 5, 2, 3, 8, 6, 7]; - expect(src.sorted(), [1, 2, 3, 4, 5, 6, 7, 8]); - }); - - test("mapWithIndex", () { - final src = [1, 4, 5, 2, 3]; - final result = - src.mapWithIndex((index, element) => Tuple2(index, element)).toList(); - expect(result[0], const Tuple2(0, 1)); - expect(result[1], const Tuple2(1, 4)); - expect(result[2], const Tuple2(2, 5)); - expect(result[3], const Tuple2(3, 2)); - expect(result[4], const Tuple2(4, 3)); - }); - test("withIndex", () { final src = [1, 4, 5, 2, 3]; final result = src.withIndex().toList();