perf: 파싱/렌더 최적화 다수 적용

- SmsScanner 키워드/정규식 상수화로 반복 컴파일 제거\n- 리스트에 prototypeItem 추가, 카드 RepaintBoundary 적용\n- 차트 영역 RepaintBoundary로 페인트 분리\n- GlassmorphicScaffold 파티클 수를 disableAnimations에 따라 감소\n- 캐시 초기화 플래그를 --dart-define로 제어(CLEAR_CACHE_ON_STARTUP)
This commit is contained in:
JiWoong Sul
2025-09-07 23:28:18 +09:00
parent d37f66d526
commit 84b3fdd530
7 changed files with 203 additions and 188 deletions

View File

@@ -93,32 +93,32 @@ class _CategoryManagementScreenState extends State<CategoryManagementScreen> {
value: '#1976D2',
child: Text(
AppLocalizations.of(context).colorBlue,
style:
const TextStyle(color: AppColors.darkNavy))),
style: const TextStyle(
color: AppColors.darkNavy))),
DropdownMenuItem(
value: '#4CAF50',
child: Text(
AppLocalizations.of(context).colorGreen,
style:
const TextStyle(color: AppColors.darkNavy))),
style: const TextStyle(
color: AppColors.darkNavy))),
DropdownMenuItem(
value: '#FF9800',
child: Text(
AppLocalizations.of(context).colorOrange,
style:
const TextStyle(color: AppColors.darkNavy))),
style: const TextStyle(
color: AppColors.darkNavy))),
DropdownMenuItem(
value: '#F44336',
child: Text(
AppLocalizations.of(context).colorRed,
style:
const TextStyle(color: AppColors.darkNavy))),
style: const TextStyle(
color: AppColors.darkNavy))),
DropdownMenuItem(
value: '#9C27B0',
child: Text(
AppLocalizations.of(context).colorPurple,
style:
const TextStyle(color: AppColors.darkNavy))),
style: const TextStyle(
color: AppColors.darkNavy))),
],
onChanged: (value) {
setState(() {

View File

@@ -533,9 +533,8 @@ class SettingsScreen extends StatelessWidget {
onPressed: () async {
await permission.openAppSettings();
},
child: Text(
AppLocalizations.of(context)
.openSettings),
child: Text(AppLocalizations.of(context)
.openSettings),
)
: ElevatedButton(
onPressed: () async {
@@ -545,11 +544,13 @@ class SettingsScreen extends StatelessWidget {
final newStatus = await permission
.Permission.sms.status;
if (newStatus.isPermanentlyDenied) {
await permission.openAppSettings();
await permission
.openAppSettings();
}
}
if (context.mounted) {
(context as Element).markNeedsBuild();
(context as Element)
.markNeedsBuild();
}
},
child: Text(AppLocalizations.of(context)