Files
2026-02-13 15:53:22 +01:00

102 lines
3.3 KiB
Dart

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<RepresentedOrganisationModel> _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<ArticleModel>.empty(),
stream:
ArticleController.getOrganisationArticleListStream(_organisation),
builder: (context, AsyncSnapshot<List<ArticleModel>> 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,
);
}