From da05b536d31358932af88534255251e0e6c4daa9 Mon Sep 17 00:00:00 2001 From: Job Guldemeester Date: Tue, 29 Apr 2025 14:16:40 +0200 Subject: [PATCH 1/3] :package: Improved pagination export --- example/pubspec.lock | 2 +- lib/dcc_toolkit.dart | 5 +---- lib/pagination/paginated.dart | 4 ++++ lib/pagination/pagination_state.dart | 2 +- test/pagination/pagination_mixin_test.dart | 8 ++++---- 5 files changed, 11 insertions(+), 10 deletions(-) create mode 100644 lib/pagination/paginated.dart diff --git a/example/pubspec.lock b/example/pubspec.lock index c54fc5f..211575d 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -212,7 +212,7 @@ packages: path: ".." relative: true source: path - version: "0.0.13" + version: "0.0.14" equatable: dependency: transitive description: diff --git a/lib/dcc_toolkit.dart b/lib/dcc_toolkit.dart index 3dc4ce6..7522345 100644 --- a/lib/dcc_toolkit.dart +++ b/lib/dcc_toolkit.dart @@ -8,10 +8,7 @@ export 'common/mixins/refresh_stream_mixin.dart'; export 'common/result/result.dart'; export 'common/type_defs.dart'; export 'logger/bolt_logger.dart'; -export 'pagination/paginated_scroll_view.dart'; -export 'pagination/pagination_interface.dart'; -export 'pagination/pagination_mixin.dart'; -export 'pagination/pagination_state.dart'; +export 'pagination/paginated.dart'; export 'style/style.dart'; export 'test_util/devices_sizes.dart'; export 'test_util/presentation_event_catcher.dart'; diff --git a/lib/pagination/paginated.dart b/lib/pagination/paginated.dart new file mode 100644 index 0000000..d318a34 --- /dev/null +++ b/lib/pagination/paginated.dart @@ -0,0 +1,4 @@ +export 'package:dcc_toolkit/pagination/paginated_scroll_view.dart'; +export 'package:dcc_toolkit/pagination/pagination_interface.dart'; +export 'package:dcc_toolkit/pagination/pagination_mixin.dart'; +export 'package:dcc_toolkit/pagination/pagination_state.dart'; diff --git a/lib/pagination/pagination_state.dart b/lib/pagination/pagination_state.dart index f0369b5..00cbce6 100644 --- a/lib/pagination/pagination_state.dart +++ b/lib/pagination/pagination_state.dart @@ -1,7 +1,7 @@ /// State for pagination. class PaginationState { /// Creates a new [PaginationState] with the given values. - PaginationState({ + const PaginationState({ this.items = const [], this.currentPage = 1, this.lastPage = 1, diff --git a/test/pagination/pagination_mixin_test.dart b/test/pagination/pagination_mixin_test.dart index 96b0148..f9ac881 100644 --- a/test/pagination/pagination_mixin_test.dart +++ b/test/pagination/pagination_mixin_test.dart @@ -33,7 +33,7 @@ void main() { }); test('loadNextPage emits new state with next page items when current page is less than last page', () async { - final paginationState = PaginationState(items: [1, 2, 3], currentPage: 1, lastPage: 3); + const paginationState = PaginationState(items: [1, 2, 3], currentPage: 1, lastPage: 3); cubit.emit(_TestState(paginationState)); final nextPaginationStates = ?>[]; @@ -47,7 +47,7 @@ void main() { }); test('loadNextPage does not emit new state when current page is equal to last page', () async { - final paginationState = PaginationState(items: [1, 2, 3], currentPage: 3, lastPage: 3); + const paginationState = PaginationState(items: [1, 2, 3], currentPage: 3, lastPage: 3); cubit.emit(_TestState(paginationState)); final nextPaginationStates = ?>[]; @@ -57,7 +57,7 @@ void main() { }); test('loadNextPage does not emit new state when next page items are empty', () async { - final paginationState = PaginationState(items: [1, 2, 3], currentPage: 1, lastPage: 3); + const paginationState = PaginationState(items: [1, 2, 3], currentPage: 1, lastPage: 3); cubit ..emit(_TestState(paginationState)) ..returnPages = []; @@ -88,7 +88,7 @@ class _TestState implements PaginationInterface { } class _TestCubit extends Cubit<_TestState> with PaginationMixin { - _TestCubit() : super(_TestState(PaginationState())); + _TestCubit() : super(_TestState(const PaginationState())); List returnPages = [1, 2, 3]; From cb5d94d7db0628dd2e31655ff73deb80fe906805 Mon Sep 17 00:00:00 2001 From: Job Guldemeester Date: Tue, 29 Apr 2025 14:17:23 +0200 Subject: [PATCH 2/3] :sparkles: Improved native dialog function. To also include a result when needed. --- lib/ui/native_dialog.dart | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/lib/ui/native_dialog.dart b/lib/ui/native_dialog.dart index d1c79c2..c678ee8 100644 --- a/lib/ui/native_dialog.dart +++ b/lib/ui/native_dialog.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -15,14 +17,14 @@ import 'package:flutter/material.dart'; /// ], /// ); /// ``` -void showNativeDialog( +Future showNativeDialog( BuildContext context, { required String title, - required List actions, + required List> actions, required String content, }) { if (defaultTargetPlatform == TargetPlatform.iOS) { - showCupertinoDialog( + return showCupertinoDialog( context: context, builder: (dialogContext) => CupertinoAlertDialog( @@ -32,9 +34,9 @@ void showNativeDialog( actions .map( (action) => CupertinoDialogAction( - onPressed: () { - action.onTap(); - Navigator.of(dialogContext).pop(); + onPressed: () async { + final result = await action.onTap(); + if (dialogContext.mounted) Navigator.of(dialogContext).pop(result); }, isDestructiveAction: action.isDestructiveAction, child: Text(action.text), @@ -44,7 +46,7 @@ void showNativeDialog( ), ); } else { - showDialog( + return showDialog( context: context, builder: (dialogContext) => AlertDialog( @@ -54,9 +56,9 @@ void showNativeDialog( actions .map( (action) => TextButton( - onPressed: () { - action.onTap(); - Navigator.of(dialogContext).pop(); + onPressed: () async { + final result = await action.onTap(); + if (dialogContext.mounted) Navigator.of(dialogContext).pop(result); }, child: Text(action.text), ), @@ -68,7 +70,7 @@ void showNativeDialog( } /// A dialog action which is used to show the actions of a native dialog. Tapping a action will also close the dialog. -class DialogAction { +class DialogAction { /// Creates a [DialogAction]. const DialogAction({required this.text, required this.onTap, this.isDestructiveAction = false}); @@ -76,7 +78,7 @@ class DialogAction { final String text; /// The callback that is called when the action is tapped. - final VoidCallback onTap; + final FutureOr Function() onTap; /// Whether the action is a destructive action. This is only used on iOS. final bool isDestructiveAction; From 5c2508b8e355349ee9190eb3af32ff28ee95f827 Mon Sep 17 00:00:00 2001 From: Job Guldemeester Date: Tue, 29 Apr 2025 14:19:23 +0200 Subject: [PATCH 3/3] :bookmark: Version bump --- CHANGELOG.md | 3 +++ pubspec.yaml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a073433..728fd1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## 0.0.15 +* Added `FutureOr` to `showNativeDialog` as return type; + ## 0.0.14 * Added Pagination * Added RefreshStreamMixin diff --git a/pubspec.yaml b/pubspec.yaml index 150e0bd..faffa96 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: dcc_toolkit description: "Internal toolkit package used by the DCC team." -version: 0.0.14 +version: 0.0.15 homepage: https://dutchcodingcompany.com repository: https://github.com/DutchCodingCompany/dcc_toolkit