import 'package:didvan/config/theme_data.dart'; import 'package:didvan/constants/app_icons.dart'; import 'package:didvan/models/view/action_sheet_data.dart'; // Ensure this is used or remove if not import 'package:didvan/utils/action_sheet.dart'; import 'package:didvan/views/home/bookmarks/bookmark_service.dart'; import 'package:didvan/views/widgets/didvan/text.dart'; import 'package:flutter/material.dart'; class BookmarkedIcon extends StatefulWidget { final int postId; final void Function(bool isBookmarked)? onBookmarkChanged; const BookmarkedIcon({ super.key, required this.postId, this.onBookmarkChanged, }); @override State createState() => _BookmarkedIconState(); } class _BookmarkedIconState extends State { bool _bookmarked = false; bool _loading = false; @override void initState() { super.initState(); _loadStatus(); } Future _loadStatus() async { // setState(() => _loading = true); final bookmarks = await BookmarkService.fetchBookmarks(); if (mounted) { setState(() { _bookmarked = bookmarks.contains(widget.postId); // _loading = false; }); } } Future _toggleBookmark() async { if (_loading) return; if (_bookmarked) { bool confirmAction = false; await ActionSheetUtils(context).openDialog( data: ActionSheetData( content: const DidvanText( 'آیا می‌خواهید این محتوا از نشان‌ شده‌ها حذف شود؟', ), titleIcon: DidvanIcons.bookmark_regular, titleColor: Theme.of(context).colorScheme.secondary, title: 'تایید عملیات', onConfirmed: () => confirmAction = true, ), ); if (!confirmAction) { return; } } setState(() => _loading = true); try { if (_bookmarked) { await BookmarkService.removeBookmark(widget.postId); } else { await BookmarkService.addBookmark(widget.postId); } if (mounted) { final newBookmarkStatus = !_bookmarked; setState(() { _bookmarked = newBookmarkStatus; }); widget.onBookmarkChanged?.call(newBookmarkStatus); } } catch (e) { // ignore: avoid_print print("Error toggling bookmark for post ${widget.postId}: $e"); } finally { if (mounted) { setState(() => _loading = false); } } } @override Widget build(BuildContext context) { return IconButton( onPressed: _loading ? null : _toggleBookmark, icon: Icon( _bookmarked ? DidvanIcons.bookmark_solid : DidvanIcons.bookmark_regular, color: _bookmarked ? const Color.fromARGB(255, 0, 126, 167) : Theme.of(context).colorScheme.caption, ), ); } }