E-Commerce Example
Browse Screen
Category browsing and product filtering.
Browse Screen
The Browse screen allows users to quickly filter categories natively built using FxGrid layouts.
Browse View Component (lib/features/browse/browse.view.dart)
import 'package:flutter/material.dart';
import 'package:fluxy/fluxy.dart';
import '../../features/home/home.controller.dart';
class BrowseView extends StatelessWidget {
final HomeController controller;
const BrowseView({super.key, required this.controller});
@override
Widget build(BuildContext context) {
return Fx(() => Fx.scaffold(
backgroundColor: Colors.transparent,
appBar: Fx.appBar(
title: 'Browse',
backgroundColor: Colors.transparent,
foregroundColor: controller.text,
elevation: 0,
centerTitle: false,
),
body: Builder(
builder: (context) {
return Fx.col(
alignItems: CrossAxisAlignment.start,
children: [
Fx.text('All Categories').tw('text-2xl font-bold px-6 py-4').color(controller.text),
FxGrid(
columns: 2,
gap: 20,
childAspectRatio: 1.1,
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
children: controller.categories.where((c) => c != 'All').map((c) {
IconData icon;
Color color;
if (c == 'Fashion') {
icon = Icons.checkroom_rounded;
color = const Color(0xFFE83A59); // Vibrant Pink/Red
} else if (c == 'Electronics') {
icon = Icons.devices_rounded;
color = const Color(0xFF2B5876); // Deep Tech Blue
} else {
icon = Icons.sensor_door_rounded;
color = const Color(0xFFE67E22); // Warm Home Orange
}
return Fx.box()
.rounded(28)
.shadowMedium()
.pointer()
.clip() // to clip the watermark icon
.bg(color)
.child(
Fx.stack(
children: [
Positioned(
right: -24,
bottom: -24,
child: Icon(icon, size: 120, color: Colors.white.withOpacity(0.15)),
),
Fx.col(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Fx.box().p(12).circle().bg(Colors.white.withOpacity(0.2)).child(Icon(icon, color: Colors.white, size: 28)),
const Spacer(),
Fx.text(c).font.xl().bold().color(Colors.white),
Fx.gap(4),
Fx.text('Explore').font.sm().color(Colors.white.withOpacity(0.9)),
],
).p(20).wFull().hFull(),
],
).wFull().hFull()
)
.onTap(() {
controller.selectedCategory.value = c;
controller.currentNavIndex.value = 0;
});
}).toList(),
).tw('px-6 pb-6'),
],
).scrollable();
}
),
));
}
}📱 Visual Examples

