Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .github/workflows/PROJECT-FLUTTER-CI.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -473,6 +473,26 @@ jobs:
echo "โœ… Java setup completed"
java -version

# Release Keystore ์„ค์ • (secrets๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ)
- name: Setup Release Keystore
if: ${{ secrets.RELEASE_KEYSTORE_BASE64 != '' }}
run: |
mkdir -p android/app/keystore
echo "${{ secrets.RELEASE_KEYSTORE_BASE64 }}" | base64 -d > android/app/keystore/key.jks
echo "โœ… Release Keystore ์ƒ์„ฑ ์™„๋ฃŒ"

# key.properties ์ƒ์„ฑ (secrets๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ)
- name: Create key.properties
if: ${{ secrets.RELEASE_KEYSTORE_BASE64 != '' }}
run: |
cat > android/key.properties << EOF
storeFile=app/keystore/key.jks
storePassword=${{ secrets.RELEASE_KEYSTORE_PASSWORD }}
keyAlias=${{ secrets.RELEASE_KEY_ALIAS }}
keyPassword=${{ secrets.RELEASE_KEY_PASSWORD }}
EOF
echo "โœ… key.properties ์ƒ์„ฑ ์™„๋ฃŒ"

# Gradle ์…‹์—…
- name: Setup Gradle
working-directory: android
Expand Down
29 changes: 26 additions & 3 deletions CHANGELOG.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,34 @@
{
"metadata": {
"lastUpdated": "2026-02-23T04:16:06Z",
"currentVersion": "1.0.42",
"lastUpdated": "2026-02-23T07:48:34Z",
"currentVersion": "1.0.45",
"projectType": "flutter",
"totalReleases": 13
"totalReleases": 14
},
"releases": [
{
"version": "1.0.45",
"project_type": "flutter",
"date": "2026-02-23",
"pr_number": 45,
"raw_summary": "## Summary by CodeRabbit\n\n## v1.0.45 ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ\n\n* **์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ**\n * AI ์ถ”์ถœ ๋ฒ„ํŠผ์ด ํ•˜๋‹จ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”์˜ ์ค‘์•™์— ํ†ตํ•ฉ๋˜์–ด ๋” ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.\n\n* **๊ฐœ์„ ์‚ฌํ•ญ**\n * ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ (v1.0.45)\n * ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค ๊ฐœ์„ ์œผ๋กœ ๋” ์•ˆ์ •์ ์ธ ๋ฆด๋ฆฌ์Šค ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค.",
"parsed_changes": {
"์ƒˆ๋กœ์šด_๊ธฐ๋Šฅ": {
"title": "์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ",
"items": [
"AI ์ถ”์ถœ ๋ฒ„ํŠผ์ด ํ•˜๋‹จ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”์˜ ์ค‘์•™์— ํ†ตํ•ฉ๋˜์–ด ๋” ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."
]
},
"๊ฐœ์„ ์‚ฌํ•ญ": {
"title": "๊ฐœ์„ ์‚ฌํ•ญ",
"items": [
"๋ฒ„์ „ ์—…๋ฐ์ดํŠธ (v1.0.45)",
"๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค ๊ฐœ์„ ์œผ๋กœ ๋” ์•ˆ์ •์ ์ธ ๋ฆด๋ฆฌ์Šค ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค."
]
}
},
"parse_method": "markdown"
},
{
"version": "1.0.42",
"project_type": "flutter",
Expand Down
17 changes: 15 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,20 @@
# Changelog

**ํ˜„์žฌ ๋ฒ„์ „:** 1.0.42
**๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ:** 2026-02-23T04:16:06Z
**ํ˜„์žฌ ๋ฒ„์ „:** 1.0.45
**๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ:** 2026-02-23T07:48:34Z

---

## [1.0.45] - 2026-02-23

**PR:** #45

**์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ**
- AI ์ถ”์ถœ ๋ฒ„ํŠผ์ด ํ•˜๋‹จ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”์˜ ์ค‘์•™์— ํ†ตํ•ฉ๋˜์–ด ๋” ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

**๊ฐœ์„ ์‚ฌํ•ญ**
- ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ (v1.0.45)
- ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค ๊ฐœ์„ ์œผ๋กœ ๋” ์•ˆ์ •์ ์ธ ๋ฆด๋ฆฌ์Šค ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

---

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@ samples, guidance on mobile development, and a full API reference.
---

<!-- AUTO-VERSION-SECTION: DO NOT EDIT MANUALLY -->
## ์ตœ์‹  ๋ฒ„์ „ : v1.0.42 (2026-02-23)
## ์ตœ์‹  ๋ฒ„์ „ : v1.0.43 (2026-02-23)

[์ „์ฒด ๋ฒ„์ „ ๊ธฐ๋ก ๋ณด๊ธฐ](CHANGELOG.md)
9 changes: 6 additions & 3 deletions android/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,12 @@ android {

buildTypes {
release {
signingConfig = signingConfigs.getByName("release")
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
// key.properties๊ฐ€ ์žˆ์œผ๋ฉด release ์„œ๋ช…, ์—†์œผ๋ฉด debug ์„œ๋ช…์œผ๋กœ fallback
signingConfig = if (keystorePropertiesFile.exists()) {
signingConfigs.getByName("release")
} else {
signingConfigs.getByName("debug")
}
}
}
}
Expand Down
68 changes: 49 additions & 19 deletions lib/common/widgets/main_scaffold.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ import 'package:go_router/go_router.dart';
import '../constants/home_colors.dart';
import '../../routing/route_paths.dart';

/// ๋ฉ”์ธ ๋„ค๋น„๊ฒŒ์ด์…˜ ์…ธ (ํ•˜๋‹จ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ” + FAB)
/// ๋ฉ”์ธ ๋„ค๋น„๊ฒŒ์ด์…˜ ์…ธ (ํ•˜๋‹จ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ” + ์ค‘์•™ AI ์ถ”์ถœ ๋ฒ„ํŠผ)
///
/// StatefulShellRoute์˜ builder์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ,
/// 4ํƒญ(ํ™ˆ/๊ฒ€์ƒ‰/์ง€๋„/๋งˆ์ด) + ์ค‘์•™ FAB(AI ์ถ”์ถœ) ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
/// 4ํƒญ(ํ™ˆ/๊ฒ€์ƒ‰/์ง€๋„/๋งˆ์ด) + ์ค‘์•™ ๋ฒ„ํŠผ(AI ์ถ”์ถœ) ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
class MainScaffold extends StatelessWidget {
const MainScaffold({
super.key,
Expand All @@ -21,41 +21,29 @@ class MainScaffold extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
body: navigationShell,
floatingActionButton: SizedBox(
width: 56.w,
height: 56.w,
child: FloatingActionButton(
onPressed: () {
context.push(RoutePaths.aiExtraction);
},
elevation: 2,
backgroundColor: HomeColors.textPrimary,
foregroundColor: HomeColors.background,
shape: const CircleBorder(),
child: Icon(Icons.add, size: 28.sp),
),
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
bottomNavigationBar: _BottomNavBar(
currentIndex: navigationShell.currentIndex,
onTap: (index) => navigationShell.goBranch(
index,
initialLocation: index == navigationShell.currentIndex,
),
onAddTap: () => context.push(RoutePaths.aiExtraction),
),
);
}
}

/// ํ•˜๋‹จ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ” (4ํƒญ + ์ค‘์•™ FAB ๊ณต๊ฐ„)
/// ํ•˜๋‹จ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ” (4ํƒญ + ์ค‘์•™ AI ์ถ”์ถœ ๋ฒ„ํŠผ)
class _BottomNavBar extends StatelessWidget {
const _BottomNavBar({
required this.currentIndex,
required this.onTap,
required this.onAddTap,
});

final int currentIndex;
final ValueChanged<int> onTap;
final VoidCallback onAddTap;

@override
Widget build(BuildContext context) {
Expand Down Expand Up @@ -86,7 +74,7 @@ class _BottomNavBar extends StatelessWidget {
isSelected: currentIndex == 1,
onTap: () => onTap(1),
),
SizedBox(width: 56.w), // FAB ๊ณต๊ฐ„
_CenterAddButton(onTap: onAddTap),
_NavItem(
icon: Icons.map_outlined,
activeIcon: Icons.map,
Expand All @@ -109,6 +97,48 @@ class _BottomNavBar extends StatelessWidget {
}
}

/// ์ค‘์•™ + ๋ฒ„ํŠผ (AI ์žฅ์†Œ ์ถ”์ถœ ์ง„์ž…์ )
class _CenterAddButton extends StatelessWidget {
const _CenterAddButton({
required this.onTap,
});

final VoidCallback onTap;

@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: onTap,
behavior: HitTestBehavior.opaque,
child: SizedBox(
width: 64.w,
child: Center(
child: Container(
width: 48.w,
height: 48.w,
decoration: BoxDecoration(
color: HomeColors.textPrimary,
shape: BoxShape.circle,
boxShadow: [
BoxShadow(
color: HomeColors.textPrimary.withValues(alpha: 0.2),
blurRadius: 4,
offset: const Offset(0, 2),
),
],
),
child: Icon(
Icons.add,
size: 28.sp,
color: HomeColors.background,
),
),
),
),
);
}
}

/// ๋„ค๋น„๊ฒŒ์ด์…˜ ์•„์ดํ…œ (์•„์ด์ฝ˜ + ๋ผ๋ฒจ)
class _NavItem extends StatelessWidget {
const _NavItem({
Expand Down
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: mapsy
description: "MapSy - Flutter Application"
publish_to: "none"
version: 1.0.43+43
version: 1.0.45+45
environment:
sdk: ^3.9.2
dependencies:
Expand Down
6 changes: 3 additions & 3 deletions version.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,11 @@
# - ๋ฒ„์ „์€ ํ•ญ์ƒ ๋†’์€ ๋ฒ„์ „์œผ๋กœ ์ž๋™ ๋™๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค
# ===================================================================

version: "1.0.43"
version_code: 44 # app build number
version: "1.0.45"
version_code: 46 # app build number
project_type: "flutter" # spring, flutter, react, react-native, react-native-expo, node, python, basic
metadata:
last_updated: "2026-02-23 05:44:25"
last_updated: "2026-02-23 07:34:32"
last_updated_by: "Cassiiopeia"
default_branch: "main"
integrated_from: "SUH-DEVOPS-TEMPLATE"
Expand Down