import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:hiddingsel_app/appflow/model/represented_organisations.dart'; import 'package:hiddingsel_app/appflow/view/navigation_drawer.dart'; import '../../../constants/constant.dart'; import '../../controller/articles.dart'; import '../../model/articles.dart'; import '../further_pages/article.dart'; import '../widgets/card.dart'; import '../widgets/string_list.dart'; final List _organisations = RepresentedOrganisationModel.values; class OrganisationView extends StatelessWidget { final RepresentedOrganisationModel _organisation; final Function(PreferredSizeWidget appBar, Widget body)? _onChange; OrganisationView(this._organisation, this._onChange, {Key? key}) : super(key: key); @override Widget build(BuildContext context) => StreamBuilder( initialData: List.empty(), stream: ArticleController.getOrganisationArticleListStream(_organisation), builder: (context, AsyncSnapshot> snapshot) => CustomScrollView( slivers: [ SliverPersistentHeader( delegate: OrganisationSliver(_organisation), floating: true, ), SliverList( delegate: SliverChildBuilderDelegate( (context, index) => ArticleThumbnailView( (snapshot.data ?? [])[index], _onChange), childCount: snapshot.data?.length ?? 0, ), ) ], ), ); } class OrganisationSliver extends SliverPersistentHeaderDelegate { final RepresentedOrganisationModel _organisation; OrganisationSliver(this._organisation, {Key? key}); @override double get maxExtent => 550; @override double get minExtent => 550; @override bool shouldRebuild(covariant SliverPersistentHeaderDelegate oldDelegate) => true; @override Widget build(BuildContext context, double shrinkOffset, bool overlapsContent) => Container( color: UIColors.white, child: ItemWithPersonAndText.fromOrganisation(_organisation), ); } class OrganisationPagesView extends StatelessWidget with NavigationDrawerItem { @override String get title => 'Organisationen | Vereine'; final RepresentedOrganisationModel _organisation; final Function(PreferredSizeWidget appBar, Widget body)? _onChange; OrganisationPagesView(this._organisation, this._onChange); Widget build(BuildContext context) => PageView.builder( controller: PageController(initialPage: _organisations.indexOf(_organisation)), itemCount: _organisations.length, itemBuilder: (context, index) => OrganisationView(_organisations[index], _onChange), ); } class OrganisationListView extends StatelessWidget with NavigationDrawerItem { @override String get title => 'Organisationen | Vereine'; final Function(PreferredSizeWidget appBar, Widget body)? _onChange; OrganisationListView(this._onChange); @override Widget build(BuildContext context) => HiddingselMenu( _organisations.map((e) => OrganisationPagesView(e, _onChange)).toList(), _onChange, names: _organisations.map((e) => e.name).toList(), gradient: UIGradiants.yellow, ); }