import 'package:flutter/material.dart'; import 'package:rasadyar_chicken/presentation/widget/app_bar.dart'; import 'package:rasadyar_chicken/presentation/widget/base_page/back_ground.dart'; import 'package:rasadyar_core/core.dart'; class ChickenBasePage extends StatefulWidget { const ChickenBasePage({ super.key, this.hasBack = true, this.hasFilter = true, this.hasSearch = true, this.isBase = false, this.hasNotification = false, this.hasNews = false, this.backId, this.onBackTap, this.onFilterTap, this.onSearchTap, this.onNewsTap, this.onNotificationTap, this.onSearchChanged, this.routes, this.routesWidget, this.widgets, this.child, this.scrollable = false, this.floatingActionButtonLocation, this.floatingActionButton, this.filteringWidget, this.backGroundWidget, this.isFullScreen = false, this.onPopScopTaped, }); //AppBar properties` final bool hasBack; final bool hasFilter; final bool hasSearch; final bool isBase; final bool isFullScreen; final bool hasNotification; final bool hasNews; final int? backId; final VoidCallback? onBackTap; final VoidCallback? onPopScopTaped; final VoidCallback? onFilterTap; final VoidCallback? onSearchTap; final VoidCallback? onNewsTap; final VoidCallback? onNotificationTap; final List? routes; final Breadcrumb? routesWidget; final List? widgets; final Widget? child; final bool scrollable; final FloatingActionButtonLocation? floatingActionButtonLocation; final Widget? floatingActionButton; final Widget? filteringWidget; final void Function(String?)? onSearchChanged; final BackGroundWidget? backGroundWidget; @override State createState() => _ChickenBasePageState(); } class _ChickenBasePageState extends State { int? _lastBackId; @override void initState() { super.initState(); _lastBackId = widget.backId; tLog(_lastBackId); tLog(widget.backId); } @override void didChangeDependencies() { fLog('didChangeDependencies'); fLog(_lastBackId); fLog(widget.backId); super.didChangeDependencies(); } @override void didUpdateWidget(covariant ChickenBasePage oldWidget) { dLog('didUpdateWidget'); dLog(_lastBackId); dLog(widget.backId); super.didUpdateWidget(oldWidget); } void _onFilterTap() { if (widget.hasFilter && widget.filteringWidget != null) { final currentRoute = ModalRoute.of(Get.context!); if (currentRoute?.isCurrent != true) return; Get.bottomSheet( widget.filteringWidget!, isScrollControlled: true, isDismissible: true, enableDrag: true, ); } } @override Widget build(BuildContext context) { return PopScope( canPop: false, onPopInvokedWithResult: (didPop, result) { iLog('PopScope onPopInvokedWithResult:==> ${widget.backId}'); iLog('PopScope onPopInvokedWithResult:==> $_lastBackId}'); iLog('PopScope onPopInvokedWithResult:==> ${widget.onPopScopTaped}'); iLog('PopScope onPopInvokedWithResult:==> ${widget.onBackTap}'); // چک کردن و مدیریت برگشت با backId if (widget.backId != null) { final navigatorState = Get.nestedKey(widget.backId!)?.currentState; if (navigatorState != null && navigatorState.canPop()) { Get.back(id: widget.backId!); // پاپ با استفاده از backId } else { // اگر هیچ صفحه‌ای برای پاپ موجود نیست if (widget.onPopScopTaped != null) { widget.onPopScopTaped!(); } else { Get.back(); } } } else { // اگر backId نداشته باشد if (widget.onPopScopTaped != null) { widget.onPopScopTaped!(); } else { Get.back(); } } }, child: BasePage( routes: widget.routes, routesWidget: widget.routesWidget, widgets: widget.widgets, child: widget.child, scrollable: widget.scrollable, floatingActionButtonLocation: widget.floatingActionButtonLocation, floatingActionButton: widget.floatingActionButton, backGroundWidget: widget.backGroundWidget ?? chickenBackground(), appBar: widget.isFullScreen ? null : chickenAppBar( isBase: widget.isBase, hasBack: widget.isBase ? false : widget.hasBack, onNewsTap: widget.onNewsTap, hasFilter: widget.hasFilter, hasSearch: widget.hasSearch, hasNews: widget.hasNews, backId: widget.backId, onBackTap: widget.onBackTap, hasNotification: widget.hasNotification, onNotificationTap: widget.onNotificationTap, onFilterTap: widget.hasFilter ? _onFilterTap : null, //onSearchTap: widget.hasSearch ? controller.toggleSearch : null, ), ), ); } }