diff --git a/lib/common/widgets/sidebar_communities_list.dart b/lib/common/widgets/sidebar_communities_list.dart new file mode 100644 index 00000000..f5f34f24 --- /dev/null +++ b/lib/common/widgets/sidebar_communities_list.dart @@ -0,0 +1,55 @@ +import 'package:flutter/material.dart'; +import 'package:syncrow_web/pages/spaces_management/all_spaces/model/community_model.dart'; +import 'package:syncrow_web/utils/extension/build_context_x.dart'; + +class SidebarCommunitiesList extends StatefulWidget { + const SidebarCommunitiesList({ + required this.communities, + required this.itemBuilder, + super.key, + }); + + final List communities; + final Widget Function(BuildContext context, int index) itemBuilder; + + @override + State createState() => _SidebarCommunitiesListState(); +} + +class _SidebarCommunitiesListState extends State { + late final ScrollController _scrollController; + + @override + void initState() { + _scrollController = ScrollController(); + super.initState(); + } + + @override + void dispose() { + _scrollController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: SizedBox( + width: context.screenWidth * 0.5, + child: Scrollbar( + scrollbarOrientation: ScrollbarOrientation.left, + thumbVisibility: true, + controller: _scrollController, + child: ListView.builder( + padding: const EdgeInsetsDirectional.only(start: 16), + shrinkWrap: true, + itemCount: widget.communities.length, + controller: _scrollController, + itemBuilder: widget.itemBuilder, + ), + ), + ), + ); + } +} diff --git a/lib/pages/spaces_management/all_spaces/widgets/sidebar_widget.dart b/lib/pages/spaces_management/all_spaces/widgets/sidebar_widget.dart index 6d03c0d0..9be0c746 100644 --- a/lib/pages/spaces_management/all_spaces/widgets/sidebar_widget.dart +++ b/lib/pages/spaces_management/all_spaces/widgets/sidebar_widget.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_web/common/widgets/empty_search_result_widget.dart'; import 'package:syncrow_web/common/widgets/search_bar.dart'; +import 'package:syncrow_web/common/widgets/sidebar_communities_list.dart'; import 'package:syncrow_web/pages/spaces_management/all_spaces/bloc/space_management_bloc.dart'; import 'package:syncrow_web/pages/spaces_management/all_spaces/bloc/space_management_event.dart'; import 'package:syncrow_web/pages/spaces_management/all_spaces/model/community_model.dart'; @@ -12,7 +13,6 @@ import 'package:syncrow_web/pages/spaces_management/all_spaces/widgets/space_til import 'package:syncrow_web/pages/spaces_management/create_community/view/create_community_dialog.dart'; import 'package:syncrow_web/pages/spaces_management/structure_selector/bloc/center_body_bloc.dart'; import 'package:syncrow_web/pages/spaces_management/structure_selector/bloc/center_body_event.dart'; -import 'package:syncrow_web/utils/extension/build_context_x.dart'; import 'package:syncrow_web/utils/style.dart'; class SidebarWidget extends StatefulWidget { @@ -119,29 +119,12 @@ class _SidebarWidgetState extends State { child: Visibility( visible: filteredCommunities.isNotEmpty, replacement: const EmptySearchResultWidget(), - child: ListView( - shrinkWrap: true, - scrollDirection: Axis.horizontal, - children: [ - SizedBox( - width: context.screenWidth * 0.5, - child: Scrollbar( - scrollbarOrientation: ScrollbarOrientation.left, - thumbVisibility: true, - controller: _scrollController, - child: ListView.builder( - padding: const EdgeInsetsDirectional.only(start: 16), - shrinkWrap: true, - itemCount: filteredCommunities.length, - controller: _scrollController, - itemBuilder: (context, index) => _buildCommunityTile( - context, - filteredCommunities[index], - ), - ), - ), - ), - ], + child: SidebarCommunitiesList( + communities: filteredCommunities, + itemBuilder: (context, index) => _buildCommunityTile( + context, + filteredCommunities[index], + ), ), ), ),