feat: 알림 재예약 개선과 패키지 업그레이드

This commit is contained in:
JiWoong Sul
2025-09-19 18:10:47 +09:00
parent e909ba59a4
commit 87f82546a4
24 changed files with 210 additions and 122 deletions

View File

@@ -298,7 +298,7 @@ class EventAnalysisCard extends StatelessWidget {
],
),
);
}).toList(),
}),
],
),
),

View File

@@ -226,10 +226,10 @@ class MonthlyExpenseChartCard extends StatelessWidget {
barTouchData: BarTouchData(
enabled: true,
touchTooltipData: BarTouchTooltipData(
tooltipBgColor: Theme.of(context)
tooltipBorderRadius: BorderRadius.circular(8),
getTooltipColor: (group) => Theme.of(context)
.colorScheme
.inverseSurface,
tooltipRoundedRadius: 8,
getTooltipItem:
(group, groupIndex, rod, rodIndex) {
return BarTooltipItem(
@@ -261,10 +261,10 @@ class MonthlyExpenseChartCard extends StatelessWidget {
),
),
),
swapAnimationDuration: ReduceMotion.isEnabled(context)
? const Duration(milliseconds: 0)
duration: ReduceMotion.isEnabled(context)
? Duration.zero
: const Duration(milliseconds: 300),
swapAnimationCurve: Curves.easeOut,
curve: Curves.easeOut,
),
),
),

View File

@@ -390,12 +390,10 @@ class _SubscriptionPieChartCardState extends State<SubscriptionPieChartCard> {
},
),
),
swapAnimationDuration:
ReduceMotion.isEnabled(context)
? const Duration(milliseconds: 0)
: const Duration(
milliseconds: 300),
swapAnimationCurve: Curves.easeOut,
duration: ReduceMotion.isEnabled(context)
? Duration.zero
: const Duration(milliseconds: 300),
curve: Curves.easeOut,
),
);
},

View File

@@ -10,10 +10,10 @@ class AnimatedWaveBackground extends StatelessWidget {
final AnimationController pulseController;
const AnimatedWaveBackground({
Key? key,
super.key,
required this.controller,
required this.pulseController,
}) : super(key: key);
});
@override
Widget build(BuildContext context) {

View File

@@ -15,14 +15,14 @@ class CategoryHeaderWidget extends StatelessWidget {
final double totalCostCNY;
const CategoryHeaderWidget({
Key? key,
super.key,
required this.categoryName,
required this.subscriptionCount,
required this.totalCostUSD,
required this.totalCostKRW,
required this.totalCostJPY,
required this.totalCostCNY,
}) : super(key: key);
});
@override
Widget build(BuildContext context) {

View File

@@ -17,12 +17,12 @@ class EmptyStateWidget extends StatelessWidget {
final VoidCallback onAddPressed;
const EmptyStateWidget({
Key? key,
super.key,
required this.fadeController,
required this.rotateController,
required this.slideController,
required this.onAddPressed,
}) : super(key: key);
});
@override
Widget build(BuildContext context) {

View File

@@ -18,13 +18,13 @@ class MainScreenSummaryCard extends StatelessWidget {
final AnimationController waveController;
final AnimationController slideController;
const MainScreenSummaryCard({
Key? key,
super.key,
required this.provider,
required this.fadeController,
required this.pulseController,
required this.waveController,
required this.slideController,
}) : super(key: key);
});
@override
Widget build(BuildContext context) {

View File

@@ -11,8 +11,7 @@ import '../theme/ui_constants.dart';
/// SRP에 따라 광고 전용 위젯으로 분리
class NativeAdWidget extends StatefulWidget {
final bool useOuterPadding; // true이면 외부에서 페이지 패딩을 제공
const NativeAdWidget({Key? key, this.useOuterPadding = false})
: super(key: key);
const NativeAdWidget({super.key, this.useOuterPadding = false});
@override
State<NativeAdWidget> createState() => _NativeAdWidgetState();

View File

@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
// import '../../theme/app_colors.dart';
import '../../widgets/native_ad_widget.dart';
import '../../widgets/themed_text.dart';
import '../../l10n/app_localizations.dart';
@@ -8,29 +8,33 @@ class ScanLoadingWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
CircularProgressIndicator(
color: Theme.of(context).colorScheme.primary,
),
const SizedBox(height: 16),
ThemedText(
AppLocalizations.of(context).scanningMessages,
forceDark: true,
),
const SizedBox(height: 8),
ThemedText(
AppLocalizations.of(context).findingSubscriptions,
opacity: 0.7,
forceDark: true,
),
],
return Column(
children: [
const NativeAdWidget(key: ValueKey('sms_scan_loading_ad')),
const SizedBox(height: 48),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
CircularProgressIndicator(
color: Theme.of(context).colorScheme.primary,
),
const SizedBox(height: 16),
ThemedText(
AppLocalizations.of(context).scanningMessages,
forceDark: true,
),
const SizedBox(height: 8),
ThemedText(
AppLocalizations.of(context).findingSubscriptions,
opacity: 0.7,
forceDark: true,
),
],
),
),
),
],
);
}
}

View File

@@ -20,10 +20,10 @@ class SubscriptionListWidget extends StatelessWidget {
final AnimationController fadeController;
const SubscriptionListWidget({
Key? key,
super.key,
required this.categorizedSubscriptions,
required this.fadeController,
}) : super(key: key);
});
@override
Widget build(BuildContext context) {
@@ -188,9 +188,9 @@ class MultiSliver extends StatelessWidget {
final List<Widget> children;
const MultiSliver({
Key? key,
super.key,
required this.children,
}) : super(key: key);
});
@override
Widget build(BuildContext context) {