birzha_mobile/lib/screens/home/homeScreen.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),
),
),
],
),
),
),
);
}
}