Refactor screens to MVC architecture with modular widgets
- Extract business logic from screens into dedicated controllers - Split large screen files into smaller, reusable widget components - Add controllers for AddSubscriptionScreen and DetailScreen - Create modular widgets for subscription and detail features - Improve code organization and maintainability - Remove duplicated code and improve reusability 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,14 +1,9 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'dart:math' as math;
|
||||
import '../models/subscription_model.dart';
|
||||
import '../screens/detail_screen.dart';
|
||||
import 'website_icon.dart';
|
||||
import 'app_navigator.dart';
|
||||
import '../theme/app_colors.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../providers/subscription_provider.dart';
|
||||
import 'glassmorphism_card.dart';
|
||||
|
||||
class SubscriptionCard extends StatefulWidget {
|
||||
@@ -27,9 +22,6 @@ class _SubscriptionCardState extends State<SubscriptionCard>
|
||||
with SingleTickerProviderStateMixin {
|
||||
late AnimationController _hoverController;
|
||||
bool _isHovering = false;
|
||||
final double _initialElevation = 1.0;
|
||||
final double _hoveredElevation = 3.0;
|
||||
late SubscriptionProvider _subscriptionProvider;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -40,12 +32,6 @@ class _SubscriptionCardState extends State<SubscriptionCard>
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void didChangeDependencies() {
|
||||
super.didChangeDependencies();
|
||||
_subscriptionProvider =
|
||||
Provider.of<SubscriptionProvider>(context, listen: false);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
@@ -221,10 +207,6 @@ class _SubscriptionCardState extends State<SubscriptionCard>
|
||||
child: AnimatedBuilder(
|
||||
animation: _hoverController,
|
||||
builder: (context, child) {
|
||||
final elevation = _initialElevation +
|
||||
(_hoveredElevation - _initialElevation) *
|
||||
_hoverController.value;
|
||||
|
||||
final scale = 1.0 + (0.02 * _hoverController.value);
|
||||
|
||||
return Transform.scale(
|
||||
@@ -337,10 +319,10 @@ class _SubscriptionCardState extends State<SubscriptionCard>
|
||||
vertical: 3,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
gradient: const LinearGradient(
|
||||
colors: [
|
||||
const Color(0xFFFF6B6B),
|
||||
const Color(0xFFFF8787),
|
||||
Color(0xFFFF6B6B),
|
||||
Color(0xFFFF8787),
|
||||
],
|
||||
),
|
||||
borderRadius:
|
||||
@@ -349,12 +331,12 @@ class _SubscriptionCardState extends State<SubscriptionCard>
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
const Icon(
|
||||
Icon(
|
||||
Icons.local_offer_rounded,
|
||||
size: 11,
|
||||
color: Colors.white,
|
||||
),
|
||||
const SizedBox(width: 3),
|
||||
SizedBox(width: 3),
|
||||
Text(
|
||||
'이벤트',
|
||||
style: TextStyle(
|
||||
@@ -386,7 +368,7 @@ class _SubscriptionCardState extends State<SubscriptionCard>
|
||||
),
|
||||
child: Text(
|
||||
widget.subscription.billingCycle,
|
||||
style: TextStyle(
|
||||
style: const TextStyle(
|
||||
fontSize: 11,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: AppColors.textSecondary,
|
||||
@@ -424,7 +406,7 @@ class _SubscriptionCardState extends State<SubscriptionCard>
|
||||
decimalDigits: 0,
|
||||
).format(widget
|
||||
.subscription.monthlyCost),
|
||||
style: TextStyle(
|
||||
style: const TextStyle(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: AppColors.textSecondary,
|
||||
@@ -555,7 +537,7 @@ class _SubscriptionCardState extends State<SubscriptionCard>
|
||||
if (widget.subscription.eventEndDate != null) ...[
|
||||
Text(
|
||||
'${widget.subscription.eventEndDate!.difference(DateTime.now()).inDays}일 남음',
|
||||
style: TextStyle(
|
||||
style: const TextStyle(
|
||||
fontSize: 11,
|
||||
color: AppColors.textSecondary,
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user