# ๐Ÿ“ฑ APP ้กต้ข็ป“ๆž„ๅˆ†ๆž > ๅˆ›ๅปบ: 2026-04-13 | ็”จ้€”: ้กต้ข็ป“ๆž„ๅฏ่ง†ๅŒ– + ่ทณ่ฝฌๅ…ณ็ณป + ็พŽ่ง‚/ๅŠŸ่ƒฝ้—ฎ้ข˜ๅˆ†ๆž + ๆ”น่ฟ›ๅปบ่ฎฎ > ่ทณ่ฝฌๅ›พไพ‹: `[โ†’ ้กต้ขๅ]` = Get.toNamed่ทณ่ฝฌ, `[โ‡ฅ Tabๅˆ‡ๆข]` = ๅบ•้ƒจTabๅˆ‡ๆข, `[โ†‘ ่ฟ”ๅ›ž]` = Get.back/Get.until --- ## ๐Ÿ—๏ธ ๅ…จๅฑ€ๅฏผ่ˆชๅ›พ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ MainTabView โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ‡ฅ โ‡ฅ โ‡ฅ โ‡ฅ โ”Œโ”€โ”€โ”€โ”ดโ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”ดโ”€โ”€โ” โ”Œโ”€โ”ดโ”€โ”€โ” โ”Œโ”€โ”€โ”ดโ”€โ”€โ” โ”‚๐Ÿ ้ฆ–้กตโ”‚ โ”‚๐Ÿ”ๅ‘็Žฐโ”‚ โ”‚๐Ÿ› ๏ธๅทฅๅ…ทโ”‚ โ”‚๐Ÿ‘คๆˆ‘็š„โ”‚ โ””โ”€โ”€โ”ฌโ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”ฌโ”€โ”€โ”€โ”˜ โ””โ”€โ”ฌโ”€โ”€โ”˜ โ””โ”€โ”€โ”ฌโ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ†“ โ†“ โ†“ โ†“ โ†“ โ†“ [โ†’ๆœ็ดข] [โ†’่ฏฆๆƒ…] [โ†’ๅˆ†็ฑป] [โ†’่ฎกๆ—ถ] [โ†’ๆ”ถ่—] [โ†’ๆ•ฐๆฎ] [โ†’่ฏฆๆƒ…] [โ†’ๆ ‡็ญพ] [โ†’ๆ ‡็ญพ] [โ†’ๆข็ฎ—] [โ†’่ถณ่ฟน] [โ†’่ฅๅ…ป] [โ†’ๅˆ†็ฑป] [โ†’็ƒญ้—จ] [โ†’ๅƒไป€ไนˆ] [โ†’BMI] [โ†’็ฌ”่ฎฐ] [โ†’่ฎพ็ฝฎ] [โ†’ๆ ‡็ญพ] [โ†’ๆœ็ดข] [โ†’็ผฉๆ”พ] [โ†’่ดญ็‰ฉ] [โ†’ๅ้ฆˆ] [โ†’้ซ˜็บง] [โ†’่ฏฆๆƒ…] [โ†’่ฟ‡ๆ•] [โ†’่Šๅคฉ] [โ†’ๅฐฑๅฏ] [โ†’ๆ—ถๆฎต] [โ†’้ฃŸๆ] [โ†’่œๅ•] ``` --- ## ๐Ÿ  ้ฆ–้กต (HomePage) ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ HomeAppBar (ๅŒๅฑ‚) โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿณ ๅฐๅฆˆๅŽจๆˆฟ ๐Ÿ”” โ”‚ โ”‚ โ† ๅ›บๅฎš้กถๆ  โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ” ๆœ็ดขๆก† [โ†’ๆœ็ดข้กต] โ”‚ โ”‚ โ† ๅฏๆŠ˜ๅ ๅ‰ฏๆ ๏ผŒ็‚นๅ‡ป่ทณ่ฝฌ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ“Š ่ฅๅ…ป่ฟฝ่ธชไปช่กจ็›˜ โ”‚ โ”‚ โ† NutritionDashboardCard โ”‚ โ”‚ ็ƒญ้‡/่›‹็™ฝ่ดจ/็ขณๆฐด/่„‚่‚ช โ”‚ โ”‚ [โ†’่ฅๅ…ปไธญๅฟƒ้กต] โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ” โ”Œโ”€โ”€โ” โ”Œโ”€โ”€โ” โ”Œโ”€โ”€โ” โ”‚ โ”‚ โ”‚๐Ÿ“–โ”‚ โ”‚๐Ÿฅฌโ”‚ โ”‚๐Ÿ“‚โ”‚ โ”‚๐Ÿ‘…โ”‚ โ”‚ โ† Discover็€‘ๅธƒๆต โ”‚ โ”‚่œโ”‚ โ”‚้ฃŸโ”‚ โ”‚ๅˆ†โ”‚ โ”‚ๆ ‡โ”‚ โ”‚ (MasonryGridView 2ๅˆ—) โ”‚ โ”‚ๅ“โ”‚ โ”‚ๆโ”‚ โ”‚็ฑปโ”‚ โ”‚็ญพโ”‚ โ”‚ โ”‚ โ”‚ โ†“โ”‚ โ”‚ โ†“โ”‚ โ”‚ โ†“โ”‚ โ”‚ โ†“โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”˜ โ””โ”€โ”€โ”˜ โ””โ”€โ”€โ”˜ โ””โ”€โ”€โ”˜ โ”‚ โ”‚ โ”Œโ”€โ”€โ” โ”Œโ”€โ”€โ” โ”‚ โ”‚ โ”‚๐Ÿณโ”‚ โ”‚๐Ÿ•โ”‚ โ”‚ โ”‚ โ”‚ๅทฅโ”‚ โ”‚ๆ—ถโ”‚ โ”‚ โ”‚ โ”‚่‰บโ”‚ โ”‚ๆฎตโ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”˜ โ””โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ ๐Ÿ”„ ๅˆทๆ–ฐๅŠ ่ฝฝๆ›ดๅคš 35/80 โ”‚ โ”‚ โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘โ–‘ โ”‚ โ† ่ฟ›ๅบฆๆก โ”‚ ๆœ€ๅŽๆ›ดๆ–ฐ: 5ๅˆ†้’Ÿๅ‰ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### ๏ฟฝ ้กต้ข่ง†ๅ›พๆ–‡ไปถ - `lib/src/pages/home/home_page.dart`๏ผˆไธป้กต้ข๏ผ‰ - `lib/src/pages/home/home_recommended.dart`๏ผˆ็€‘ๅธƒๆตๆŽจ่๏ผ‰ ### ๏ฟฝ ่ทณ่ฝฌๅ…ณ็ณป | ่งฆๅ‘ๅ…ƒ็ด  | ่ทณ่ฝฌๆ–นๅผ | ็›ฎๆ ‡้กต้ข | ่ทฏ็”ฑ | ไผ ๅ‚ | |---------|---------|---------|------|------| | ๆœ็ดขๆก† | `Get.toNamed` | ๆœ็ดข้กต | `/search` | keyword | | ่œๅ“ๅก็‰‡ | `Get.toNamed` | ่œๅ“่ฏฆๆƒ…้กต | `/recipe-detail` | id | | ้ฃŸๆๅก็‰‡ | `Get.toNamed` | ๆœ็ดข้กต | `/search` | keyword=้ฃŸๆๅ | | ๅˆ†็ฑปๅก็‰‡ | `Get.toNamed` | ๅˆ†็ฑปๆต่งˆ้กต | `/category-browse` | category, title | | ๅฃๅ‘ณๆ ‡็ญพ | `Get.toNamed` | ๆ ‡็ญพ่œ่ฐฑๅˆ—่กจ | `/tag-recipe-list` | tagName, tagId, tagType=taste | | ๅทฅ่‰บๆ ‡็ญพ | `Get.toNamed` | ๆ ‡็ญพ่œ่ฐฑๅˆ—่กจ | `/tag-recipe-list` | tagName, tagId, tagType=cooking | | ๆ—ถๆฎตๅก็‰‡ | `Get.toNamed` | ๆœ็ดข้กต | `/search` | keyword=ๆ—ถๆฎตๅ | | ่ฅๅ…ปไปช่กจ็›˜ | `Get.toNamed` | ่ฅๅ…ปไธญๅฟƒ | `/nutrition` | - | ### ๐ŸŽจ ็พŽ่ง‚้—ฎ้ข˜ | # | ้—ฎ้ข˜ | ไธฅ้‡ๅบฆ | ๅปบ่ฎฎ | |---|------|--------|------| | 1 | ่ฅๅ…ปไปช่กจ็›˜ไธŽ็€‘ๅธƒๆต้ฃŽๆ ผไธ็ปŸไธ€๏ผŒไปช่กจ็›˜ๅMaterial้ฃŽๆ ผ | ๐ŸŸกไธญ | ็ปŸไธ€ไธบLiquid Glassๅก็‰‡้ฃŽๆ ผ | | 2 | ็€‘ๅธƒๆตๅก็‰‡้—ด่ทไธๅคŸ็ฒพ่‡ด๏ผŒ้ƒจๅˆ†ๅก็‰‡้ซ˜ๅบฆๅทฎๅผ‚่ฟ‡ๅคง | ๐ŸŸกไธญ | ่ฐƒๆ•ดMasonryGridView crossAxisSpacing/mainAxisSpacing | | 3 | ๆœ็ดขๆก†ๆŠ˜ๅ ๅŠจ็”ปไธŽๆปšๅŠจไธๅคŸไธๆป‘ | ๐ŸŸขไฝŽ | ไฝฟ็”จAnimationControllerๆ›ฟไปฃAnimatedSlide | | 4 | ๅบ•้ƒจๅˆทๆ–ฐๆŒ‰้’ฎๅŒบๅŸŸ่ง†่ง‰่ฟ‡้‡๏ผŒๅ ็”จ็ฉบ้—ดๅคง | ๐ŸŸกไธญ | ็ฒพ็ฎ€ไธบๅฐๆŒ‰้’ฎ+่ฟ›ๅบฆๆ–‡ๅญ— | ### โšก ๅŠŸ่ƒฝ็ผบๅคฑ | # | ๅŠŸ่ƒฝ | ไผ˜ๅ…ˆ็บง | ่ฏดๆ˜Ž | |---|------|--------|------| | 1 | ไธ‹ๆ‹‰ๅˆทๆ–ฐ | P2 | ๅฝ“ๅ‰ๅชๆœ‰ๅบ•้ƒจๅˆทๆ–ฐๆŒ‰้’ฎ๏ผŒ็ผบๅฐ‘ไธ‹ๆ‹‰ๆ‰‹ๅŠฟ | | 2 | ไธชๆ€งๅŒ–ๆŽจ่ | P3 | ็€‘ๅธƒๆตไธบ้šๆœบๆ•ฐๆฎ๏ผŒๆœชๅŸบไบŽ็”จๆˆทๅๅฅฝ | | 3 | ๅก็‰‡้•ฟๆŒ‰่œๅ• | P3 | ้•ฟๆŒ‰ๅก็‰‡ๅฏๆ”ถ่—/ๅˆ†ไบซ/ไธๆ„Ÿๅ…ด่ถฃ | --- ## ๐Ÿ” ๅ‘็Žฐ้กต (DiscoverPage) ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๅ‘็Žฐ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ” ๆœ็ดขๆก† [โ†’ๆœ็ดข้กต] โ”‚ โ”‚ โ† GlassSearchBar๏ผŒ็‚นๅ‡ป่ทณ่ฝฌ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚๐Ÿ“–ๆŽจ่โ”‚๐Ÿ”ฅ็ƒญ้—จโ”‚๐ŸŽฒๅƒไป€ไนˆ โ”‚ โ”‚ โ† GlassSegmentedControl โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”€โ”€ ๆŽจ่ Tab โ”€โ”€ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚๐Ÿ“–่œ่ฐฑโ”‚๐Ÿฅฌ้ฃŸๆโ”‚๐Ÿ‘…ๅฃๅ‘ณโ”‚๐Ÿณๅทฅ่‰บโ”‚ โ”‚ โ† 4ๆฎตๅญๅˆ†็ฑป โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”Œโ”€โ”€โ” โ”Œโ”€โ”€โ” โ”Œโ”€โ”€โ” โ”‚ โ”‚ โ”‚ๅˆ†็ฑปโ”‚ โ”‚ๅˆ†็ฑปโ”‚ โ”‚ๅˆ†็ฑปโ”‚ โ”‚ โ† ๅˆ†็ฑป/ๆ ‡็ญพ็ฝ‘ๆ ผ โ”‚ โ”‚ โ†“โ”‚ โ”‚ โ†“โ”‚ โ”‚ โ†“โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”˜ โ””โ”€โ”€โ”˜ โ””โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”€โ”€ ็ƒญ้—จ Tab โ”€โ”€ โ”‚ โ”‚ [โ†’็ƒญ้—จๆŽ’่กŒ้กต] โ”‚ โ† ๅตŒๅ…ฅHotPage โ”‚ โ”‚ โ”‚ โ”€โ”€ ไปŠๅคฉๅƒไป€ไนˆ Tab โ”€โ”€ โ”‚ โ”‚ [โ†’ไปŠๅคฉๅƒไป€ไนˆ้กต] โ”‚ โ† ๅตŒๅ…ฅWhatToEatPage โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### ๐Ÿ“„ ้กต้ข่ง†ๅ›พๆ–‡ไปถ - `lib/src/pages/discover/discover_page.dart`๏ผˆไธป้กต้ข๏ผ‰ - `lib/src/pages/discover/hot_page.dart`๏ผˆ็ƒญ้—จๆŽ’่กŒTab๏ผ‰ ### ๐Ÿ”— ่ทณ่ฝฌๅ…ณ็ณป | ่งฆๅ‘ๅ…ƒ็ด  | ่ทณ่ฝฌๆ–นๅผ | ็›ฎๆ ‡้กต้ข | ่ทฏ็”ฑ | ไผ ๅ‚ | |---------|---------|---------|------|------| | ๆœ็ดขๆก† | `Get.toNamed` | ๆœ็ดข้กต | `/search` | - | | ่œ่ฐฑๅˆ†็ฑปๅก็‰‡ | `Get.toNamed` | ๅˆ†็ฑปๆต่งˆ้กต | `/category-browse` | category, title | | ้ฃŸๆๅˆ†็ฑปๅก็‰‡ | `Get.toNamed` | ๅˆ†็ฑปๆต่งˆ้กต | `/category-browse` | category, title, isIngredient=true | | ๅฃๅ‘ณๆ ‡็ญพ | `Get.toNamed` | ๆ ‡็ญพ่œ่ฐฑๅˆ—่กจ | `/tag-recipe-list` | tagName, tagId, tagType=taste | | ๅทฅ่‰บๆ ‡็ญพ | `Get.toNamed` | ๆ ‡็ญพ่œ่ฐฑๅˆ—่กจ | `/tag-recipe-list` | tagName, tagId, tagType=cooking | | ็ƒญ้—จTab | ๅตŒๅ…ฅ้กต้ข | ็ƒญ้—จๆŽ’่กŒ้กต | `/hot` | - | | ๅƒไป€ไนˆTab | ๅตŒๅ…ฅ้กต้ข | ไปŠๅคฉๅƒไป€ไนˆ | `/what-to-eat` | - | | ็ƒญ้—จ่œ่ฐฑๅก็‰‡ | `Get.toNamed` | ่œๅ“่ฏฆๆƒ…้กต | `/recipe-detail` | id | ### ๐ŸŽจ ็พŽ่ง‚้—ฎ้ข˜ | # | ้—ฎ้ข˜ | ไธฅ้‡ๅบฆ | ๅปบ่ฎฎ | |---|------|--------|------| | 1 | ๆŽจ่4ๆฎตๅญๅˆ†็ฑป(่œ่ฐฑ/้ฃŸๆ/ๅฃๅ‘ณ/ๅทฅ่‰บ)ๅˆ‡ๆขๆ— ่ฟ‡ๆธกๅŠจ็”ป | ๐ŸŸกไธญ | ๆทปๅŠ AnimatedSwitcherๆˆ–PageView | | 2 | ๅˆ†็ฑป็ฝ‘ๆ ผๅก็‰‡ๆ ทๅผๅ•่ฐƒ๏ผŒ็ผบๅฐ‘ๅ›พๆ ‡/ๅฐ้ขๅ›พ | ๐ŸŸกไธญ | ๅˆ†็ฑปๅก็‰‡ๅขžๅŠ emojiๅ›พๆ ‡ๆˆ–ๆธๅ˜่‰ฒ่ƒŒๆ™ฏ | | 3 | ็ƒญ้—จๆŽ’่กŒๆฆœๅˆ—่กจ้กน้—ด่ท่ฟ‡ๅฏ† | ๐ŸŸขไฝŽ | ๅขžๅŠ ๅˆ—่กจ้กน้—ด่ท | | 4 | "ไปŠๅคฉๅƒไป€ไนˆ"้กต้ข่ง†่ง‰ๅ†ฒๅ‡ปๅŠ›ไธ่ถณ | ๐ŸŸกไธญ | ๅคงๅก็‰‡+ๅŠจ็”ป็ฟป่ฝฌๆ•ˆๆžœ | ### โšก ๅŠŸ่ƒฝ็ผบๅคฑ | # | ๅŠŸ่ƒฝ | ไผ˜ๅ…ˆ็บง | ่ฏดๆ˜Ž | |---|------|--------|------| | 1 | ๆœ็ดขๅކๅฒ | P2 | ๆœ็ดขๆก†็‚นๅ‡ปๅŽๆ— ๅކๅฒ่ฎฐๅฝ•ๅฑ•็คบ | | 2 | ็ƒญ้—จๆŽ’่กŒๆฆœๅˆ†ๆ—ถๆฎต | P3 | ๆ—ฅๆฆœ/ๅ‘จๆฆœ/ๆœˆๆฆœๅˆ‡ๆข | | 3 | ไปŠๅคฉๅƒไป€ไนˆ็ญ›้€‰ๆกไปถ | P2 | ๅฏๆŒ‰ๅฃๅ‘ณ/้šพๅบฆ/ๆ—ถ้—ด็ญ›้€‰้šๆœบๆŽจ่ | --- ## ๐Ÿ” ๆœ็ดข้กต (SearchPage) ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ† [โ†‘่ฟ”ๅ›ž] ๐Ÿ” ๆœ็ดขๆก† โš™๏ธ โ”‚ โ† โš™๏ธ [โ†’้ซ˜็บงๆœ็ดข้กต] โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”‚ โ”‚ โ”€โ”€ ็ฉบ็Šถๆ€ โ”€โ”€ โ”‚ โ”‚ ๐Ÿ”ฅ ็ƒญ้—จๆœ็ดข โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”โ”Œโ”€โ”€โ”€โ”€โ”โ”Œโ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚็บข็ƒง่‚‰โ”‚โ”‚้ธกๆฑคโ”‚โ”‚่›‹็ณ•โ”‚ โ”‚ โ† ็‚นๅ‡ป [โ†’ๆœ็ดข้กต] ่‡ชๅŠจๆœ็ดข โ”‚ โ””โ”€โ”€โ”€โ”€โ”˜โ””โ”€โ”€โ”€โ”€โ”˜โ””โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”€โ”€ ๆœ็ดข็ป“ๆžœ โ”€โ”€ โ”‚ โ”‚ ๐Ÿ“–่œ่ฐฑ(5)โ”‚๐Ÿฅฌ้ฃŸๆ(3)โ”‚๐Ÿ‘…ๅฃๅ‘ณโ”‚ โ† ๅŠจๆ€Tab โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ–ผ๏ธ ็บข็ƒง่‚‰ โ”‚ โ”‚ โ† ่œ่ฐฑๅก็‰‡ [โ†’่ฏฆๆƒ…้กต] โ”‚ โ”‚ โญ4.5 ๐Ÿ‘๏ธ1.2k โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿฅฌ ้ธก่›‹ ๅˆ†็ฑป:่›‹็ฑป โ”‚ โ”‚ โ† ้ฃŸๆๅก็‰‡ [โ†’้ฃŸๆ่ฏฆๆƒ…] โ”‚ โ”‚ ๐Ÿ“– 128ไธช่œ่ฐฑ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ‘… ๅ’ธ้ฒœ 56้“่œ่ฐฑ โ”‚ โ”‚ โ† ๆ ‡็ญพๅก็‰‡ [โ†’ๆ ‡็ญพๅˆ—่กจ] โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### ๏ฟฝ ้กต้ข่ง†ๅ›พๆ–‡ไปถ - `lib/src/pages/home/search_page.dart`๏ผˆไธป้กต้ข๏ผ‰ - `lib/src/controllers/search_controller.dart`๏ผˆๆœ็ดขๆŽงๅˆถๅ™จ๏ผ‰ ### ๏ฟฝ ่ทณ่ฝฌๅ…ณ็ณป | ่งฆๅ‘ๅ…ƒ็ด  | ่ทณ่ฝฌๆ–นๅผ | ็›ฎๆ ‡้กต้ข | ่ทฏ็”ฑ | ไผ ๅ‚ | |---------|---------|---------|------|------| | โ† ่ฟ”ๅ›ž | `Get.back` | ไธŠไธ€ไธช้กต้ข | - | - | | โš™๏ธ ้ซ˜็บงๆœ็ดข | `Get.toNamed` | ้ซ˜็บงๆœ็ดข้กต | `/advanced-search` | - | | ็ƒญ้—จๆœ็ดข่ฏ | ๆœฌ้กตๆœ็ดข | ๆœฌ้กต | - | keyword | | ่œ่ฐฑ็ป“ๆžœๅก็‰‡ | `Get.toNamed` | ่œๅ“่ฏฆๆƒ…้กต | `/recipe-detail` | id | | ้ฃŸๆ็ป“ๆžœๅก็‰‡ | `Get.toNamed` | ้ฃŸๆ่ฏฆๆƒ…้กต | `/tools/ingredient` | ingredientId, ingredientName | | ๅฃๅ‘ณๆ ‡็ญพ็ป“ๆžœ | `Get.toNamed` | ๆ ‡็ญพ่œ่ฐฑๅˆ—่กจ | `/tag-recipe-list` | tagName, tagId, tagType=taste | | ๅทฅ่‰บๆ ‡็ญพ็ป“ๆžœ | `Get.toNamed` | ๆ ‡็ญพ่œ่ฐฑๅˆ—่กจ | `/tag-recipe-list` | tagName, tagId, tagType=cooking | ### ๐ŸŽจ ็พŽ่ง‚้—ฎ้ข˜ | # | ้—ฎ้ข˜ | ไธฅ้‡ๅบฆ | ๅปบ่ฎฎ | |---|------|--------|------| | 1 | ็ƒญ้—จๆœ็ดขๆ ‡็ญพๆ ทๅผ่ฟ‡ไบŽๆœด็ด  | ๐ŸŸกไธญ | ไฝฟ็”จๆฏ›็Žป็’ƒ่ƒถๅ›Šๆ ‡็ญพ+ๆธๅ˜่‰ฒ | | 2 | ๆœ็ดข็ป“ๆžœๅก็‰‡้—ด่ทไธ็ปŸไธ€ | ๐ŸŸขไฝŽ | ็ปŸไธ€ไฝฟ็”จDesignTokens.space3 | | 3 | Tabๅˆ‡ๆขๆ— ๆป‘ๅŠจๆŒ‡็คบๅ™จ | ๐ŸŸกไธญ | ๆทปๅŠ ไธ‹ๅˆ’็บฟๆป‘ๅŠจๅŠจ็”ป | ### โšก ๅŠŸ่ƒฝ็ผบๅคฑ | # | ๅŠŸ่ƒฝ | ไผ˜ๅ…ˆ็บง | ่ฏดๆ˜Ž | |---|------|--------|------| | 1 | ๆœ็ดขๅކๅฒ่ฎฐๅฝ• | P2 | ๆœฌๅœฐไฟๅญ˜ๆœ€่ฟ‘ๆœ็ดข่ฏ | | 2 | ๆœ็ดขๅปบ่ฎฎ/่‡ชๅŠจ่กฅๅ…จ | P3 | ่พ“ๅ…ฅๆ—ถๅฎžๆ—ถๆ˜พ็คบๅปบ่ฎฎ | | 3 | ๆœ็ดข็ป“ๆžœๅˆ†้กตๅŠ ่ฝฝ | P2 | ๅฝ“ๅ‰ไธ€ๆฌกๅŠ ่ฝฝ20ๆก๏ผŒๆ— ๅˆ†้กต | --- ## โš™๏ธ ้ซ˜็บงๆœ็ดข้กต (AdvancedSearchPage) ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ† [โ†‘่ฟ”ๅ›ž] ้ซ˜็บงๆœ็ดข โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”‚ โ”‚ ๐Ÿ“‚ ่œ่ฐฑๅˆ†็ฑป โ”‚ โ”‚ โ”Œโ”€โ”€โ”โ”Œโ”€โ”€โ”โ”Œโ”€โ”€โ”โ”Œโ”€โ”€โ” โ”‚ โ”‚ โ”‚ๅฎถๅธธโ”‚โ”‚ๅท่œโ”‚โ”‚็ฒค่œโ”‚โ”‚ๆน˜่œโ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”˜โ””โ”€โ”€โ”˜โ””โ”€โ”€โ”˜โ””โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ ๏ฟฝ ๅฃๅ‘ณๆ ‡็ญพ โ”‚ โ”‚ โ”Œโ”€โ”€โ”โ”Œโ”€โ”€โ”โ”Œโ”€โ”€โ”โ”Œโ”€โ”€โ” โ”‚ โ”‚ โ”‚ๅ’ธ้ฒœโ”‚โ”‚้…ฑ้ฆ™โ”‚โ”‚้บป่พฃโ”‚โ”‚ๆธ…ๆทกโ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”˜โ””โ”€โ”€โ”˜โ””โ”€โ”€โ”˜โ””โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ ๐Ÿณ ๅทฅ่‰บๆ ‡็ญพ โ”‚ โ”‚ โ”Œโ”€โ”€โ”โ”Œโ”€โ”€โ”โ”Œโ”€โ”€โ”โ”Œโ”€โ”€โ” โ”‚ โ”‚ โ”‚็บข็ƒงโ”‚ โ”‚ๆธ…่’ธโ”‚ โ”‚็‚’โ”‚ โ”‚็‚–โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”˜ โ””โ”€โ”€โ”˜ โ””โ”€โ”€โ”˜ โ””โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ ๐Ÿ• ็”จ้คๆ—ถๆฎต โ”‚ โ”‚ โ”Œโ”€โ”€โ”โ”Œโ”€โ”€โ”โ”Œโ”€โ”€โ” โ”‚ โ”‚ โ”‚ๆ—ฉ้คโ”‚ โ”‚ๅˆ้คโ”‚ โ”‚ๆ™š้คโ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”˜โ””โ”€โ”€โ”˜โ””โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ” ๆœ็ดข โ”‚ โ”‚ โ† [โ†‘่ฟ”ๅ›žๆœ็ดข้กต] ๆ‰ง่กŒ็ญ›้€‰ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ”„ ้‡็ฝฎ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### ๐Ÿ“„ ้กต้ข่ง†ๅ›พๆ–‡ไปถ - `lib/src/pages/home/advanced_search_page.dart`๏ผˆไธป้กต้ข๏ผ‰ - `lib/src/repositories/recipe_repository.dart`๏ผˆๆ•ฐๆฎๆบ๏ผ‰ ### ๐Ÿ”— ่ทณ่ฝฌๅ…ณ็ณป | ่งฆๅ‘ๅ…ƒ็ด  | ่ทณ่ฝฌๆ–นๅผ | ็›ฎๆ ‡้กต้ข | ่ทฏ็”ฑ | ไผ ๅ‚ | |---------|---------|---------|------|------| | โ† ่ฟ”ๅ›ž | `Get.back` | ๆœ็ดข้กต | - | - | | ๐Ÿ” ๆœ็ดขๆŒ‰้’ฎ | `Get.back` + ๆœ็ดข้กตๅˆทๆ–ฐ | ๆœ็ดข้กต | `/search` | tasteName/cookingName/categoryId | --- ## ๏ฟฝ๏ฟฝ ่œๅ“่ฏฆๆƒ…้กต (RecipeDetailPage) ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ† [โ†‘่ฟ”ๅ›ž] ่œ่ฐฑ่ฏฆๆƒ… โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ๐Ÿ–ผ๏ธ ๅฐ้ขๅคงๅ›พ โ”‚ โ”‚ โ† RecipeCoverImage โ”‚ โ”‚ โญ 4.5 โ”‚ โ”‚ โ† ่ฏ„ๅˆ†ๅพฝ็ซ  โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ ๐Ÿ“ ็บข็ƒง่‚‰ โ”‚ โ† RecipeTitleSection โ”‚ ๐Ÿ“‚ ๅฎถๅธธ่œ > ็บข็ƒง โ”‚ โ† [โ†’ๅˆ†็ฑปๆต่งˆ้กต] ้žๆœซ็บงๅฏ็‚นๅ‡ป โ”‚ โ”‚ โ”‚ ๐Ÿ‘๏ธ1.2k โค๏ธ56 โญ4.5 ๐Ÿ’ฌ0 โ”‚ โ† RecipeStatisticsBar โ”‚ โ”‚ โ”‚ ๐Ÿท๏ธ ๅ’ธ้ฒœ > ้…ฑ้ฆ™ > ไธ‹้ฅญ่œ โ”‚ โ† [โ†’ๆ ‡็ญพๅˆ—่กจ้กต] ๆ ‡็ญพๅฏ็‚นๅ‡ป โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โฑ๏ธ 30ๅˆ† ๐Ÿ“Š ไธญ็ญ‰ โ”‚ โ”‚ โ† RecipeTimeInfo โ”‚ โ”‚ ๐Ÿ‘ค 2ไบบไปฝ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”€โ”€ ๐Ÿฅฌ ้ฃŸๆ โ”€โ”€ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ไธปๆ–™: ไบ”่Šฑ่‚‰500g [โ†’้ฃŸๆ]โ”‚ โ† ้ฃŸๆๅๅฏ็‚นๅ‡ป โ”‚ โ”‚ ่พ…ๆ–™: ็”ŸๆŠฝ/่€ๆŠฝ/็ณ– [โ†’้ฃŸๆ]โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”€โ”€ ๐Ÿ‘จโ€๐Ÿณ ๆญฅ้ชค โ”€โ”€ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ Step 1: ๅˆ‡่‚‰... โ”‚ โ”‚ โ† RecipeStepsSection โ”‚ โ”‚ Step 2: ็…Ž็‚’... โ”‚ โ”‚ โ”‚ โ”‚ Step 3: ็‚–็…ฎ... โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”€โ”€ ๐Ÿ“Š ่ฅๅ…ป โ”€โ”€ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ็ƒญ้‡: 380kcal โ”‚ โ”‚ โ† RecipeNutritionSection โ”‚ โ”‚ ่›‹็™ฝ่ดจ/็ขณๆฐด/่„‚่‚ช โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โค๏ธ ็‚น่ตž โญ ่ฏ„ๅˆ† ๐Ÿ“คๅˆ†ไบซโ”‚ โ† RecipeActionBar โ”‚ โ”‚ ๐Ÿ“ ็ฌ”่ฎฐ โ”‚ โ”‚ [โ†’็ฌ”่ฎฐ้กต] โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### ๏ฟฝ ้กต้ข่ง†ๅ›พๆ–‡ไปถ - `lib/src/pages/home/recipe_detail_page.dart`๏ผˆไธป้กต้ข๏ผ‰ - `lib/src/widgets/recipe_detail/recipe_statistics_bar.dart`๏ผˆ็ปŸ่ฎกๆ ็ป„ไปถ๏ผ‰ ### ๏ฟฝ ่ทณ่ฝฌๅ…ณ็ณป | ่งฆๅ‘ๅ…ƒ็ด  | ่ทณ่ฝฌๆ–นๅผ | ็›ฎๆ ‡้กต้ข | ่ทฏ็”ฑ | ไผ ๅ‚ | |---------|---------|---------|------|------| | โ† ่ฟ”ๅ›ž | `Get.back` | ไธŠไธ€ไธช้กต้ข | - | - | | ๅˆ†็ฑป้ขๅŒ…ๅฑ‘ | `Get.toNamed` | ๅˆ†็ฑปๆต่งˆ้กต | `/category-browse` | category, title | | ๅฃๅ‘ณ/ๅทฅ่‰บๆ ‡็ญพ | `Get.toNamed` | ๆ ‡็ญพ่œ่ฐฑๅˆ—่กจ | `/tag-recipe-list` | tagName, tagId, tagType | | ้ฃŸๆๅ็งฐ | `Get.toNamed` | ้ฃŸๆ่ฏฆๆƒ…้กต | `/tools/ingredient` | ingredientId, ingredientName | | ๐Ÿ“ ็ฌ”่ฎฐๆŒ‰้’ฎ | `Get.toNamed` | ็ƒน้ฅช็ฌ”่ฎฐ้กต | `/cooking-note` | recipeId, recipeTitle, recipeInfo | | ๐Ÿ“ค ๅˆ†ไบซๆŒ‰้’ฎ | ็ณป็ปŸๅˆ†ไบซ | iOS Share Sheet | - | - | | โค๏ธ ็‚น่ตžๆŒ‰้’ฎ | API่ฐƒ็”จ | ๆœฌ้กตๆ›ดๆ–ฐ | - | - | | โญ ่ฏ„ๅˆ†ๆŒ‰้’ฎ | API่ฐƒ็”จ | ๆœฌ้กตๅผน็ช— | - | - | ### ๐ŸŽจ ็พŽ่ง‚้—ฎ้ข˜ | # | ้—ฎ้ข˜ | ไธฅ้‡ๅบฆ | ๅปบ่ฎฎ | |---|------|--------|------| | 1 | ๅฐ้ขๅ›พไธŽๆ ‡้ข˜ไน‹้—ด็ผบๅฐ‘่ง†่ง‰่ฟ‡ๆธก | ๐ŸŸกไธญ | ๅฐ้ขๅ›พๅบ•้ƒจๆทปๅŠ ๆธๅ˜้ฎ็ฝฉ | | 2 | ๆญฅ้ชคๅŒบๅŸŸ็บฏๆ–‡ๅญ—๏ผŒ็ผบๅฐ‘ๆญฅ้ชคๅ›พ | ๐ŸŸกไธญ | ๆ”ฏๆŒๆ˜พ็คบๆญฅ้ชค้…ๅ›พ(ๅฆ‚ๆœ‰) | | 3 | ้ฃŸๆๅŒบๅŸŸๆŽ’็‰ˆ่ฟ‡ไบŽ็ดงๅ‡‘ | ๐ŸŸขไฝŽ | ๅขžๅŠ ไธปๆ–™/่พ…ๆ–™ๅˆ†็ป„้—ด่ท | | 4 | ๅบ•้ƒจๆ“ไฝœๆ ไธŽๅ†…ๅฎนๅŒบๆ— ๅˆ†้š” | ๐ŸŸกไธญ | ๆทปๅŠ ๆฏ›็Žป็’ƒๅˆ†้š”ๆก | | 5 | ่ฅๅ…ปๆ•ฐๆฎ็บฏๆ–‡ๅญ—ๅฑ•็คบ๏ผŒ็ผบๅฐ‘ๅฏ่ง†ๅŒ– | ๐ŸŸกไธญ | ๆทปๅŠ ็Žฏๅฝขๅ›พ/่ฟ›ๅบฆๆกๅฑ•็คบๅ ๆฏ” | ### โšก ๅŠŸ่ƒฝ็ผบๅคฑ | # | ๅŠŸ่ƒฝ | ไผ˜ๅ…ˆ็บง | ่ฏดๆ˜Ž | |---|------|--------|------| | 1 | ๐Ÿ”— ็›ธๅ…ณ่œ่ฐฑๆŽจ่ | P2 | ่ฏฆๆƒ…้กตๅบ•้ƒจๆŽจ่็›ธไผผ่œๅ“ | | 2 | ๐Ÿ“ ็ƒน้ฅชๆจกๅผ | P2 | ๅ…จๅฑๆญฅ้ชค+่ฎกๆ—ถๅ™จ+้˜ฒๆฏๅฑ | | 3 | ๐Ÿ’ฌ ่ฏ„่ฎบๅˆ—่กจ | P3 | ๅฑ•็คบ็”จๆˆท่ฏ„่ฎบ(้œ€ๅŽ็ซฏ) | | 4 | โš ๏ธ ่ฟ‡ๆ•ๅŽŸ่ญฆ็คบ | P2 | ้ฃŸๆๅซ่ฟ‡ๆ•ๅŽŸๆ—ถๆ˜พ็คบ่ญฆๅ‘Š | | 5 | ๐Ÿ“ฑ ไบŒ็ปด็ ๆตทๆŠฅ | P3 | ็”Ÿๆˆ่œ่ฐฑๅˆ†ไบซๅ›พ | --- ## ๐Ÿ› ๏ธ ๅทฅๅ…ทไธญๅฟƒ (ToolsCenterPage) ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿ› ๏ธ ๅทฅๅ…ท็ฎฑ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ” ๆœ็ดขๅทฅๅ…ท โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”€โ”€ ๐Ÿณ ็ƒน้ฅชๅŠฉๆ‰‹ โ”€โ”€ โ”‚ โ”‚ โ”Œโ”€โ”€โ” โ”Œโ”€โ”€โ” โ”‚ โ† GridView 2ๅˆ—ๅธƒๅฑ€ โ”‚ โ”‚โฑ๏ธโ”‚ โ”‚๐Ÿ“โ”‚ โ”‚ โ”‚ โ”‚่ฎกๆ—ถโ”‚ โ”‚็ฌ”่ฎฐโ”‚ โ”‚ โ”‚ โ”‚ โ†“โ”‚ โ”‚ โ†“โ”‚ โ”‚ โ”‚ โ”‚ไฝฟ็”จโ”‚ โ”‚ไฝฟ็”จโ”‚ โ† ๆ–ฐๅขž"ไฝฟ็”จๅทฅๅ…ท"ๆŒ‰้’ฎ โ”‚ โ””โ”€โ”€โ”˜ โ””โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”€โ”€ ๐Ÿ“‹ ่ง„ๅˆ’็ฎก็† โ”€โ”€ โ”‚ โ”‚ โ”Œโ”€โ”€โ” โ”Œโ”€โ”€โ” โ”‚ โ”‚ โ”‚๐Ÿ“…โ”‚ โ”‚๐Ÿ›’โ”‚ โ”‚ โ”‚ โ”‚่œๅ•โ”‚ โ”‚่ดญ็‰ฉโ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”˜ โ””โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”€โ”€ ๐Ÿฅ ๅฅๅบทๅทฅๅ…ท โ”€โ”€ โ”‚ โ”‚ โ”Œโ”€โ”€โ” โ”Œโ”€โ”€โ” โ”‚ โ”‚ โ”‚BMIโ”‚ โ”‚๐ŸŒ™โ”‚ โ”‚ โ”‚ โ”‚่ฎก็ฎ—โ”‚ โ”‚ๅฐฑๅฏโ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”˜ โ””โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”€โ”€ ๐Ÿท๏ธ ็ƒญ้—จๆ ‡็ญพ โ”€โ”€ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”โ”Œโ”€โ”€โ”€โ”€โ”โ”Œโ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ๅ’ธ้ฒœ โ”‚โ”‚้…ฑ้ฆ™ โ”‚โ”‚ๆธ…ๆทก โ”‚ โ”‚ โ† [โ†’ๆ ‡็ญพๅˆ—่กจ้กต] โ”‚ โ””โ”€โ”€โ”€โ”€โ”˜โ””โ”€โ”€โ”€โ”€โ”˜โ””โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### ๐Ÿ“„ ้กต้ข่ง†ๅ›พๆ–‡ไปถ - `lib/src/pages/tools/tools_center_page.dart`๏ผˆไธป้กต้ข๏ผ‰ - `lib/src/widgets/glass/glass_container.dart`๏ผˆๆฏ›็Žป็’ƒๅก็‰‡๏ผ‰ ### ๐Ÿ”— ่ทณ่ฝฌๅ…ณ็ณป | ่งฆๅ‘ๅ…ƒ็ด  | ่ทณ่ฝฌๆ–นๅผ | ็›ฎๆ ‡้กต้ข | ่ทฏ็”ฑ | ไผ ๅ‚ | |---------|---------|---------|------|------| | โฑ๏ธ ็ƒน้ฅช่ฎกๆ—ถ | `Get.toNamed` | ็ƒน้ฅช่ฎกๆ—ถๅ™จ | `/cooking-timer` | - | | ๐Ÿ“ ็ƒน้ฅช็ฌ”่ฎฐ | `Get.toNamed` | ็ƒน้ฅช็ฌ”่ฎฐ้กต | `/cooking-note` | recipeId, recipeTitle | | ๐Ÿงฎ ็”จ้‡ๆข็ฎ— | `Get.toNamed` | ๅ•ไฝๆข็ฎ—้กต | `/unit-converter` | - | | ๐Ÿ“… ๆฏๅ‘จ่œๅ• | `Get.toNamed` | ่œๅ•่ง„ๅˆ’้กต | `/tools/weekly-menu` | - | | ๐Ÿ›’ ่ดญ็‰ฉๆธ…ๅ• | `Get.toNamed` | ่ดญ็‰ฉๆธ…ๅ•้กต | `/shopping-list` | - | | โš–๏ธ ไปฝ้‡็ผฉๆ”พ | `Get.toNamed` | ไปฝ้‡็ผฉๆ”พ้กต | `/serving-scaler` | ingredients, servings | | BMI่ฎก็ฎ— | `Get.toNamed` | BMI่ฎก็ฎ—ๅ™จ | `/bmi-calculator` | - | | ๐ŸŒ™ ๅฐฑๅฏๆ้†’ | `Get.toNamed` | ๅฐฑๅฏๆ้†’้กต | `/profile/bedtime-reminder` | - | | ็ƒญ้—จๆ ‡็ญพ | `Get.toNamed` | ๆ ‡็ญพ่œ่ฐฑๅˆ—่กจ | `/tag-recipe-list` | tagName, tagId, tagType | | ๐ŸŽฎ ไฝฟ็”จๅทฅๅ…ทๆŒ‰้’ฎ | `Get.toNamed` | ๅทฅๅ…ทๅŠŸ่ƒฝ้กต | ๅทฅๅ…ทๅฏนๅบ”่ทฏ็”ฑ | - | ### ๐ŸŽจ ็พŽ่ง‚้—ฎ้ข˜ | # | ้—ฎ้ข˜ | ไธฅ้‡ๅบฆ | ๅปบ่ฎฎ | |---|------|--------|------| | 1 | ๅทฅๅ…ทๅ›พๆ ‡+ๆ–‡ๅญ—ๅก็‰‡ๆ ทๅผ่ฟ‡ไบŽ็ฎ€ๅ• | ๐ŸŸกไธญ | ๅขžๅŠ ๆธๅ˜่ƒŒๆ™ฏๆˆ–ๆฏ›็Žป็’ƒๆ•ˆๆžœ | | 2 | ๅˆ†็ป„ๆ ‡้ข˜็ผบๅฐ‘่ง†่ง‰ๅฑ‚ๆฌก | ๐ŸŸขไฝŽ | ๆทปๅŠ ๅˆ†็ป„ๅ›พๆ ‡ๅ’Œๅˆ†ๅ‰ฒ็บฟ | | 3 | ็ƒญ้—จๆ ‡็ญพๅŒบๅŸŸไธŽๅทฅๅ…ทๅก็‰‡้ฃŽๆ ผไธไธ€่‡ด | ๐ŸŸกไธญ | ็ปŸไธ€ไธบๆฏ›็Žป็’ƒ่ƒถๅ›Šๆ ทๅผ | ### โšก ๅŠŸ่ƒฝ็ผบๅคฑ | # | ๅŠŸ่ƒฝ | ไผ˜ๅ…ˆ็บง | ่ฏดๆ˜Ž | |---|------|--------|------| | 1 | ็”จ้คๆ—ถๆฎตๆŽจ่ | P2 | eating_times.jsonๆ•ฐๆฎๅทฒๆœ‰๏ผŒ็ผบ้กต้ขๅ…ฅๅฃ | | 2 | ่ฟ‡ๆ•ๅŽŸๆฃ€ๆต‹ๅ™จๅขžๅผบ | P2 | ๅฝ“ๅ‰ไป…ๅฑ•็คบ๏ผŒ็ผบๆ™บ่ƒฝ่ฟ‡ๆปค | | 3 | ๅทฅๅ…ทไฝฟ็”จ็ปŸ่ฎก | P3 | ๅฑ•็คบๅธธ็”จๅทฅๅ…ทๆŽ’่กŒ | --- ## ๐Ÿ‘ค ๆˆ‘็š„ (ProfilePage) ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๆˆ‘็š„ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ  ้ฆ–้กต โ”‚ โš™๏ธ ๆ›ดๅคš โ”‚ โ”‚ โ† GlassSegmentedControl โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”€โ”€ ้ฆ–้กต Tab โ”€โ”€ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿง‘ ็”จๆˆทๅคดๅƒ โ”‚ โ”‚ โ”‚ โ”‚ ็พŽ้ฃŸ็ˆฑๅฅฝ่€… โ”‚ โ”‚ โ”‚ โ”‚ โญ Lv.5 ็ƒน้ฅช่พพไบบ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”โ”Œโ”€โ”€โ”โ”Œโ”€โ”€โ”โ”Œโ”€โ”€โ” โ”‚ โ”‚ โ”‚โค๏ธโ”‚โ”‚๐Ÿ‘€โ”‚โ”‚๐Ÿ“โ”‚โ”‚๐Ÿ›’โ”‚ โ”‚ โ† ๅŠŸ่ƒฝๅ…ฅๅฃ โ”‚ โ”‚ๆ”ถ่—โ”‚โ”‚่ถณ่ฟนโ”‚โ”‚็ฌ”่ฎฐโ”‚โ”‚่ดญ็‰ฉโ”‚ โ”‚ โ”‚ โ”‚ โ†“โ”‚ โ”‚ โ†“โ”‚ โ”‚ โ†“โ”‚ โ”‚ โ†“โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”˜โ””โ”€โ”€โ”˜โ””โ”€โ”€โ”˜โ””โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”โ”Œโ”€โ”€โ”โ”Œโ”€โ”€โ”โ”Œโ”€โ”€โ” โ”‚ โ”‚ โ”‚โฑ๏ธโ”‚ โ”‚๐Ÿ”„โ”‚ โ”‚๐Ÿ“Šโ”‚ โ”‚โš–๏ธโ”‚ โ”‚ โ† ๅทฅๅ…ทๅฟซๆท โ”‚ โ”‚่ฎกๆ—ถโ”‚ โ”‚ๆข็ฎ—โ”‚ โ”‚BMIโ”‚ โ”‚็ผฉๆ”พโ”‚ โ”‚ โ”‚ โ”‚ โ†“โ”‚ โ”‚ โ†“โ”‚ โ”‚ โ†“โ”‚ โ”‚ โ†“โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”˜ โ””โ”€โ”€โ”˜ โ””โ”€โ”€โ”˜ โ””โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”€โ”€ ๆ›ดๅคš Tab โ”€โ”€ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ“Š ๆ•ฐๆฎ็ฎก็†ไธญๅฟƒ [โ†’] โ”‚ โ”‚ โ”‚ โ”‚ ๐ŸŽจ ไธชๆ€งๅŒ–่ฎพ็ฝฎ [โ†’] โ”‚ โ”‚ โ”‚ โ”‚ ๐Ÿ—‘๏ธ ็ผ“ๅญ˜็ฎก็† [โ†’] โ”‚ โ”‚ โ”‚ โ”‚ ๐ŸŒ™ ๅฐฑๅฏๆ้†’ [โ†’] โ”‚ โ”‚ โ”‚ โ”‚ ๐Ÿ“‹ ่ฅๅ…ปไธญๅฟƒ [โ†’] โ”‚ โ”‚ โ”‚ โ”‚ ๐Ÿ’ฌ ๆ„่งๅ้ฆˆ [โ†’] โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### ๏ฟฝ ้กต้ข่ง†ๅ›พๆ–‡ไปถ - `lib/src/pages/profile/profile_page.dart`๏ผˆไธป้กต้ข๏ผ‰ - `lib/src/pages/profile/profile_home.dart`๏ผˆ้ฆ–้กตTab๏ผ‰ ### ๏ฟฝ ่ทณ่ฝฌๅ…ณ็ณป | ่งฆๅ‘ๅ…ƒ็ด  | ่ทณ่ฝฌๆ–นๅผ | ็›ฎๆ ‡้กต้ข | ่ทฏ็”ฑ | ไผ ๅ‚ | |---------|---------|---------|------|------| | โค๏ธ ๆ”ถ่— | `Get.toNamed` | ๆ”ถ่—้กต | `/favorites` | - | | ๐Ÿ‘€ ่ถณ่ฟน | `Get.toNamed` | ๆต่งˆ่ฎฐๅฝ•้กต | `/footprints` | - | | ๐Ÿ“ ็ฌ”่ฎฐ | `Get.toNamed` | ็ƒน้ฅช็ฌ”่ฎฐ้กต | `/cooking-note` | - | | ๐Ÿ›’ ่ดญ็‰ฉ | `Get.toNamed` | ่ดญ็‰ฉๆธ…ๅ•้กต | `/shopping-list` | - | | โฑ๏ธ ่ฎกๆ—ถ | `Get.toNamed` | ็ƒน้ฅช่ฎกๆ—ถๅ™จ | `/cooking-timer` | - | | ๐Ÿ”„ ๆข็ฎ— | `Get.toNamed` | ๅ•ไฝๆข็ฎ—้กต | `/unit-converter` | - | | ๐Ÿ“Š BMI | `Get.toNamed` | BMI่ฎก็ฎ—ๅ™จ | `/bmi-calculator` | - | | โš–๏ธ ็ผฉๆ”พ | `Get.toNamed` | ไปฝ้‡็ผฉๆ”พ้กต | `/serving-scaler` | - | | ๐Ÿ“Š ๆ•ฐๆฎไธญๅฟƒ | `Get.toNamed` | ๆ•ฐๆฎ็ฎก็†ไธญๅฟƒ | `/data-center` | - | | ๐ŸŽจ ไธชๆ€งๅŒ– | `Get.toNamed` | ไธชๆ€งๅŒ–่ฎพ็ฝฎ | `/personalization` | - | | ๐Ÿ—‘๏ธ ็ผ“ๅญ˜ | `Get.toNamed` | ็ผ“ๅญ˜็ฎก็†้กต | ๅ†…้กต | - | | ๐ŸŒ™ ๅฐฑๅฏ | `Get.toNamed` | ๅฐฑๅฏๆ้†’ | `/profile/bedtime-reminder` | - | | ๐Ÿ“‹ ่ฅๅ…ป | `Get.toNamed` | ่ฅๅ…ปไธญๅฟƒ | `/nutrition` | - | | ๐Ÿ’ฌ ๅ้ฆˆ | `Get.toNamed` | ๆ„่งๅ้ฆˆ | `/chat` | - | | โค๏ธ ่ฟทไฝ ๅก็‰‡ | `Get.toNamed` | ่ฟทไฝ ๅก็‰‡้กต | `/mini-card` | - | ### ๐ŸŽจ ็พŽ่ง‚้—ฎ้ข˜ | # | ้—ฎ้ข˜ | ไธฅ้‡ๅบฆ | ๅปบ่ฎฎ | |---|------|--------|------| | 1 | ็”จๆˆทๅคดๅƒๅŒบๅŸŸ่ฟ‡ไบŽ็ฎ€ๅ•๏ผŒๆ— ่ƒŒๆ™ฏ่ฃ…้ฅฐ | ๐ŸŸกไธญ | ๆทปๅŠ ๆธๅ˜่ƒŒๆ™ฏ+่ฃ…้ฅฐๅ…ƒ็ด  | | 2 | ๅŠŸ่ƒฝๅ…ฅๅฃๅ›พๆ ‡ๆ ทๅผไธ็ปŸไธ€ | ๐ŸŸกไธญ | ็ปŸไธ€ไธบๅœ†ๅฝขๅ›พๆ ‡+ๆธๅ˜่ƒŒๆ™ฏ | | 3 | ่ฎพ็ฝฎๅˆ—่กจ้กน็ผบๅฐ‘ๅ›พๆ ‡ | ๐ŸŸขไฝŽ | ๆฏ้กนๆทปๅŠ ๅฏนๅบ”emojiๅ›พๆ ‡ | ### โšก ๅŠŸ่ƒฝ็ผบๅคฑ | # | ๅŠŸ่ƒฝ | ไผ˜ๅ…ˆ็บง | ่ฏดๆ˜Ž | |---|------|--------|------| | 1 | ็”จๆˆท็ญ‰็บง็ณป็ปŸ | P3 | ๆต่งˆ/ๆ”ถ่—/่ฏ„่ฎบ่Žทๅพ—็ป้ชŒๅ€ผ | | 2 | ๆˆๅฐฑๅพฝ็ซ  | P3 | ็ƒน้ฅช่พพไบบ/็พŽ้ฃŸๅฎถ็ญ‰ๅพฝ็ซ  | | 3 | ๆ•ฐๆฎๅฏผๅ‡บ | P3 | ๅฏผๅ‡บๆ”ถ่—/ๆต่งˆ่ฎฐๅฝ• | --- ## โค๏ธ ๆ”ถ่—้กต (FavoritesPage) ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ† [โ†‘่ฟ”ๅ›ž] ๆˆ‘็š„ๆ”ถ่— โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ” โ”Œโ”€โ”€โ” โ”‚ โ† GridView 2ๅˆ—ๅธƒๅฑ€ โ”‚ โ”‚๐Ÿ–ผ๏ธโ”‚ โ”‚๐Ÿ–ผ๏ธโ”‚ โ”‚ โ”‚ โ”‚่œโ”‚ โ”‚่œโ”‚ โ”‚ โ”‚ โ”‚ๅ“โ”‚ โ”‚ๅ“โ”‚ โ”‚ โ”‚ โ”‚1โ”‚ โ”‚2โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”˜ โ””โ”€โ”€โ”˜ โ”‚ โ”‚ โ”Œโ”€โ”€โ” โ”Œโ”€โ”€โ” โ”‚ โ”‚ โ”‚๐Ÿ–ผ๏ธโ”‚ โ”‚๐Ÿ–ผ๏ธโ”‚ โ”‚ โ”‚ โ”‚่œโ”‚ โ”‚่œโ”‚ โ”‚ โ”‚ โ”‚ๅ“โ”‚ โ”‚ๅ“โ”‚ โ”‚ โ”‚ โ”‚3โ”‚ โ”‚4โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”˜ โ””โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### ๐Ÿ“„ ้กต้ข่ง†ๅ›พๆ–‡ไปถ - `lib/src/pages/profile/social/favorites_page.dart`๏ผˆไธป้กต้ข๏ผ‰ ### ๐Ÿ”— ่ทณ่ฝฌๅ…ณ็ณป | ่งฆๅ‘ๅ…ƒ็ด  | ่ทณ่ฝฌๆ–นๅผ | ็›ฎๆ ‡้กต้ข | ่ทฏ็”ฑ | ไผ ๅ‚ | |---------|---------|---------|------|------| | โ† ่ฟ”ๅ›ž | `Get.back` | ไธŠไธ€ไธช้กต้ข | - | - | | ่œๅ“ๅก็‰‡ | `Get.toNamed` | ่œๅ“่ฏฆๆƒ…้กต | `/recipe-detail` | id | ### ๐ŸŽจ ็พŽ่ง‚้—ฎ้ข˜ | # | ้—ฎ้ข˜ | ไธฅ้‡ๅบฆ | ๅปบ่ฎฎ | |---|------|--------|------| | 1 | ็ฉบๆ”ถ่—็Šถๆ€็ผบๅฐ‘ๅผ•ๅฏผ | ๐ŸŸกไธญ | ๆทปๅŠ "ๅŽปๅ‘็Žฐ็พŽ้ฃŸ"ๆŒ‰้’ฎๅผ•ๅฏผ็”จๆˆท | ### โšก ๅŠŸ่ƒฝ็ผบๅคฑ | # | ๅŠŸ่ƒฝ | ไผ˜ๅ…ˆ็บง | ่ฏดๆ˜Ž | |---|------|--------|------| | 1 | ๆ”ถ่—ๅˆ†็ป„ | P3 | ๆŒ‰ๅˆ†็ฑป/ๆ ‡็ญพๅˆ†็ป„็ฎก็†ๆ”ถ่— | | 2 | ๆ”ถ่—ๆŽ’ๅบ | P3 | ๆŒ‰ๆ”ถ่—ๆ—ถ้—ด/่ฏ„ๅˆ†ๆŽ’ๅบ | --- ## ๐Ÿ“‹ ๅ…ณไบŽ้กต้ข (AboutPage) ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ† [โ†‘่ฟ”ๅ›ž] ๅ…ณไบŽ โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿณ ๅฐๅฆˆๅŽจๆˆฟ โ”‚ โ”‚ โ”‚ โ”‚ Version 0.92.4 โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”€โ”€ ๅบ”็”จไฟกๆฏ โ”€โ”€ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ“ฑ ๅบ”็”จ็‰ˆๆœฌ 0.92.4 โ”‚ โ”‚ โ”‚ โ”‚ ๐Ÿ“… ๆ›ดๆ–ฐๆ—ฅๆœŸ 2026-04 โ”‚ โ”‚ โ”‚ โ”‚ ๐Ÿท๏ธ ๆž„ๅปบ็‰ˆๆœฌ 92 โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”€โ”€ ่”็ณปๆˆ‘ไปฌ โ”€โ”€ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ’ฌ ็”จๆˆทๅ้ฆˆ [โ†’] โ”‚ โ”‚ โ† [โ†’ๆ„่งๅ้ฆˆ้กต] โ”‚ โ”‚ โญ ่ฏ„ไปทๅบ”็”จ [โ†’] โ”‚ โ”‚ โ”‚ โ”‚ ๐Ÿ“ง ่”็ณป้‚ฎ็ฎฑ [โ†’] โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”€โ”€ ๆณ•ๅพ‹ไฟกๆฏ โ”€โ”€ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ“œ ็”จๆˆทๅ่ฎฎ [โ†’] โ”‚ โ”‚ โ”‚ โ”‚ ๐Ÿ”’ ้š็งๆ”ฟ็ญ– [โ†’] โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### ๐Ÿ“„ ้กต้ข่ง†ๅ›พๆ–‡ไปถ - `lib/src/pages/profile/about_page.dart`๏ผˆไธป้กต้ข๏ผ‰ ### ๐Ÿ”— ่ทณ่ฝฌๅ…ณ็ณป | ่งฆๅ‘ๅ…ƒ็ด  | ่ทณ่ฝฌๆ–นๅผ | ็›ฎๆ ‡้กต้ข | ่ทฏ็”ฑ | ไผ ๅ‚ | |---------|---------|---------|------|------| | โ† ่ฟ”ๅ›ž | `Get.back` | ไธŠไธ€ไธช้กต้ข | - | - | | ๐Ÿ’ฌ ็”จๆˆทๅ้ฆˆ | `Get.toNamed` | ๆ„่งๅ้ฆˆ้กต | `/chat` | - | | โญ ่ฏ„ไปทๅบ”็”จ | ๆ‰“ๅผ€ๅบ”็”จๅ•†ๅบ— | App Store | - | - | | ๐Ÿ“ง ่”็ณป้‚ฎ็ฎฑ | ๆ‰“ๅผ€้‚ฎไปถๅฎขๆˆท็ซฏ | Mail App | - | - | | ๐Ÿ“œ ็”จๆˆทๅ่ฎฎ | `Get.toNamed` | ็”จๆˆทๅ่ฎฎ้กต | `/user-agreement` | - | | ๐Ÿ”’ ้š็งๆ”ฟ็ญ– | `Get.toNamed` | ้š็งๆ”ฟ็ญ–้กต | `/privacy-policy` | - | ### ๐ŸŽจ ็พŽ่ง‚้—ฎ้ข˜ | # | ้—ฎ้ข˜ | ไธฅ้‡ๅบฆ | ๅปบ่ฎฎ | |---|------|--------|------| | 1 | ๅบ”็”จๅ›พๆ ‡ๅŒบๅŸŸๅฏๅขžๅŠ ๅŠจ็”ปๆ•ˆๆžœ | ๐ŸŸขไฝŽ | ๆทปๅŠ ๅ‘ผๅธๅŠจ็”ปๆˆ–ๆธๅ˜ๆ•ˆๆžœ | ### โšก ๅŠŸ่ƒฝ็ผบๅคฑ | # | ๅŠŸ่ƒฝ | ไผ˜ๅ…ˆ็บง | ่ฏดๆ˜Ž | |---|------|--------|------| | 1 | ๆฃ€ๆŸฅๆ›ดๆ–ฐ | P2 | ๆฃ€ๆต‹ๆ–ฐ็‰ˆๆœฌๅนถๆ็คบๆ›ดๆ–ฐ | | 2 | ๆ›ดๆ–ฐๆ—ฅๅฟ— | P3 | ๅฑ•็คบ็‰ˆๆœฌๆ›ดๆ–ฐๅ†…ๅฎน | --- ## ๐Ÿฅฌ ้ฃŸๆ่ฏฆๆƒ…้กต (IngredientDetailPage) ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ† [โ†‘่ฟ”ๅ›ž] ้ฃŸๆ่ฏฆๆƒ… โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ–ผ๏ธ ้ฃŸๆๅ›พ็‰‡ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ ๐Ÿฅš ้ธก่›‹ โ”‚ โ”‚ ๐Ÿ“‚ ๅˆ†็ฑป: ่›‹็ฑป โ”‚ โ”‚ โ”‚ โ”‚ โ”€โ”€ ๐Ÿ“– ็›ธๅ…ณ่œ่ฐฑ โ”€โ”€ โ”‚ โ”‚ โ”Œโ”€โ”€โ” โ”Œโ”€โ”€โ” โ”Œโ”€โ”€โ” โ”‚ โ”‚ โ”‚่œโ”‚ โ”‚่œโ”‚ โ”‚่œโ”‚ โ”‚ โ† [โ†’่œๅ“่ฏฆๆƒ…้กต] โ”‚ โ””โ”€โ”€โ”˜ โ””โ”€โ”€โ”˜ โ””โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ  ่ฟ”ๅ›ž้ฆ–้กต โ”‚ โ”‚ โ† Get.until((route) => route.isFirst) โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### ๐Ÿ“„ ้กต้ข่ง†ๅ›พๆ–‡ไปถ - `lib/src/pages/tools/ingredient_detail_page.dart`๏ผˆไธป้กต้ข๏ผ‰ - `lib/src/controllers/ingredient_controller.dart`๏ผˆ้ฃŸๆๆŽงๅˆถๅ™จ๏ผ‰ ### ๐Ÿ”— ่ทณ่ฝฌๅ…ณ็ณป | ่งฆๅ‘ๅ…ƒ็ด  | ่ทณ่ฝฌๆ–นๅผ | ็›ฎๆ ‡้กต้ข | ่ทฏ็”ฑ | ไผ ๅ‚ | |---------|---------|---------|------|------| | โ† ่ฟ”ๅ›ž | `Get.back` | ไธŠไธ€ไธช้กต้ข | - | - | | ็›ธๅ…ณ่œ่ฐฑๅก็‰‡ | `Get.toNamed` | ่œๅ“่ฏฆๆƒ…้กต | `/recipe-detail` | id | | ๏ฟฝ ่ฟ”ๅ›ž้ฆ–้กต | `Get.until((route) => route.isFirst)` | ้ฆ–้กต(Tab0) | - | - | ### ๏ฟฝ๏ฟฝ ็พŽ่ง‚้—ฎ้ข˜ | # | ้—ฎ้ข˜ | ไธฅ้‡ๅบฆ | ๅปบ่ฎฎ | |---|------|--------|------| | 1 | ้ฃŸๆไฟกๆฏๅŒบๅŸŸ่ฟ‡ไบŽ็ฎ€ๅ• | ๐ŸŸกไธญ | ๆทปๅŠ ่ฅๅ…ปๆˆๅˆ†ๆ‘˜่ฆ/ๅญฃ่Š‚ๆ€ง/้€‰่ดญๅปบ่ฎฎ | | 2 | ็›ธๅ…ณ่œ่ฐฑๅก็‰‡ๆ ทๅผไธŽ้ฆ–้กตไธไธ€่‡ด | ๐ŸŸกไธญ | ็ปŸไธ€ๅก็‰‡ๆ ทๅผ | ### โšก ๅŠŸ่ƒฝ็ผบๅคฑ | # | ๅŠŸ่ƒฝ | ไผ˜ๅ…ˆ็บง | ่ฏดๆ˜Ž | |---|------|--------|------| | 1 | ้ฃŸๆ่ฅๅ…ป่ฏฆๆƒ… | P2 | ๅฑ•็คบ้ฃŸๆ่ฅๅ…ปๆˆๅˆ†ๆ•ฐๆฎ | | 2 | ้ฃŸๆๆ›ฟไปฃๅปบ่ฎฎ | P3 | ็ผบๅฐ‘่ฏฅ้ฃŸๆๆ—ถ็š„ๆ›ฟไปฃๅ“ๆŽจ่ | | 3 | ่ฟ‡ๆ•ๅŽŸๅ…ณ่” | P2 | ๅ…ณ่”ๆ•ฐๆฎ็ฎก็†ไธญๅฟƒ็š„่ฟ‡ๆ•ๅŽŸ่ฎพ็ฝฎ | --- ## ๐Ÿ“‚ ๅˆ†็ฑปๆต่งˆ้กต (CategoryBrowsePage) ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ† [โ†‘่ฟ”ๅ›ž] ๐Ÿ“‚ ๅฎถๅธธ่œ โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”Œโ”€โ”€โ” โ”Œโ”€โ”€โ” โ”Œโ”€โ”€โ” โ”‚ โ”‚ โ”‚็บข็ƒงโ”‚ โ”‚็‚–่œโ”‚ โ”‚็‚’่œโ”‚ โ”‚ โ† ๅญๅˆ†็ฑป็ฝ‘ๆ ผ [โ†’ๅˆ†็ฑปๆต่งˆ้กต(้€’ๅฝ’)] โ”‚ โ””โ”€โ”€โ”˜ โ””โ”€โ”€โ”˜ โ””โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”€โ”€ ่œ่ฐฑๅˆ—่กจ โ”€โ”€ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ–ผ๏ธ ็บข็ƒง่‚‰ โญ4.5 โ”‚ โ”‚ โ† [โ†’่œๅ“่ฏฆๆƒ…้กต] โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ–ผ๏ธ ็‚–ๆŽ’้ชจ โญ4.2 โ”‚ โ”‚ โ† [โ†’่œๅ“่ฏฆๆƒ…้กต] โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### ๏ฟฝ ้กต้ข่ง†ๅ›พๆ–‡ไปถ - `lib/src/pages/discover/category_browse_page.dart`๏ผˆไธป้กต้ข๏ผ‰ - `lib/src/controllers/category_controller.dart`๏ผˆๅˆ†็ฑปๆŽงๅˆถๅ™จ๏ผ‰ ### ๏ฟฝ ่ทณ่ฝฌๅ…ณ็ณป | ่งฆๅ‘ๅ…ƒ็ด  | ่ทณ่ฝฌๆ–นๅผ | ็›ฎๆ ‡้กต้ข | ่ทฏ็”ฑ | ไผ ๅ‚ | |---------|---------|---------|------|------| | โ† ่ฟ”ๅ›ž | `Get.back` | ไธŠไธ€ไธช้กต้ข | - | - | | ๅญๅˆ†็ฑปๅก็‰‡ | `Get.toNamed` | ๅˆ†็ฑปๆต่งˆ้กต(้€’ๅฝ’) | `/category-browse` | category, title | | ่œ่ฐฑๅก็‰‡ | `Get.toNamed` | ่œๅ“่ฏฆๆƒ…้กต | `/recipe-detail` | id | ### ๐ŸŽจ ็พŽ่ง‚้—ฎ้ข˜ | # | ้—ฎ้ข˜ | ไธฅ้‡ๅบฆ | ๅปบ่ฎฎ | |---|------|--------|------| | 1 | ๅญๅˆ†็ฑป็ฝ‘ๆ ผไธŽ่œ่ฐฑๅˆ—่กจไน‹้—ด็ผบๅฐ‘่ง†่ง‰ๅˆ†้š” | ๐ŸŸขไฝŽ | ๆทปๅŠ ๅˆ†็ป„ๆ ‡้ข˜ | | 2 | ่œ่ฐฑๅˆ—่กจๅก็‰‡ๆ ทๅผๅ•่ฐƒ | ๐ŸŸกไธญ | ๆทปๅŠ ๅฐ้ขๅ›พ+่ฏ„ๅˆ†+ๆต่งˆ้‡ | ### โšก ๅŠŸ่ƒฝ็ผบๅคฑ | # | ๅŠŸ่ƒฝ | ไผ˜ๅ…ˆ็บง | ่ฏดๆ˜Ž | |---|------|--------|------| | 1 | ๅˆ†้กตๅŠ ่ฝฝ | P2 | ๅฝ“ๅ‰ไธ€ๆฌกๅŠ ่ฝฝ๏ผŒๆ— ๅˆ†้กต | | 2 | ๆŽ’ๅบ็ญ›้€‰ | P3 | ๆŒ‰่ฏ„ๅˆ†/ๆต่งˆ้‡/ๆœ€ๆ–ฐๆŽ’ๅบ | --- ## ๐Ÿท๏ธ ๆ ‡็ญพ่œ่ฐฑๅˆ—่กจ (TagRecipeListPage) ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ† [โ†‘่ฟ”ๅ›ž] ๐Ÿ‘… ๅ’ธ้ฒœ โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ–ผ๏ธ ็บข็ƒง่‚‰ โญ4.5 โ”‚ โ”‚ โ† [โ†’่œๅ“่ฏฆๆƒ…้กต] โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ–ผ๏ธ ๆธ…่’ธ้ฑผ โญ4.3 โ”‚ โ”‚ โ† [โ†’่œๅ“่ฏฆๆƒ…้กต] โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### ๐Ÿ“„ ้กต้ข่ง†ๅ›พๆ–‡ไปถ - `lib/src/pages/home/tag_recipe_list_page.dart`๏ผˆไธป้กต้ข๏ผ‰ - `lib/src/controllers/tag_controller.dart`๏ผˆๆ ‡็ญพๆŽงๅˆถๅ™จ๏ผ‰ ### ๐Ÿ”— ่ทณ่ฝฌๅ…ณ็ณป | ่งฆๅ‘ๅ…ƒ็ด  | ่ทณ่ฝฌๆ–นๅผ | ็›ฎๆ ‡้กต้ข | ่ทฏ็”ฑ | ไผ ๅ‚ | |---------|---------|---------|------|------| | โ† ่ฟ”ๅ›ž | `Get.back` | ไธŠไธ€ไธช้กต้ข | - | - | | ่œ่ฐฑๅก็‰‡ | `Get.toNamed` | ่œๅ“่ฏฆๆƒ…้กต | `/recipe-detail` | id | ### ๐ŸŽจ ็พŽ่ง‚้—ฎ้ข˜ | # | ้—ฎ้ข˜ | ไธฅ้‡ๅบฆ | ๅปบ่ฎฎ | |---|------|--------|------| | 1 | ้กต้ข้กถ้ƒจ็ผบๅฐ‘ๆ ‡็ญพ่ฏดๆ˜Ž/็ปŸ่ฎก | ๐ŸŸกไธญ | ๆทปๅŠ "ๅ…ฑXX้“่œ"็ปŸ่ฎก | | 2 | ๅˆ—่กจๅก็‰‡ๆ ทๅผไธŽ้ฆ–้กต็€‘ๅธƒๆตไธ็ปŸไธ€ | ๐ŸŸกไธญ | ๅฏ่€ƒ่™‘ไฝฟ็”จๅฐ็€‘ๅธƒๆตๅธƒๅฑ€ | ### โšก ๅŠŸ่ƒฝ็ผบๅคฑ | # | ๅŠŸ่ƒฝ | ไผ˜ๅ…ˆ็บง | ่ฏดๆ˜Ž | |---|------|--------|------| | 1 | ๅˆ†้กตๅŠ ่ฝฝ | P2 | ๅฝ“ๅ‰ๆ— ๅˆ†้กต | | 2 | ๆŽ’ๅบ็ญ›้€‰ | P3 | ๆŒ‰่ฏ„ๅˆ†/ๆต่งˆ้‡ๆŽ’ๅบ | --- ## ๐Ÿ”ฅ ็ƒญ้—จๆŽ’่กŒ้กต (HotPage) ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿ”ฅ ็ƒญ้—จๆŽ’่กŒ โ”‚ โ”‚ ๏ฟฝ่œ่ฐฑโ”‚๐Ÿฅฌ้ฃŸๆโ”‚๐Ÿ‘…ๅฃๅ‘ณโ”‚๐Ÿณๅทฅ่‰บ โ”‚ โ† Tabๅˆ‡ๆข โ”‚ โ”‚ โ”‚ ๐Ÿฅ‡ ็บข็ƒง่‚‰ โค๏ธ 2.3k [โ†’่ฏฆๆƒ…]โ”‚ โ”‚ ๐Ÿฅˆ ็‰›่‚‰้ข โค๏ธ 1.8k [โ†’่ฏฆๆƒ…]โ”‚ โ”‚ ๐Ÿฅ‰ ๅ‡‰ๆ‹Œ่œ โค๏ธ 1.5k [โ†’่ฏฆๆƒ…]โ”‚ โ”‚ 4. ๅฎซไฟ้ธกไธ โค๏ธ 1.2k [โ†’่ฏฆๆƒ…]โ”‚ โ”‚ 5. ็ณ–้†‹ๆŽ’้ชจ โค๏ธ 1.1k [โ†’่ฏฆๆƒ…]โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### ๏ฟฝ ้กต้ข่ง†ๅ›พๆ–‡ไปถ - `lib/src/pages/discover/hot_page.dart`๏ผˆไธป้กต้ข๏ผ‰ - `lib/src/controllers/hot_controller.dart`๏ผˆ็ƒญ้—จๆŽงๅˆถๅ™จ๏ผ‰ ### ๏ฟฝ ่ทณ่ฝฌๅ…ณ็ณป | ่งฆๅ‘ๅ…ƒ็ด  | ่ทณ่ฝฌๆ–นๅผ | ็›ฎๆ ‡้กต้ข | ่ทฏ็”ฑ | ไผ ๅ‚ | |---------|---------|---------|------|------| | ๆŽ’่กŒ่œ่ฐฑๅก็‰‡ | `Get.toNamed` | ่œๅ“่ฏฆๆƒ…้กต | `/recipe-detail` | id | | ๆŽ’่กŒ้ฃŸๆๅก็‰‡ | `Get.toNamed` | ้ฃŸๆ่ฏฆๆƒ…้กต | `/tools/ingredient` | ingredientId, ingredientName | | ๆŽ’่กŒๆ ‡็ญพ | `Get.toNamed` | ๆ ‡็ญพ่œ่ฐฑๅˆ—่กจ | `/tag-recipe-list` | tagName, tagId, tagType | ### ๐ŸŽจ ็พŽ่ง‚้—ฎ้ข˜ | # | ้—ฎ้ข˜ | ไธฅ้‡ๅบฆ | ๅปบ่ฎฎ | |---|------|--------|------| | 1 | ๆŽ’่กŒๆฆœๅ‰ไธ‰ๅ็ผบๅฐ‘่ง†่ง‰็ชๅ‡บ | ๐ŸŸกไธญ | ๅ‰ไธ‰ๅไฝฟ็”จ้‡‘้“ถ้“œ่‰ฒ+ๅคงๅทๆŽ’ๅ | | 2 | ๅˆ—่กจ้กนๆ ทๅผ่ฟ‡ไบŽ็ฎ€ๅ• | ๐ŸŸกไธญ | ๆทปๅŠ ๅฐ้ข็ผฉ็•ฅๅ›พ+่ฏ„ๅˆ†ๆ˜Ÿ็บง | --- ## ๐ŸŽฒ ไปŠๅคฉๅƒไป€ไนˆ (WhatToEatPage) ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐ŸŽฒ ไปŠๅคฉๅƒไป€ไนˆ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ๐Ÿ–ผ๏ธ ๆŽจ่่œ่ฐฑๅคงๅก โ”‚ โ”‚ โ† [โ†’่œๅ“่ฏฆๆƒ…้กต] โ”‚ โ”‚ ็บข็ƒง่‚‰ โ”‚ โ”‚ โ”‚ โ”‚ โญ4.5 ๐Ÿ‘๏ธ1.2k โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ”„ๆขไธ€ไธชโ”‚ โ”‚ ๐Ÿ“–็œ‹่ฏฆๆƒ…โ”‚ โ”‚ โ† ๆขไธ€ไธช=ๅˆทๆ–ฐ, ็œ‹่ฏฆๆƒ…=[โ†’่ฏฆๆƒ…] โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### ๐Ÿ“„ ้กต้ข่ง†ๅ›พๆ–‡ไปถ - `lib/src/pages/discover/what_to_eat_page.dart`๏ผˆไธป้กต้ข๏ผ‰ - `lib/src/controllers/what_to_eat_controller.dart`๏ผˆๆŽจ่ๆŽงๅˆถๅ™จ๏ผ‰ ### ๐Ÿ”— ่ทณ่ฝฌๅ…ณ็ณป | ่งฆๅ‘ๅ…ƒ็ด  | ่ทณ่ฝฌๆ–นๅผ | ็›ฎๆ ‡้กต้ข | ่ทฏ็”ฑ | ไผ ๅ‚ | |---------|---------|---------|------|------| | ๐Ÿ“– ็œ‹่ฏฆๆƒ… | `Get.toNamed` | ่œๅ“่ฏฆๆƒ…้กต | `/recipe-detail` | id | | ๐Ÿ”„ ๆขไธ€ไธช | ๆœฌ้กตๅˆทๆ–ฐ | ๆœฌ้กต | - | - | --- ## ๐Ÿƒ ่ฟทไฝ ๅก็‰‡้กต (MiniCardPage) ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ† ่ฟ”ๅ›ž ่ฟทไฝ ๅก็‰‡ ๐Ÿ” โ”‚ โ† CupertinoNavigationBar โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ [ๅ…จ้ƒจ][็ด ่œ][่ค่œ][ๆฐดไบง]... โ”‚ โ† ๆจชๅ‘ๅˆ†็ฑปๆ ‡็ญพ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿƒๅˆ†็ฑป โค๏ธ โญ ๐Ÿ“ค โ”‚ โ”‚ โ† ๆถฒๆ€็Žป็’ƒ้กถ้ƒจๆ“ไฝœๆ  โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ [่œๅ“ๅ›พ็‰‡] โ”‚ โ”‚ โ† _MiniCardImageView ็‹ฌ็ซ‹็ป„ไปถ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ† ๆถฒๆ€็Žป็’ƒๅบ•้ƒจไฟกๆฏๅŒบ โ”‚ โ”‚ โ”‚ ่œๅ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ๐Ÿท๏ธ ๅˆ†็ฑป ่ฏฆๆƒ… โ†’ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ‘Ž โ”‚ โค๏ธ โ”‚ โญ โ”‚ โ†ฉ๏ธ โ”‚ โ”‚ โ† ๅบ•้ƒจๆ“ไฝœๆŒ‰้’ฎ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘ 12/341 โ”‚ โ† ่ฟ›ๅบฆๆก โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ๅ…จๅฑๅ›พ็‰‡ๆŸฅ็œ‹ๅ™จ๏ผˆ็‚นๅ‡ปๅก็‰‡่งฆๅ‘๏ผ‰๏ผš โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โœ• 1/341 ๐Ÿ“คโค๏ธ โ”‚ โ† ๆถฒๆ€็Žป็’ƒ้กถๆ  โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ [ๅ…จๅฑ่œๅ“ๅ›พ็‰‡] โ”‚ โ† PageView ๅทฆๅณๆป‘ๅŠจ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ† ๆถฒๆ€็Žป็’ƒๅบ•้ƒจไฟกๆฏ โ”‚ โ”‚ ่œๅ โ”‚ โ”‚ โ”‚ โ”‚ ๐Ÿท๏ธ ๅˆ†็ฑป ยท ๆ่ฟฐ ่ฏฆๆƒ… โ†’ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ้ฆ–้กต็€‘ๅธƒๆต่ฟทไฝ ๅก็‰‡ๆจชๅน…๏ผš โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿƒ ่ฟทไฝ ๅก็‰‡ โ”‚ โ† ๆถฒๆ€็Žป็’ƒๆ ‡็ญพ โ”‚ โ”‚ โ”‚ [ๅ…จๅฎฝ่œๅ“ๅ›พ็‰‡] โ”‚ โ† MiniCardDiscoverCard โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ† ๆถฒๆ€็Žป็’ƒๅบ•้ƒจ โ”‚ โ”‚ ่œๅ ๐Ÿท๏ธๅˆ†็ฑป ๆŸฅ็œ‹ โ†’ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ็ฝ‘ๆ ผ่ง†ๅ›พๆจกๅผ๏ผš โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚[ๅ›พ็‰‡]โ”‚ โ”‚[ๅ›พ็‰‡]โ”‚ โ”‚[ๅ›พ็‰‡]โ”‚ โ”‚่œๅ โ”‚ โ”‚่œๅ โ”‚ โ”‚่œๅ โ”‚ โ”‚ๅˆ†็ฑป โ”‚ โ”‚ๅˆ†็ฑป โ”‚ โ”‚ๅˆ†็ฑป โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### ๐Ÿ“„ ้กต้ขๆ–‡ไปถ - `lib/src/pages/discover/mini_card_page.dart` โ€” ไธป้กต้ข+ๅ…จๅฑๆŸฅ็œ‹ๅ™จ+ๅ›พ็‰‡็ป„ไปถ - `lib/src/models/mini_card_model.dart` โ€” ๆ•ฐๆฎๆจกๅž‹ - `lib/src/services/data/mini_card_service.dart` โ€” ๆ•ฐๆฎๆœๅŠก๏ผˆ็ผ“ๅญ˜ไผ˜ๅ…ˆ๏ผ‰ - `lib/src/widgets/discover/mini_card_discover_card.dart` โ€” ็€‘ๅธƒๆตๆจชๅน…็ป„ไปถ ### ๐Ÿ”— ่ทณ่ฝฌๅ…ณ็ณป | ่งฆๅ‘ๅ…ƒ็ด  | ่ทณ่ฝฌๆ–นๅผ | ็›ฎๆ ‡้กต้ข | ่ทฏ็”ฑ | ไผ ๅ‚ | |---------|---------|---------|------|------| | ไธชไบบไธญๅฟƒ่ฟทไฝ ๅก็‰‡ | `Get.toNamed` | ่ฟทไฝ ๅก็‰‡้กต | `/mini-card` | - | | ้ฆ–้กต็€‘ๅธƒๆตๆจชๅน… | `Get.toNamed` | ่ฟทไฝ ๅก็‰‡้กต | `/mini-card` | initialRecipeId | | ๅก็‰‡็‚นๅ‡ป | ๅ…จๅฑๆŸฅ็œ‹ๅ™จ | ๆœฌ้กตๅผน็ช— | - | - | | ่ฏฆๆƒ…ๆŒ‰้’ฎ | `Get.toNamed` | ่œๅ“่ฏฆๆƒ…้กต | `/recipe-detail` | id | | ๆœ็ดข็ป“ๆžœ็‚นๅ‡ป | ๆœฌ้กต่ทณ่ฝฌ | ๆœฌ้กตๅฎšไฝ | - | index | ### ๐ŸŽจ ๅŠŸ่ƒฝ็‰นๆ€ง | # | ๅŠŸ่ƒฝ | ่ฏดๆ˜Ž | ็Šถๆ€ | |---|------|------|------| | 1 | ๐Ÿƒ ๅทฆๅณๆป‘ๅŠจ | ๆ‹–ๆ‹ฝ>80px่งฆๅ‘ๆป‘ๅŠจ๏ผŒๅŠจ็”ปๆ•ˆๆžœ | โœ… | | 2 | โค๏ธ ๅ–œๆฌข/ไธๅ–œๆฌข | ๆŒไน…ๅŒ–ๅˆฐSharedPreferences | โœ… | | 3 | โญ ๆ”ถ่— | ไธŽๅ…จๅฑ€ๆ”ถ่—็ณป็ปŸ่”ๅŠจ | โœ… | | 4 | ๐Ÿ” ๆœ็ดข | ๆœ็ดข่œๅ“ๅ็งฐ๏ผŒ็‚นๅ‡ป่ทณ่ฝฌๅฎšไฝ | โœ… | | 5 | ๐Ÿ“‚ ๅˆ†็ฑป็ญ›้€‰ | 11ไธชๅˆ†็ฑปๆจชๅ‘ๆปšๅŠจๆ ‡็ญพ | โœ… | | 6 | ๐Ÿ“ฑ ็ฝ‘ๆ ผ่ง†ๅ›พ | ๅก็‰‡/็ฝ‘ๆ ผๅŒ่ง†ๅ›พๅˆ‡ๆข | โœ… | | 7 | ๐Ÿ’พ ๆœฌๅœฐ็ผ“ๅญ˜ | 5-10ๆก่ฎฐๅฝ•ไธๅซๅ›พ็‰‡ | โœ… | | 8 | ๐Ÿ—‘๏ธ ็ผ“ๅญ˜็ฎก็† | ็ผ“ๅญ˜็ฎก็†้กตๅฏๆธ…็† | โœ… | | 9 | ๐Ÿ“Š ่ฟ›ๅบฆๆก | ๆ˜พ็คบๆต่งˆ่ฟ›ๅบฆ | โœ… | | 10 | ๐Ÿ  ็€‘ๅธƒๆตๅตŒๅ…ฅ | ้ฆ–้กต1:20ๆฏ”ไพ‹ๆ’ๅ…ฅ่ฟทไฝ ๅก็‰‡ๆจชๅน… | โœ… | | 11 | ๐Ÿ–ผ๏ธ ๅ›พ็‰‡็‹ฌ็ซ‹็ป„ไปถ | _MiniCardImageView ๆ–‡ๆœฌๅœจๅ›พ็‰‡ๅ†…ๅบ•้ƒจ | โœ… | | 12 | ๐ŸชŸ ๆถฒๆ€็Žป็’ƒ | ้กถ้ƒจๆ“ไฝœๆ +ๅบ•้ƒจไฟกๆฏๅŒบ GlassContainer | โœ… | | 13 | ๐Ÿ“ฑ ๅ…จๅฑๆŸฅ็œ‹ๅ™จ | PageView+ๅผ‚ๆญฅ้ข„ๅŠ ่ฝฝ5ๅผ ็›ธ้‚ปๅ›พ็‰‡ | โœ… | | 14 | ๐Ÿ“ค ๅˆ†ไบซ | share_plus ๅˆ†ไบซ่œๅ“ไฟกๆฏ+ๅ›พ็‰‡URL | โœ… | | 15 | ๐Ÿ’พ ็ผ“ๅญ˜ไผ˜ๅ…ˆ | ๆŸฅ็œ‹่ฟ‡ๅก็‰‡ๅญ˜ๅ…ฅ็ผ“ๅญ˜๏ผŒๅ…ˆๆ˜พ็คบ็ผ“ๅญ˜ | โœ… | | 16 | ๐Ÿ”— ่ทฏ็”ฑๅ‚ๆ•ฐ | initialRecipeId ไปŽ้ฆ–้กต่ทณ่ฝฌๆŒ‡ๅฎšๅก็‰‡ | โœ… | --- ## ๐Ÿ“Š ๅ…จๅฑ€็พŽ่ง‚้—ฎ้ข˜ๆฑ‡ๆ€ป | ไผ˜ๅ…ˆ็บง | ้—ฎ้ข˜ | ๅฝฑๅ“้กต้ข | ๅปบ่ฎฎ | ็Šถๆ€ | |--------|------|---------|------|------| | ๐ŸŸก้ซ˜ | ๆฏ›็Žป็’ƒๆ•ˆๆžœไฝฟ็”จไธไธ€่‡ด | ๅ…จๅฑ€ | ็ปŸไธ€GlassCard็ป„ไปถ๏ผŒๆ‰€ๆœ‰ๅก็‰‡ไฝฟ็”จ็›ธๅŒๆฏ›็Žป็’ƒๅ‚ๆ•ฐ | โœ…ๅทฒ็ปŸไธ€ | | ๐ŸŸก้ซ˜ | ๅก็‰‡ๅœ†่ง’ไธ็ปŸไธ€ | ๅ…จๅฑ€ | ็ปŸไธ€ไฝฟ็”จDesignTokens.radiusMd/Lg | โœ…ๅทฒ็ปŸไธ€(89ๅค„) | | ๐ŸŸก้ซ˜ | ้ขœ่‰ฒไฝฟ็”จๅถๅฐ”็กฌ็ผ–็  | ๅ…จๅฑ€ | ไธฅๆ ผไฝฟ็”จDesignTokens้ขœ่‰ฒๅ˜้‡ | โœ…ๅทฒ็ปŸไธ€(20ๅค„) | | ๐ŸŸกไธญ | ็ฉบ็Šถๆ€้กต้ข็ผบๅฐ‘ๆ’็”ป | ๅคšไธช้กต้ข | ่ฎพ่ฎก็ปŸไธ€็š„็ฉบ็Šถๆ€ๆ’็”ป+ๆ–‡ๆกˆ | โœ…ๅทฒๅขžๅผบ(GlassCardๅŒ…่ฃน) | | ๐ŸŸกไธญ | ๅŠ ่ฝฝ็Šถๆ€ไธ็ปŸไธ€ | ๅ…จๅฑ€ | ็ปŸไธ€้ชจๆžถๅฑๆ ทๅผๅ’ŒๅŠจ็”ป | โœ…ๅทฒๅขžๅผบ(LoadingIndicator) | | ๐ŸŸขไฝŽ | ้กต้ข่ฝฌๅœบๅŠจ็”ปๅ•่ฐƒ | ๅ…จๅฑ€ | ๆทปๅŠ iOS้ฃŽๆ ผๆป‘ๅ…ฅๅŠจ็”ป | ๐Ÿ”ดๅพ…ๅผ€ๅ‘ | ## ๐Ÿ“Š ๅ…จๅฑ€ๅŠŸ่ƒฝ็ผบๅคฑๆฑ‡ๆ€ป | ไผ˜ๅ…ˆ็บง | ๅŠŸ่ƒฝ | ๅฝฑๅ“้กต้ข | ่ฏดๆ˜Ž | ็Šถๆ€ | |--------|------|---------|------|------| | P1 | ไธ‹ๆ‹‰ๅˆทๆ–ฐ | ้ฆ–้กต/ๅ‘็Žฐ | ็ผบๅฐ‘ไธ‹ๆ‹‰ๆ‰‹ๅŠฟๅˆทๆ–ฐ | ๐Ÿ”ดๅพ…ๅผ€ๅ‘ | | P2 | ๆœ็ดขๅކๅฒ | ๆœ็ดข้กต | ๆ— ๆœฌๅœฐๆœ็ดข่ฎฐๅฝ• | ๐Ÿ”ดๅพ…ๅผ€ๅ‘ | | P2 | ๅˆ†้กตๅŠ ่ฝฝ | ๅคšไธชๅˆ—่กจ้กต | ๅˆ†็ฑปๆต่งˆ/ๆ ‡็ญพๅˆ—่กจๆ— ๅˆ†้กต | ๐Ÿ”ดๅพ…ๅผ€ๅ‘ | | P2 | ็›ธๅ…ณๆŽจ่ | ่ฏฆๆƒ…้กต | ็ผบๅฐ‘็›ธๅ…ณ่œ่ฐฑๆŽจ่ | โœ…v0.92.0 | | P2 | ็ƒน้ฅชๆจกๅผ | ่ฏฆๆƒ…้กต | ๅ…จๅฑๆญฅ้ชค+่ฎกๆ—ถๅ™จ | ๐Ÿ”ดๅพ…ๅผ€ๅ‘ | | P2 | ่ฟ‡ๆ•ๅŽŸ่ญฆ็คบ | ่ฏฆๆƒ…้กต | ้ฃŸๆๅซ่ฟ‡ๆ•ๅŽŸๆ—ถ่ญฆๅ‘Š | โœ…v0.92.0 | | P2 | ่ฅๅ…ปๅฏ่ง†ๅŒ– | ่ฏฆๆƒ…้กต | ็Žฏๅฝขๅ›พ/่ฟ›ๅบฆๆกๅฑ•็คบ่ฅๅ…ปๅ ๆฏ” | โœ…v0.92.0 | | P3 | ๆŽ’ๅบ็ญ›้€‰ | ๅˆ—่กจ้กต | ๆŒ‰่ฏ„ๅˆ†/ๆต่งˆ้‡/ๆœ€ๆ–ฐๆŽ’ๅบ | ๐Ÿ”ดๅพ…ๅผ€ๅ‘ | | P3 | ่ฏ„่ฎบ็ณป็ปŸ | ่ฏฆๆƒ…้กต | ้œ€ๅŽ็ซฏๆ”ฏๆŒ | ๐Ÿ”ด้œ€ๅŽ็ซฏ | | P3 | ็”จๆˆท็ญ‰็บง | ไธชไบบไธญๅฟƒ | ็ป้ชŒๅ€ผ+็ญ‰็บง+ๅพฝ็ซ  | ๐Ÿ”ด้œ€ๅŽ็ซฏ | --- ## ๐Ÿ”Œ API่ƒฝๅŠ›ๅˆ†ๆž๏ผšๅฏๅขžๅŠ ๅŠŸ่ƒฝ > ๅŸบไบŽ `APP_GUIDE.md`(v2.9.0) ๅ’Œ `API_DOC.md`(v3.2.0) ๅ…จ้ขๅˆ†ๆž๏ผŒ2026-04-13 ๆ›ดๆ–ฐ ### ๐Ÿ“Š ๅทฒไฝฟ็”จAPIๆŽฅๅฃไธ€่งˆ | ๆŽฅๅฃๆ–‡ไปถ | Repository | ๅทฒ็”จact | ็Šถๆ€ | |---------|-----------|---------|------| | `api.php` | RecipeRepository | list/detail/full/ingredients/ingredient_detail/search/categories/tags/stats/unified_list/unified_detail/unified_search/unified_hot/query/mini | โœ… | | `api_action.php` | ActionRepository | like/rate/view/ip_status | โœ… | | `api_feed.php` | FeedRepository | recommend/latest/hot/prefetch | โœ… | | `api_filter.php` | RecipeRepository+SearchController | recipe_main_categories/taste_tags/cooking_tags/filter_recipes/global_search/meal_times/recipe_sub_categories/ingredient_main_categories/ingredient_sub_categories/category_tags/filter_ingredients/ingredient_recipes | โœ… | | `api_hot.php` | HotRepository(โ†’stats_full.php?act=hot) | hot(sort=view/like/rate) | โœ… | | `api_what_to_eat.php` | WhatToEatRepository | filter_apply/detail/filter_steps | โœ… | | `api_discover.php` | DiscoverRepository | ้šๆœบๆ•ฐๆฎ | โœ… | | `api_check_duplicate.php` | RecipeRepository | check_title/check_ingredient/check_step/check_content/check_all | โœ…v0.92.0 | | `stats_full.php` | StatsRepository | online/request/hot/stats | โœ… | | ้™ๆ€ๆ•ฐๆฎ | ้ƒจๅˆ†ไฝฟ็”จ | eating_times.json(โœ…)/nutrition_types.json(โœ…)/gmy.json(โœ…) | โœ…v0.92.0 | ### ๐Ÿ“Š ๆœชไฝฟ็”จAPIๆŽฅๅฃไธ€่งˆ > ๆณจ๏ผšไปฅไธ‹ๆŽฅๅฃๅœจv0.92.0็‰ˆๆœฌๅทฒๅคง้ƒจๅˆ†ๅฎž็Žฐ๏ผŒไป…ไฟ็•™ๅฐ‘้‡ๅพ…ๅผ€ๅ‘ๆŽฅๅฃ | ๆŽฅๅฃ | act/ๅ‚ๆ•ฐ | ๆ–‡ๆกฃๆ่ฟฐ | ๅฝ“ๅ‰็Šถๆ€ | |------|---------|---------|---------| | `api.php?act=unified_list&type=ingredient` | unified_list&type=ingredient | ็ปŸไธ€ๆ ผๅผ้ฃŸๆๅˆ—่กจ | ๐Ÿ”ดๅพ…ๅผ€ๅ‘ | | `api.php?act=unified_detail&type=ingredient` | unified_detail&type=ingredient | ็ปŸไธ€ๆ ผๅผ้ฃŸๆ่ฏฆๆƒ… | ๐Ÿ”ดๅพ…ๅผ€ๅ‘ | | `api.php?act=unified_hot&type=ingredient` | unified_hot&type=ingredient | ็ปŸไธ€ๆ ผๅผ้ฃŸๆ็ƒญ้—จ | ๐Ÿ”ดๅพ…ๅผ€ๅ‘ | --- ### ๐ŸŸข ๅทฒๆœ‰APIๅฏ็›ดๆŽฅๅผ€ๅ‘๏ผˆP2ไผ˜ๅ…ˆ็บง๏ผ‰ > ๆณจ๏ผšไปฅไธ‹ๅŠŸ่ƒฝๅœจv0.92.0็‰ˆๆœฌๅทฒๅ…จ้ƒจๅฎž็Žฐ ### ๐ŸŸก ้œ€็ป„ๅˆAPIๅผ€ๅ‘๏ผˆP3ไผ˜ๅ…ˆ็บง๏ผ‰ | # | ๅŠŸ่ƒฝ | ๆ‰€้œ€API | ้กต้ขไฝ็ฝฎ | ๅผ€ๅ‘ๅคๆ‚ๅบฆ | ็Šถๆ€ | |---|------|---------|---------|-----------|------| | 1 | ๐Ÿง  ๆ™บ่ƒฝๆŽจ่ | `api_feed.php?act=recommend` + `api_filter.php?act=filter_recipes` + `gmy.json` + ็”จๆˆทๅๅฅฝ่ฎพ็ฝฎ | ้ฆ–้กต | โญโญโญโญ | ๐Ÿ”ดๅพ…ๅผ€ๅ‘ | | 2 | ๐Ÿ“… ๆฏๆ—ฅ่œๅ•่ง„ๅˆ’ | `api_what_to_eat.php?act=filter_apply` ร— 3ๆฌก + `eating_times.json` | ๅทฅๅ…ทไธญๅฟƒ | โญโญโญ | ๐Ÿ”ดๅพ…ๅผ€ๅ‘ | | 3 | ๐Ÿ“ฑ ไบŒ็ปด็ ๆตทๆŠฅ | `api.php?act=detail` codeๅญ—ๆฎต + qr_flutterๅบ“ | ่œๅ“่ฏฆๆƒ…้กต | โญโญ | ๐Ÿ”ดๅพ…ๅผ€ๅ‘ | | 4 | ๐Ÿ”— ็คพไบคๅˆ†ไบซๅขžๅผบ | `api.php?act=detail` codeๅญ—ๆฎต + `api_hot.php` statistics | ่œๅ“่ฏฆๆƒ…้กต | โญโญ | ๐Ÿ”ดๅพ…ๅผ€ๅ‘ | | 5 | ๐Ÿ‹๏ธ ๅฅ่บซ้คๆŽจ่ | `api_filter.php?act=filter_recipes` nutrition_min/max + nutrition_types.json | ๅทฅๅ…ทไธญๅฟƒ/ๅ‘็Žฐ้กต | โญโญโญ | โœ…v0.92.0 | | 6 | ๐Ÿ“‹ ่ฟ‡ๆ•ๅŽŸๆŠฅๅ‘Š | `api.php?act=full` allergens + `gmy.json` | ่œๅ“่ฏฆๆƒ…้กต | โญโญโญ | โœ…v0.92.0 | | 7 | ๐Ÿฅ— ้ฃŸๆ่ฅๅ…ป่ฏฆๆƒ… | `api.php?act=ingredient_detail` + `nutrition_types.json` | ้ฃŸๆ่ฏฆๆƒ…้กต | โญโญ | โœ…v0.92.0 | | 8 | ๐Ÿ”„ ้ฃŸๆๆ›ฟไปฃๅปบ่ฎฎ | `api_filter.php?act=filter_recipes` ingredientๅ‚ๆ•ฐ + `gmy.json` | ้ฃŸๆ่ฏฆๆƒ…้กต | โญโญโญ | โœ…v0.92.0 | | 9 | ๐Ÿ“ˆ ่ฅๅ…ป็›ฎๆ ‡่ฟฝ่ธช | `api.php?act=full` nutrition ร— ๅคš่œ่ฐฑ + `nutrition_types.json` | ่ฅๅ…ปไธญๅฟƒ | โญโญโญโญ | โœ…v0.92.0 | | 10 | ๐Ÿท๏ธ ็ปŸไธ€ๆ ผๅผ่พ“ๅ‡บ | `api.php?act=unified_list/detail/search/hot` type=ingredient | ้ฃŸๆ็›ธๅ…ณ้กต้ข | โญโญ | ๐Ÿ”ดๅพ…ๅผ€ๅ‘ | ### ๐Ÿ”ด ้œ€ๅŽ็ซฏๆ–ฐๅผ€ๅ‘API | # | ๅŠŸ่ƒฝ | ๅปบ่ฎฎๆŽฅๅฃ | ไผ˜ๅ…ˆ็บง | ๅผ€ๅ‘ๅปบ่ฎฎ | ่ฏดๆ˜Ž | |---|------|---------|--------|---------|------| | 1 | ๐Ÿ‘ค ็”จๆˆทๆณจๅ†Œ็™ปๅฝ• | `api_user.php` | P1 | ๆš‚ไธๅผ€ๅ‘ | ้œ€่ฆ็”จๆˆท่ฎค่ฏไฝ“็ณป๏ผŒๅฝ“ๅ‰้˜ถๆฎตไธๆถ‰ๅŠ | | 2 | ๐Ÿ’พ ๆ”ถ่—ไบ‘็ซฏๅŒๆญฅ | `api_favorite.php` | P1 | CRUDๆŽฅๅฃ | ๅฝ“ๅ‰ๆ”ถ่—ไป…ๆœฌๅœฐๅญ˜ๅ‚จ๏ผŒ้œ€ไบ‘็ซฏๅŒๆญฅๆ”ฏๆŒๅคš่ฎพๅค‡ | | 3 | ๐Ÿ’ฌ ่ฏ„่ฎบ็ณป็ปŸ | `api_comment.php` | P2 | CRUD+ๅˆ†้กต | ไบ’ๅŠจๅŠŸ่ƒฝ๏ผŒ้œ€้˜ฒๅˆท+ๅฎกๆ ธๆœบๅˆถ | | 4 | ๐Ÿ”” ๆถˆๆฏๆŽจ้€ | `api_message.php` | P2 | ๆŽจ้€+็ซ™ๅ†…ไฟก | ๅŽ็ปญๅฏ่ƒฝไฝฟ็”จ้‚ฎ็ฎฑๅฎž็Žฐ | | 5 | ๐Ÿ“œ ๆต่งˆๅކๅฒๅŒๆญฅ | `api_history.php` | P2 | CRUD+ๅˆ†้กต | ๅฝ“ๅ‰ไป…ๆœฌๅœฐๅญ˜ๅ‚จ๏ผŒ้œ€ไบ‘็ซฏๅŒๆญฅ | | 6 | ๐Ÿ“ ่œ่ฐฑไธŠไผ  | `api_recipe.php` | P2 | ่กจๅ•ๆไบค+ๅ›พ็‰‡ไธŠไผ  | UGCๅ†…ๅฎน๏ผŒ้œ€ๅฎกๆ ธๆต็จ‹ | | 7 | ๐Ÿ”„ ็›ธๅ…ณ่œ่ฐฑๆŽจ่ | `api.php?act=related&id=` | P2 | ๅŸบไบŽๅˆ†็ฑป+ๆ ‡็ญพ+้ฃŸๆ็›ธไผผๅบฆ | ่ฏฆๆƒ…้กตๅบ•้ƒจๆŽจ่็›ธไผผ่œๅ“๏ผŒๅฏๅŸบไบŽๅŒๅˆ†็ฑป+ๅŒๆ ‡็ญพๅฎž็Žฐ | | 8 | ๐Ÿ” ๆœ็ดขๅปบ่ฎฎ/่กฅๅ…จ | `api.php?act=suggest&keyword=` | P3 | ๅ‰็ผ€ๅŒน้…+็ƒญ้—จ่ฏ | ่พ“ๅ…ฅๆ—ถๅฎžๆ—ถๅปบ่ฎฎ๏ผŒ้œ€ๅŽ็ซฏๅปบ็ซ‹ๆœ็ดข็ดขๅผ• | | 9 | ๐Ÿ“Š ็”จๆˆท่ฅๅ…ป็›ฎๆ ‡ | `api_nutrition.php` | P3 | CRUD+ๆฏๆ—ฅ็ปŸ่ฎก | ๆฏๆ—ฅ่ฅๅ…ปๆ‘„ๅ…ฅ็›ฎๆ ‡่ฟฝ่ธช๏ผŒ้œ€็”จๆˆท็ณป็ปŸ | | 10 | ๐Ÿ† ็”จๆˆทๆˆๅฐฑ็ณป็ปŸ | `api_achievement.php` | P3 | ็ป้ชŒๅ€ผ+็ญ‰็บง+ๅพฝ็ซ  | ้œ€็”จๆˆท็ณป็ปŸๆ”ฏๆ’‘ | | 11 | ๐Ÿ“ ็ƒน้ฅช็ฌ”่ฎฐๅŒๆญฅ | `api_note.php` | P2 | CRUD+ๅˆ†้กต | ๅฝ“ๅ‰็ฌ”่ฎฐไป…ๆœฌๅœฐHiveๅญ˜ๅ‚จ๏ผŒ้œ€ไบ‘็ซฏๅŒๆญฅ | | 12 | ๐Ÿ›’ ่ดญ็‰ฉๆธ…ๅ•ๅŒๆญฅ | `api_shopping.php` | P2 | CRUD | ๅฝ“ๅ‰่ดญ็‰ฉๆธ…ๅ•ไป…ๆœฌๅœฐๅญ˜ๅ‚จ | | 13 | โฐ ๆฏๅ‘จ่œๅ•ๅญ˜ๅ‚จ | `api_menu.php` | P2 | CRUD+ๆ—ฅๆœŸ่Œƒๅ›ด | ๅฝ“ๅ‰่œๅ•่ง„ๅˆ’ๅŠŸ่ƒฝๆ— ๆŒไน…ๅŒ– | --- ### ๐ŸŽฏ ๆŽจ่ๅผ€ๅ‘่ทฏ็บฟๅ›พ #### ็ฌฌไธ€้˜ถๆฎต๏ผšๅฟซ้€Ÿ่งๆ•ˆ๏ผˆๅˆฉ็”จๅทฒๆœ‰API๏ผŒ1-2ๅคฉ/ๅŠŸ่ƒฝ๏ผ‰ | ้กบๅบ | ๅŠŸ่ƒฝ | ไปทๅ€ผ | ๅทฅไฝœ้‡ | |------|------|------|--------| | 1 | ๐Ÿ† ่ฏ„ๅˆ†ๆŽ’่กŒๆฆœ | ็ƒญ้—จ้กตๅขžๅŠ ่ฏ„ๅˆ†ๆŽ’ๅบ | ๆžๅฐ(ๆ”นsortๅ‚ๆ•ฐ) | | 2 | ๐ŸŒ IP็Šถๆ€ๆ˜พ็คบ | ่ฏ„ๅˆ†ๅ‰ๆ˜พ็คบๅ‰ฉไฝ™ๆฌกๆ•ฐ | ๆžๅฐ(ๅทฒๆœ‰ๆ–นๆณ•) | | 3 | ๐Ÿ” ๆŽ’้™ค็ญ›้€‰ | ้ซ˜็บงๆœ็ดขๅขžๅŠ ๆŽ’้™ค้€‰้กน | ๅฐ(ๅขžๅŠ UI+ๅ‚ๆ•ฐ) | | 4 | ๐Ÿ• ็”จ้คๆ—ถๆฎตๆŽจ่ | ๆ นๆฎๆ—ถ้—ดๆ™บ่ƒฝๆŽจ่ | ๅฐ(ๆ–ฐ้กต้ข+API) | | 5 | โš ๏ธ ่ฟ‡ๆ•ๅŽŸ่ญฆ็คบ | ่ฏฆๆƒ…้กตๅฎ‰ๅ…จๆ้†’ | ๅฐ(ๅฑ•็คบๅทฒๆœ‰ๅญ—ๆฎต) | #### ็ฌฌไบŒ้˜ถๆฎต๏ผšไฝ“้ชŒๆๅ‡๏ผˆ็ป„ๅˆAPI๏ผŒ3-5ๅคฉ/ๅŠŸ่ƒฝ๏ผ‰ | ้กบๅบ | ๅŠŸ่ƒฝ | ไปทๅ€ผ | ๅทฅไฝœ้‡ | |------|------|------|--------| | 6 | ๐Ÿ“Š ่ฅๅ…ปๅฏ่ง†ๅŒ– | ่ฏฆๆƒ…้กต็Žฏๅฝขๅ›พๅฑ•็คบ | ไธญ(ๅฏ่ง†ๅŒ–็ป„ไปถ) | | 7 | ๐Ÿท๏ธ ๅˆ†็ฑปๆ ‡็ญพ่”ๅŠจ | ็ญ›้€‰ไฝ“้ชŒๆๅ‡ | ไธญ(่”ๅŠจ้€ป่พ‘) | | 8 | ๐Ÿฅ— ้ฃŸๆๅˆ†็ฑปๆต่งˆ | ้ฃŸๆๆต่งˆไฝ“้ชŒๅฎŒๅ–„ | ไธญ(ๆ–ฐ้กต้ข) | | 9 | ๐ŸŽฒ ็ญ›้€‰ๆญฅ้ชคๅผ•ๅฏผ | "ๅƒไป€ไนˆ"ไฝ“้ชŒไผ˜ๅŒ– | ไธญ(ๆญฅ้ชคUI) | | 10 | ๐Ÿ“ฑ ่ฟทไฝ ไฟกๆฏๅŠ ่ฝฝ | ๅˆ—่กจ้กตๆ€ง่ƒฝไผ˜ๅŒ– | ไธญ(ๆ”น้€ ๅŠ ่ฝฝ้€ป่พ‘) | #### ็ฌฌไธ‰้˜ถๆฎต๏ผšๆทฑๅบฆๅŠŸ่ƒฝ๏ผˆ้œ€ๅŽ็ซฏ้…ๅˆๆˆ–ๅคๆ‚้€ป่พ‘๏ผ‰ | ้กบๅบ | ๅŠŸ่ƒฝ | ไปทๅ€ผ | ๅทฅไฝœ้‡ | |------|------|------|--------| | 11 | ๐Ÿ“… ๆฏๆ—ฅ่œๅ•่ง„ๅˆ’ | ่œๅ•่ง„ๅˆ’ๅทฅๅ…ท | ๅคง(ๆ–ฐ้กต้ข+้€ป่พ‘) | | 12 | ๐Ÿ‹๏ธ ๅฅ่บซ้คๆŽจ่ | ๅฅๅบท้ฅฎ้ฃŸๅŠŸ่ƒฝ | ๅคง(่ฅๅ…ป็›ฎๆ ‡+็ญ›้€‰) | | 13 | ๐Ÿง  ๆ™บ่ƒฝๆŽจ่ | ไธชๆ€งๅŒ–ๆŽจ่ | ๅคง(ๆŽจ่็ฎ—ๆณ•) | | 14 | ๐Ÿ”„ ็›ธๅ…ณ่œ่ฐฑๆŽจ่ | ่ฏฆๆƒ…้กตๆŽจ่ | ้œ€ๅŽ็ซฏๅผ€ๅ‘API | --- ## ๐Ÿ“‹ ๅทฒๅฎŒๆˆๅŠŸ่ƒฝ่ฎฐๅฝ• > 2026-04-13 ๆ›ดๆ–ฐ | ้˜ถๆฎต | ๅŠŸ่ƒฝ | ๆถ‰ๅŠๆ–‡ไปถ | |------|------|---------| | ไธ‰ๅไบŒ | ไธป้ข˜่‰ฒๅ…จๅฑ€็”Ÿๆ•ˆไฟฎๅค | DesignTokens.dynamicPrimaryๆ›ฟๆข(59ๆ–‡ไปถ439ๅค„) | | ไธ‰ๅไธ‰ | ๅ…จๅฑ€UI็ปŸไธ€ | ๅœ†่ง’89ๅค„+้ขœ่‰ฒ20ๅค„+EmptyState+LoadingIndicator | | ไธ‰ๅๅ›› | ้ฃŸๆ่ฏฆๆƒ…ๆœฌๅœฐ็ผ“ๅญ˜ | IngredientModel.toJson+RecipeRepository็ผ“ๅญ˜+CacheManagePage้ฃŸๆ็ฎก็† |