didvan-app/lib/views/home/widgets/categories.dart

85 lines
3.3 KiB
Dart

import 'package:didvan/config/design_config.dart';
import 'package:didvan/config/theme_data.dart';
import 'package:didvan/services/app_initalizer.dart';
import 'package:didvan/services/network/request.dart';
import 'package:didvan/views/home/home_state.dart';
import 'package:didvan/views/widgets/didvan/text.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher_string.dart';
class MainCategories extends StatelessWidget {
const MainCategories({super.key});
void _onTap(String link, String label, BuildContext context) { // label را اضافه کنید
// اگر روی "آمار و داده" کلیک شد، مستقیم به تب مربوطه برود
if (label == 'آمار و داده') {
final state = context.read<HomeState>();
// فرض ما این است که صفحه آمار و داده در ایندکس 2 قرار دارد
// اگر ایندکس دیگری است، آن را تغییر دهید
const statsPageIndex = 2;
state.currentPageIndex = statsPageIndex;
state.tabController.animateTo(statsPageIndex);
return; // از ادامه اجرای کد جلوگیری می‌کند
}
if (link.startsWith('http')) {
AppInitializer.openWebLink(
context,
'$link?accessToken=${RequestService.token}',
mode: LaunchMode.inAppWebView,
);
// ignore: avoid_print
print("your goddamn token is :${RequestService.token}");
} else if (link.startsWith('tab-')) {
final state = context.read<HomeState>();
int index = int.parse(link.replaceAll('tab-', ''));
state.currentPageIndex = index;
state.tabController.animateTo(index);
} else {
Navigator.of(context).pushNamed(link);
}
}
@override
Widget build(BuildContext context) {
final state = context.read<HomeState>();
return Wrap(
alignment: WrapAlignment.start,
children: state.menuItems
.map(
(e) => GestureDetector(
onTap: () => _onTap(e.link, e.label, context), // لیبل را اینجا پاس دهید
child: SizedBox(
width: (MediaQuery.of(context).size.width) / 4,
child: Column(
children: [
Container(
width: 56,
height: 56,
padding: const EdgeInsets.all(8),
decoration: BoxDecoration(
color: Theme.of(context).colorScheme.surface,
borderRadius: DesignConfig.lowBorderRadius,
boxShadow: DesignConfig.defaultShadow,
),
child: SvgPicture.asset(e.asset),
),
const SizedBox(height: 4),
DidvanText(
e.label,
color: Theme.of(context).colorScheme.title,
style: Theme.of(context).textTheme.labelSmall,
fontWeight: FontWeight.w600,
),
const SizedBox(height: 12),
],
),
),
),
)
.toList(),
);
}
}