From 217de49fd4762a3cbfe9716f5187257b9aa561f2 Mon Sep 17 00:00:00 2001 From: Anton Stubenbord Date: Mon, 29 May 2023 18:12:22 +0200 Subject: [PATCH] fix: Label list not updated --- .../labels/view/pages/labels_page.dart | 278 +++++++++--------- 1 file changed, 144 insertions(+), 134 deletions(-) diff --git a/lib/features/labels/view/pages/labels_page.dart b/lib/features/labels/view/pages/labels_page.dart index 3d385cc..ecabc9d 100644 --- a/lib/features/labels/view/pages/labels_page.dart +++ b/lib/features/labels/view/pages/labels_page.dart @@ -108,143 +108,153 @@ class _LabelsPageState extends State with SingleTickerProviderStateM ), ), ], - body: NotificationListener( - onNotification: (notification) { - final metrics = notification.metrics; - if (metrics.maxScrollExtent == 0) { - return true; - } - final desiredTab = - ((metrics.pixels / metrics.maxScrollExtent) * (_tabController.length - 1)) + body: BlocBuilder( + builder: (context, state) { + return NotificationListener( + onNotification: (notification) { + final metrics = notification.metrics; + if (metrics.maxScrollExtent == 0) { + return true; + } + final desiredTab = ((metrics.pixels / metrics.maxScrollExtent) * + (_tabController.length - 1)) .round(); - if (metrics.axis == Axis.horizontal && _currentIndex != desiredTab) { - setState(() => _currentIndex = desiredTab); - } - return true; + if (metrics.axis == Axis.horizontal && _currentIndex != desiredTab) { + setState(() => _currentIndex = desiredTab); + } + return true; + }, + child: RefreshIndicator( + edgeOffset: kTextTabBarHeight, + notificationPredicate: (notification) => connectedState.isConnected, + onRefresh: () => [ + context.read().reloadCorrespondents, + context.read().reloadDocumentTypes, + context.read().reloadTags, + context.read().reloadStoragePaths, + ][_currentIndex] + .call(), + child: TabBarView( + controller: _tabController, + children: [ + Builder( + builder: (context) { + return CustomScrollView( + slivers: [ + SliverOverlapInjector(handle: searchBarHandle), + SliverOverlapInjector(handle: tabBarHandle), + LabelTabView( + labels: state.correspondents, + filterBuilder: (label) => DocumentFilter( + correspondent: IdQueryParameter.fromId(label.id!), + ), + canEdit: LocalUserAccount.current.paperlessUser.hasPermission( + PermissionAction.change, PermissionTarget.correspondent), + canAddNew: LocalUserAccount.current.paperlessUser + .hasPermission( + PermissionAction.add, PermissionTarget.correspondent), + onEdit: _openEditCorrespondentPage, + emptyStateActionButtonLabel: + S.of(context)!.addNewCorrespondent, + emptyStateDescription: S.of(context)!.noCorrespondentsSetUp, + onAddNew: _openAddCorrespondentPage, + ), + ], + ); + }, + ), + Builder( + builder: (context) { + return CustomScrollView( + slivers: [ + SliverOverlapInjector(handle: searchBarHandle), + SliverOverlapInjector(handle: tabBarHandle), + LabelTabView( + labels: state.documentTypes, + filterBuilder: (label) => DocumentFilter( + documentType: IdQueryParameter.fromId(label.id!), + ), + canEdit: LocalUserAccount.current.paperlessUser.hasPermission( + PermissionAction.change, PermissionTarget.documentType), + canAddNew: LocalUserAccount.current.paperlessUser + .hasPermission( + PermissionAction.add, PermissionTarget.documentType), + onEdit: _openEditDocumentTypePage, + emptyStateActionButtonLabel: + S.of(context)!.addNewDocumentType, + emptyStateDescription: S.of(context)!.noDocumentTypesSetUp, + onAddNew: _openAddDocumentTypePage, + ), + ], + ); + }, + ), + Builder( + builder: (context) { + return CustomScrollView( + slivers: [ + SliverOverlapInjector(handle: searchBarHandle), + SliverOverlapInjector(handle: tabBarHandle), + LabelTabView( + labels: state.tags, + filterBuilder: (label) => DocumentFilter( + tags: TagsQuery.ids(include: [label.id!]), + ), + canEdit: LocalUserAccount.current.paperlessUser.hasPermission( + PermissionAction.change, PermissionTarget.tag), + canAddNew: LocalUserAccount.current.paperlessUser + .hasPermission( + PermissionAction.add, PermissionTarget.tag), + onEdit: _openEditTagPage, + leadingBuilder: (t) => CircleAvatar( + backgroundColor: t.color, + child: t.isInboxTag + ? Icon( + Icons.inbox, + color: t.textColor, + ) + : null, + ), + emptyStateActionButtonLabel: S.of(context)!.addNewTag, + emptyStateDescription: S.of(context)!.noTagsSetUp, + onAddNew: _openAddTagPage, + ), + ], + ); + }, + ), + Builder( + builder: (context) { + return CustomScrollView( + slivers: [ + SliverOverlapInjector(handle: searchBarHandle), + SliverOverlapInjector(handle: tabBarHandle), + LabelTabView( + labels: state.storagePaths, + onEdit: _openEditStoragePathPage, + filterBuilder: (label) => DocumentFilter( + storagePath: IdQueryParameter.fromId(label.id!), + ), + canEdit: LocalUserAccount.current.paperlessUser.hasPermission( + PermissionAction.change, PermissionTarget.storagePath), + canAddNew: LocalUserAccount.current.paperlessUser + .hasPermission( + PermissionAction.add, PermissionTarget.storagePath), + contentBuilder: (path) => Text(path.path), + emptyStateActionButtonLabel: S.of(context)!.addNewStoragePath, + emptyStateDescription: S.of(context)!.noStoragePathsSetUp, + onAddNew: _openAddStoragePathPage, + ), + ], + ); + }, + ), + ], + ), + ), + ); }, - child: RefreshIndicator( - edgeOffset: kTextTabBarHeight, - notificationPredicate: (notification) => connectedState.isConnected, - onRefresh: () => [ - context.read().reloadCorrespondents, - context.read().reloadDocumentTypes, - context.read().reloadTags, - context.read().reloadStoragePaths, - ][_currentIndex] - .call(), - child: TabBarView( - controller: _tabController, - children: [ - Builder( - builder: (context) { - return CustomScrollView( - slivers: [ - SliverOverlapInjector(handle: searchBarHandle), - SliverOverlapInjector(handle: tabBarHandle), - LabelTabView( - labels: context.watch().state.correspondents, - filterBuilder: (label) => DocumentFilter( - correspondent: IdQueryParameter.fromId(label.id!), - ), - canEdit: LocalUserAccount.current.paperlessUser.hasPermission( - PermissionAction.change, PermissionTarget.correspondent), - canAddNew: LocalUserAccount.current.paperlessUser.hasPermission( - PermissionAction.add, PermissionTarget.correspondent), - onEdit: _openEditCorrespondentPage, - emptyStateActionButtonLabel: S.of(context)!.addNewCorrespondent, - emptyStateDescription: S.of(context)!.noCorrespondentsSetUp, - onAddNew: _openAddCorrespondentPage, - ), - ], - ); - }, - ), - Builder( - builder: (context) { - return CustomScrollView( - slivers: [ - SliverOverlapInjector(handle: searchBarHandle), - SliverOverlapInjector(handle: tabBarHandle), - LabelTabView( - labels: context.watch().state.documentTypes, - filterBuilder: (label) => DocumentFilter( - documentType: IdQueryParameter.fromId(label.id!), - ), - canEdit: LocalUserAccount.current.paperlessUser.hasPermission( - PermissionAction.change, PermissionTarget.documentType), - canAddNew: LocalUserAccount.current.paperlessUser.hasPermission( - PermissionAction.add, PermissionTarget.documentType), - onEdit: _openEditDocumentTypePage, - emptyStateActionButtonLabel: S.of(context)!.addNewDocumentType, - emptyStateDescription: S.of(context)!.noDocumentTypesSetUp, - onAddNew: _openAddDocumentTypePage, - ), - ], - ); - }, - ), - Builder( - builder: (context) { - return CustomScrollView( - slivers: [ - SliverOverlapInjector(handle: searchBarHandle), - SliverOverlapInjector(handle: tabBarHandle), - LabelTabView( - labels: context.watch().state.tags, - filterBuilder: (label) => DocumentFilter( - tags: TagsQuery.ids(include: [label.id!]), - ), - canEdit: LocalUserAccount.current.paperlessUser - .hasPermission(PermissionAction.change, PermissionTarget.tag), - canAddNew: LocalUserAccount.current.paperlessUser - .hasPermission(PermissionAction.add, PermissionTarget.tag), - onEdit: _openEditTagPage, - leadingBuilder: (t) => CircleAvatar( - backgroundColor: t.color, - child: t.isInboxTag - ? Icon( - Icons.inbox, - color: t.textColor, - ) - : null, - ), - emptyStateActionButtonLabel: S.of(context)!.addNewTag, - emptyStateDescription: S.of(context)!.noTagsSetUp, - onAddNew: _openAddTagPage, - ), - ], - ); - }, - ), - Builder( - builder: (context) { - return CustomScrollView( - slivers: [ - SliverOverlapInjector(handle: searchBarHandle), - SliverOverlapInjector(handle: tabBarHandle), - LabelTabView( - labels: context.watch().state.storagePaths, - onEdit: _openEditStoragePathPage, - filterBuilder: (label) => DocumentFilter( - storagePath: IdQueryParameter.fromId(label.id!), - ), - canEdit: LocalUserAccount.current.paperlessUser.hasPermission( - PermissionAction.change, PermissionTarget.storagePath), - canAddNew: LocalUserAccount.current.paperlessUser.hasPermission( - PermissionAction.add, PermissionTarget.storagePath), - contentBuilder: (path) => Text(path.path), - emptyStateActionButtonLabel: S.of(context)!.addNewStoragePath, - emptyStateDescription: S.of(context)!.noStoragePathsSetUp, - onAddNew: _openAddStoragePathPage, - ), - ], - ); - }, - ), - ], - ), - ), ), ), ),