birzha_mobile/lib/components/postlist.dart

80 lines
2.8 KiB
Dart

import 'package:birzha/components/indicator.dart';
import 'package:birzha/components/postBuilderFactory.dart';
import 'package:birzha/components/refreshButton.dart';
import 'package:birzha/constants.dart';
import 'package:birzha/core/adaptix/adaptix.dart';
import 'package:birzha/models/categories/category.dart';
import 'package:birzha/models/products/post.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../core/lazyload/lazyload.dart';
class PostList extends StatefulWidget {
const PostList({Key? key, required this.category, required this.fetchController, this.contentPadding, this.before = const [], this.after = const []})
: super(key: key);
final Serializer category;
final FetchController<Post> fetchController;
final EdgeInsets? contentPadding;
final List<Widget> before;
final List<Widget> after;
@override
_PostListState createState() => _PostListState();
}
class _PostListState extends State<PostList> {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider.value(
value: widget.fetchController,
child: LazyLoadView<Post>(
data: (page, context) => widget.category.getPosts(context, page),
loaderWidget: SliverFillRemaining(
child: Center(child: Indicator(size: 0.7.adaptedPx())),
),
loadMoreWidget: SliverToBoxAdapter(
child: Container(
margin: EdgeInsets.symmetric(vertical: 10.adaptedPx()),
alignment: Alignment.center,
child: Row(
children: [
Expanded(
child: Center(child: Indicator(size: 0.6.adaptedPx())),
)
],
),
),
),
before: [...widget.before],
after: [...widget.after],
fetchController: widget.fetchController,
contentPadding: widget.contentPadding ?? EdgeInsets.zero,
errorWidget: (refresh, error) {
return SliverFillRemaining(
child: Center(
child: RefreshButton(
onTap: refresh,
size: 38.adaptedPx(),
),
),
);
},
gridDelegate: widget.category.gridDelegate(context),
errorOnLoadMoreWidget: (refresh, error) {
return Container(
margin: EdgeInsets.symmetric(vertical: 10.adaptedPx()),
child: RefreshButton(
onTap: refresh,
size: 25.adaptedPx(),
),
);
},
pageFactor: AppConstants.pageLimit,
needPagination: widget.category.needPagination,
itemBuilder: (context, model, index) => PostBuilderFactory(post: model)),
);
}
}