125 lines
3.8 KiB
Dart
125 lines
3.8 KiB
Dart
import 'dart:ui';
|
|
|
|
import 'package:birzha/components/baseWidget.dart';
|
|
import 'package:birzha/components/categoryNameWidget.dart';
|
|
import 'package:birzha/components/imagePlaceHolder.dart';
|
|
import 'package:birzha/components/postlist.dart';
|
|
import 'package:birzha/constants.dart';
|
|
import 'package:birzha/core/adaptix/adaptix.dart';
|
|
import 'package:birzha/core/lazyload/lazyload.dart';
|
|
import 'package:birzha/models/categories/home.dart';
|
|
import 'package:birzha/models/products/product.dart';
|
|
import 'package:cached_network_image/cached_network_image.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter/scheduler.dart';
|
|
|
|
class HomeScreen extends StatefulWidget {
|
|
@override
|
|
State<HomeScreen> createState() => _HomeScreenState();
|
|
}
|
|
|
|
class _HomeScreenState extends State<HomeScreen> with AutomaticKeepAliveClientMixin {
|
|
FetchController<Product> controller = FetchController<Product>();
|
|
var category = HomeCategory();
|
|
|
|
@override
|
|
void initState() {
|
|
debugPrint('HomeScreen.initState');
|
|
super.initState();
|
|
SchedulerBinding.instance?.addPostFrameCallback((timeStamp) {
|
|
controller.refresh();
|
|
});
|
|
}
|
|
|
|
@override
|
|
void dispose() {
|
|
controller.dispose();
|
|
super.dispose();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
super.build(context);
|
|
return BaseWidget(
|
|
appBar: BaseAppBar.home(
|
|
context,
|
|
() {},
|
|
),
|
|
color: Theme.of(context).backgroundColor,
|
|
body: PostList(
|
|
category: category,
|
|
before: [
|
|
SliverToBoxAdapter(
|
|
child: Padding(
|
|
padding: EdgeInsets.symmetric(
|
|
vertical: AppConstants.verticalPadding(context),
|
|
horizontal: AppConstants.horizontalPadding(context),
|
|
),
|
|
child: CategoryNameWidget(categoryName: category.name),
|
|
),
|
|
)
|
|
],
|
|
contentPadding: EdgeInsets.symmetric(horizontal: AppConstants.horizontalPadding(context)),
|
|
fetchController: controller,
|
|
),
|
|
);
|
|
}
|
|
|
|
@override
|
|
bool get wantKeepAlive => true;
|
|
}
|
|
|
|
class HomeScreenButton extends StatelessWidget {
|
|
final String? name;
|
|
final Color? color;
|
|
final void Function() onTap;
|
|
final String? iconLink;
|
|
|
|
const HomeScreenButton({
|
|
Key? key,
|
|
this.iconLink,
|
|
required this.name,
|
|
this.color,
|
|
required this.onTap,
|
|
}) : super(key: key);
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Padding(
|
|
padding: EdgeInsets.symmetric(horizontal: 10.adaptedPx(), vertical: 10.adaptedPx()),
|
|
child: InkWell(
|
|
onTap: onTap,
|
|
hoverColor: Theme.of(context).cardColor, // alternative color dividerColor;
|
|
borderRadius: BorderRadius.circular(15.adaptedPx()),
|
|
child: Container(
|
|
decoration: BoxDecoration(color: Theme.of(context).accentColor.withOpacity(0.1), borderRadius: BorderRadius.circular(10.adaptedPx())),
|
|
padding: EdgeInsets.symmetric(
|
|
horizontal: 10.adaptedPx(),
|
|
vertical: 13.2.adaptedPx(),
|
|
),
|
|
child: Row(
|
|
children: [
|
|
SizedBox(width: 13.adaptedPx()),
|
|
if (iconLink != null)
|
|
CachedNetworkImage(
|
|
height: 35.adaptedPx(),
|
|
width: 35.adaptedPx(),
|
|
imageUrl: iconLink!,
|
|
placeholder: (_, __) => AppImagePlaceholder(size: 30.adaptedPx()),
|
|
errorWidget: (_, __, ___) => AppImagePlaceholder(size: 30.adaptedPx()),
|
|
),
|
|
SizedBox(width: 15.adaptedPx()),
|
|
Expanded(
|
|
child: Text(
|
|
name!,
|
|
style: Theme.of(context).accentTextTheme.headline2!.copyWith(fontWeight: FontWeight.bold, fontSize: AppConstants.h2FontSize * 0.95),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|