diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e75533..9333689 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## [3.0.0-dev.1] + +* Added null-safety support + ## [2.0.1] * Changed implementation of ListView to ListView.builder diff --git a/flutter_platform_loadable/.idea/workspace.xml b/flutter_platform_loadable/.idea/workspace.xml deleted file mode 100644 index 58734fe..0000000 --- a/flutter_platform_loadable/.idea/workspace.xml +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1585926240624 - - - 1585928035207 - - - 1585928100211 - - - - - - - - - - \ No newline at end of file diff --git a/lib/src/blocked_loadable_view.dart b/lib/src/blocked_loadable_view.dart index 771caaa..e54f8c7 100644 --- a/lib/src/blocked_loadable_view.dart +++ b/lib/src/blocked_loadable_view.dart @@ -2,11 +2,10 @@ import 'package:flutter/material.dart'; class BlockedLoadableView extends StatelessWidget { const BlockedLoadableView({ - @required this.child, - @required this.isLoading, + required this.child, + required this.isLoading, this.indicatorColor = Colors.white, - }) : assert(child != null), - assert(isLoading != null); + }); final Widget child; final bool isLoading; diff --git a/lib/src/loadable_item_view.dart b/lib/src/loadable_item_view.dart index cc7ef24..097d04a 100644 --- a/lib/src/loadable_item_view.dart +++ b/lib/src/loadable_item_view.dart @@ -3,19 +3,18 @@ import 'package:dash_kit_core/dash_kit_core.dart'; class LoadableItemView extends StatelessWidget { const LoadableItemView({ - @required this.child, - @required this.requestState, - @required this.errorWidget, + required this.child, + required this.requestState, + required this.errorWidget, this.padding, this.backgroundColor, - }) : assert(child != null), - assert(requestState != null); + }); final Widget child; final Widget errorWidget; final OperationState requestState; - final EdgeInsetsGeometry padding; - final Color backgroundColor; + final EdgeInsetsGeometry? padding; + final Color? backgroundColor; @override Widget build(BuildContext context) { @@ -45,7 +44,7 @@ class LoadableItemView extends StatelessWidget { padding: padding, color: backgroundColor ?? Colors.white, child: Center( - child: errorWidget ?? const SizedBox(), + child: errorWidget, ), ); } diff --git a/lib/src/loadable_list_view.dart b/lib/src/loadable_list_view.dart index d158552..b44da02 100644 --- a/lib/src/loadable_list_view.dart +++ b/lib/src/loadable_list_view.dart @@ -3,8 +3,8 @@ import 'package:dash_kit_core/dash_kit_core.dart'; class LoadableListView extends StatefulWidget { const LoadableListView({ - Key key, - @required this.viewModel, + Key? key, + required this.viewModel, this.scrollPhysics = const AlwaysScrollableScrollPhysics(), this.onChangeContentOffset, this.cacheExtent, @@ -12,8 +12,8 @@ class LoadableListView extends StatefulWidget { final LoadableListViewModel viewModel; final ScrollPhysics scrollPhysics; - final void Function(double offset) onChangeContentOffset; - final double cacheExtent; + final void Function(double offset)? onChangeContentOffset; + final double? cacheExtent; @override State createState() { @@ -25,13 +25,14 @@ class LoadableListViewState extends State { final ScrollController scrollController = ScrollController(); - LoadableListViewModel get viewModel => widget.viewModel; + LoadableListViewModel get viewModel => + widget.viewModel as LoadableListViewModel; @override void initState() { super.initState(); - if (viewModel?.loadList != null && viewModel.loadListRequestState.isIdle) { - viewModel?.loadList(); + if (viewModel.loadListRequestState.isIdle) { + viewModel.loadList?.call(); } scrollController.addListener(() { @@ -81,11 +82,11 @@ class LoadableListViewState } Widget buildErrorState() { - return viewModel.errorWidget ?? Container(); + return viewModel.errorWidget; } Widget buildEmptyState() { - return viewModel.emptyStateWidget ?? Container(); + return viewModel.emptyStateWidget; } Widget getLoadingWidget() { @@ -105,27 +106,24 @@ class LoadableListViewState class LoadableListViewModel { const LoadableListViewModel({ - @required this.itemBuilder, - @required this.itemSeparator, - @required this.items, - @required this.loadListRequestState, - @required this.errorWidget, - @required this.emptyStateWidget, + required this.itemBuilder, + required this.items, + required this.loadListRequestState, + required this.errorWidget, + required this.emptyStateWidget, + required this.itemSeparator, this.key, this.loadList, this.padding, - }) : assert(items != null), - assert(itemBuilder != null), - assert(itemSeparator != null), - assert(loadListRequestState != null); + }); - final Key key; + final Key? key; final Widget errorWidget; final Widget emptyStateWidget; final Widget Function(int) itemBuilder; final Widget Function(int) itemSeparator; - final VoidCallback loadList; - final EdgeInsets padding; + final VoidCallback? loadList; + final EdgeInsets? padding; final StoreList items; final OperationState loadListRequestState; diff --git a/lib/src/loadable_paginated_list_view.dart b/lib/src/loadable_paginated_list_view.dart index fec9f32..6ffa39d 100644 --- a/lib/src/loadable_paginated_list_view.dart +++ b/lib/src/loadable_paginated_list_view.dart @@ -5,11 +5,11 @@ import 'package:dash_kit_loadable/src/loadable_list_view.dart'; class LoadablePaginatedListView extends LoadableListView { const LoadablePaginatedListView({ - Key key, - @required LoadablePaginatedListViewModel viewModel, + required LoadablePaginatedListViewModel viewModel, + Key? key, ScrollPhysics scrollPhysics = const AlwaysScrollableScrollPhysics(), - double cacheExtent, - void Function(double offset) onChangeContentOffset, + double? cacheExtent, + void Function(double offset)? onChangeContentOffset, }) : super( key: key, viewModel: viewModel, @@ -27,7 +27,8 @@ class LoadablePaginatedListView class LoadablePaginatedListState extends LoadableListViewState { @override - LoadablePaginatedListViewModel get viewModel => widget.viewModel; + LoadablePaginatedListViewModel get viewModel => + widget.viewModel as LoadablePaginatedListViewModel; @override void initState() { @@ -41,7 +42,7 @@ class LoadablePaginatedListState if (scrollController.position.pixels == scrollController.position.maxScrollExtent && canLoad) { - viewModel?.loadPage(); + viewModel.loadPage?.call(); } }); } @@ -70,7 +71,7 @@ class LoadablePaginatedListState Widget _getProgressPageWidget(ScrollController scrollController) { WidgetsBinding.instance - .addPostFrameCallback((_) => scrollController.animateTo( + ?.addPostFrameCallback((_) => scrollController.animateTo( scrollController.position.maxScrollExtent, duration: const Duration(milliseconds: 100), curve: Curves.linear, @@ -84,24 +85,24 @@ class LoadablePaginatedListState } Widget _getErrorPageWidget() { - return viewModel.errorPageWidget ?? Container(); + return viewModel.errorPageWidget; } } class LoadablePaginatedListViewModel extends LoadableListViewModel { LoadablePaginatedListViewModel({ - Key key, - @required Widget errorWidget, - @required Widget emptyStateWidget, - @required Widget Function(int) itemBuilder, - @required this.paginatedList, - @required this.errorPageWidget, - VoidCallback loadList, - EdgeInsets padding, + Key? key, + required Widget errorWidget, + required Widget emptyStateWidget, + required Widget Function(int) itemBuilder, + required Widget Function(int) itemSeparator, + required this.paginatedList, + required this.errorPageWidget, + VoidCallback? loadList, + EdgeInsets? padding, this.loadPage, - }) : assert(paginatedList != null), - super( + }) : super( items: paginatedList.items, loadListRequestState: paginatedList.loadListRequestState, itemBuilder: itemBuilder, @@ -110,9 +111,10 @@ class LoadablePaginatedListViewModel emptyStateWidget: emptyStateWidget, padding: padding, key: key, + itemSeparator: itemSeparator, ); - final VoidCallback loadPage; + final VoidCallback? loadPage; final PaginatedList paginatedList; final Widget errorPageWidget; diff --git a/lib/src/loadable_view.dart b/lib/src/loadable_view.dart index b8e92d4..47688b3 100644 --- a/lib/src/loadable_view.dart +++ b/lib/src/loadable_view.dart @@ -2,19 +2,18 @@ import 'package:flutter/material.dart'; class LoadableView extends StatelessWidget { const LoadableView({ - @required this.child, - @required this.isLoading, + required this.child, + required this.isLoading, this.padding, this.backgroundColor = Colors.white, this.indicatorColor, - }) : assert(child != null), - assert(isLoading != null); + }); final Widget child; final bool isLoading; - final EdgeInsetsGeometry padding; + final EdgeInsetsGeometry? padding; final Color backgroundColor; - final Animation indicatorColor; + final Animation? indicatorColor; @override Widget build(BuildContext context) { diff --git a/pubspec.yaml b/pubspec.yaml index 1af137a..1c94f60 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,16 +1,16 @@ name: dash_kit_loadable description: Widgets for displaying different request states without additional code. -version: 2.0.1 +version: 3.0.0-dev.1 homepage: https://github.com/Dash-Kit/dash-kit-loadable environment: - sdk: ">=2.3.0 <3.0.0" + sdk: ">=2.12.0 <3.0.0" dependencies: flutter: sdk: flutter - dash_kit_core: ^2.0.1 + dash_kit_core: ^3.0.0-dev.2 dev_dependencies: flutter_test: