# FontAwesome Icon Migration Guide ## Package Added ```yaml font_awesome_flutter: ^10.7.0 ``` ## Import Statement ```dart import 'package:font_awesome_flutter/font_awesome_flutter.dart'; ``` ## Icon Mapping Reference ### Navigation Icons | Material Icon | FontAwesome Icon | Usage | |---------------|------------------|-------| | `Icons.arrow_back` | `FontAwesomeIcons.arrowLeft` | Back buttons | | `Icons.arrow_forward` | `FontAwesomeIcons.arrowRight` | Forward navigation | | `Icons.home` | `FontAwesomeIcons.house` | Home button | | `Icons.menu` | `FontAwesomeIcons.bars` | Menu/hamburger | | `Icons.close` | `FontAwesomeIcons.xmark` | Close buttons | ### Shopping & Cart Icons | Material Icon | FontAwesome Icon | Usage | |---------------|------------------|-------| | `Icons.shopping_cart` | `FontAwesomeIcons.cartShopping` | Shopping cart | | `Icons.shopping_cart_outlined` | `FontAwesomeIcons.cartShopping` | Cart outline | | `Icons.shopping_bag` | `FontAwesomeIcons.bagShopping` | Shopping bag | | `Icons.shopping_bag_outlined` | `FontAwesomeIcons.bagShopping` | Bag outline | | `Icons.add_shopping_cart` | `FontAwesomeIcons.cartPlus` | Add to cart | ### Action Icons | Material Icon | FontAwesome Icon | Usage | |---------------|------------------|-------| | `Icons.add` | `FontAwesomeIcons.plus` | Add/increment | | `Icons.remove` | `FontAwesomeIcons.minus` | Remove/decrement | | `Icons.delete` | `FontAwesomeIcons.trash` | Delete | | `Icons.delete_outline` | `FontAwesomeIcons.trashCan` | Delete outline | | `Icons.edit` | `FontAwesomeIcons.pen` | Edit | | `Icons.check` | `FontAwesomeIcons.check` | Checkmark | | `Icons.check_circle` | `FontAwesomeIcons.circleCheck` | Check circle | | `Icons.refresh` | `FontAwesomeIcons.arrowsRotate` | Refresh | ### Status & Feedback Icons | Material Icon | FontAwesome Icon | Usage | |---------------|------------------|-------| | `Icons.error` | `FontAwesomeIcons.circleXmark` | Error | | `Icons.error_outline` | `FontAwesomeIcons.circleExclamation` | Error outline | | `Icons.warning` | `FontAwesomeIcons.triangleExclamation` | Warning | | `Icons.info` | `FontAwesomeIcons.circleInfo` | Info | | `Icons.info_outline` | `FontAwesomeIcons.circleInfo` | Info outline | ### UI Elements | Material Icon | FontAwesome Icon | Usage | |---------------|------------------|-------| | `Icons.search` | `FontAwesomeIcons.magnifyingGlass` | Search | | `Icons.filter_list` | `FontAwesomeIcons.filter` | Filter | | `Icons.sort` | `FontAwesomeIcons.arrowDownAZ` | Sort | | `Icons.more_vert` | `FontAwesomeIcons.ellipsisVertical` | More options | | `Icons.more_horiz` | `FontAwesomeIcons.ellipsis` | More horizontal | ### Calendar & Time | Material Icon | FontAwesome Icon | Usage | |---------------|------------------|-------| | `Icons.calendar_today` | `FontAwesomeIcons.calendar` | Calendar | | `Icons.date_range` | `FontAwesomeIcons.calendarDays` | Date range | | `Icons.access_time` | `FontAwesomeIcons.clock` | Time | ### Payment Icons | Material Icon | FontAwesome Icon | Usage | |---------------|------------------|-------| | `Icons.payment` | `FontAwesomeIcons.creditCard` | Credit card | | `Icons.payments` | `FontAwesomeIcons.creditCard` | Payments | | `Icons.payments_outlined` | `FontAwesomeIcons.creditCard` | Payment outline | | `Icons.account_balance` | `FontAwesomeIcons.buildingColumns` | Bank | | `Icons.account_balance_outlined` | `FontAwesomeIcons.buildingColumns` | Bank outline | | `Icons.account_balance_wallet` | `FontAwesomeIcons.wallet` | Wallet | ### Media & Images | Material Icon | FontAwesome Icon | Usage | |---------------|------------------|-------| | `Icons.image` | `FontAwesomeIcons.image` | Image | | `Icons.image_not_supported` | `FontAwesomeIcons.imageSlash` | No image | | `Icons.photo_camera` | `FontAwesomeIcons.camera` | Camera | | `Icons.photo_library` | `FontAwesomeIcons.images` | Gallery | ### User & Profile | Material Icon | FontAwesome Icon | Usage | |---------------|------------------|-------| | `Icons.person` | `FontAwesomeIcons.user` | User | | `Icons.person_outline` | `FontAwesomeIcons.user` | User outline | | `Icons.account_circle` | `FontAwesomeIcons.circleUser` | Account | ### Communication | Material Icon | FontAwesome Icon | Usage | |---------------|------------------|-------| | `Icons.chat` | `FontAwesomeIcons.message` | Chat | | `Icons.chat_bubble` | `FontAwesomeIcons.commentDots` | Chat bubble | | `Icons.notifications` | `FontAwesomeIcons.bell` | Notifications | | `Icons.phone` | `FontAwesomeIcons.phone` | Phone | | `Icons.email` | `FontAwesomeIcons.envelope` | Email | ## Usage Examples ### Before (Material Icons) ```dart Icon(Icons.shopping_cart, size: 24, color: Colors.blue) Icon(Icons.add, size: 16) IconButton( icon: Icon(Icons.delete_outline), onPressed: () {}, ) ``` ### After (FontAwesome) ```dart FaIcon(FontAwesomeIcons.cartShopping, size: 24, color: Colors.blue) FaIcon(FontAwesomeIcons.plus, size: 16) IconButton( icon: FaIcon(FontAwesomeIcons.trashCan), onPressed: () {}, ) ``` ## Size Guidelines FontAwesome icons tend to be slightly larger than Material icons at the same size. Recommended adjustments: | Material Size | FontAwesome Size | Notes | |---------------|------------------|-------| | 24 (default) | 20-22 | Standard icons | | 20 | 18 | Small icons | | 16 | 14-15 | Tiny icons | | 48 | 40-44 | Large icons | | 64 | 56-60 | Extra large | ## Color Usage FontAwesome icons use the same color properties: ```dart // Both work the same Icon(Icons.add, color: AppColors.primaryBlue) FaIcon(FontAwesomeIcons.plus, color: AppColors.primaryBlue) ``` ## Common Issues & Solutions ### Issue 1: Icon Size Mismatch **Problem**: FontAwesome icons appear larger than expected **Solution**: Reduce size by 2-4 pixels ```dart // Before Icon(Icons.add, size: 24) // After FaIcon(FontAwesomeIcons.plus, size: 20) ``` ### Issue 2: Icon Alignment **Problem**: Icons not centered properly **Solution**: Use `IconTheme` or wrap in `SizedBox` ```dart SizedBox( width: 24, height: 24, child: FaIcon(FontAwesomeIcons.plus, size: 18), ) ``` ### Issue 3: Icon Not Found **Problem**: Icon name doesn't match **Solution**: Check FontAwesome documentation or use search ```dart // Use camelCase, not snake_case // ❌ FontAwesomeIcons.shopping_cart // ✅ FontAwesomeIcons.cartShopping ``` ## Migration Checklist - [x] Add `font_awesome_flutter` to pubspec.yaml - [x] Run `flutter pub get` - [ ] Update all `Icons.*` to `FontAwesomeIcons.*` - [ ] Replace `Icon()` with `FaIcon()` - [ ] Adjust icon sizes as needed - [ ] Test visual appearance - [ ] Update documentation ## Cart Feature Icon Updates ### Files to Update 1. `lib/features/cart/presentation/pages/cart_page.dart` 2. `lib/features/cart/presentation/pages/checkout_page.dart` 3. `lib/features/cart/presentation/widgets/cart_item_widget.dart` 4. `lib/features/cart/presentation/widgets/payment_method_section.dart` 5. `lib/features/cart/presentation/widgets/checkout_date_picker_field.dart` ### Specific Replacements #### cart_page.dart - `Icons.arrow_back` → `FontAwesomeIcons.arrowLeft` - `Icons.delete_outline` → `FontAwesomeIcons.trashCan` - `Icons.error_outline` → `FontAwesomeIcons.circleExclamation` - `Icons.refresh` → `FontAwesomeIcons.arrowsRotate` - `Icons.shopping_cart_outlined` → `FontAwesomeIcons.cartShopping` - `Icons.shopping_bag_outlined` → `FontAwesomeIcons.bagShopping` - `Icons.check` → `FontAwesomeIcons.check` #### cart_item_widget.dart - `Icons.image_not_supported` → `FontAwesomeIcons.imageSlash` - `Icons.remove` → `FontAwesomeIcons.minus` - `Icons.add` → `FontAwesomeIcons.plus` - `Icons.check` → `FontAwesomeIcons.check` #### payment_method_section.dart - `Icons.account_balance_outlined` → `FontAwesomeIcons.buildingColumns` - `Icons.payments_outlined` → `FontAwesomeIcons.creditCard` #### checkout_date_picker_field.dart - `Icons.calendar_today` → `FontAwesomeIcons.calendar` ## Resources - [FontAwesome Flutter Package](https://pub.dev/packages/font_awesome_flutter) - [FontAwesome Icon Gallery](https://fontawesome.com/icons) - [FontAwesome Flutter Gallery](https://github.com/fluttercommunity/font_awesome_flutter/blob/master/GALLERY.md)