102 lines
3.3 KiB
Dart
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,
|
|
);
|
|
}
|