feat: adopt material 3 theme and billing adjustments

This commit is contained in:
JiWoong Sul
2025-09-16 14:30:14 +09:00
parent a01d9092ba
commit 44850a53cc
85 changed files with 2957 additions and 2776 deletions

View File

@@ -1,7 +1,7 @@
import 'dart:async';
import 'dart:ui';
import 'package:flutter/material.dart';
import '../theme/app_colors.dart';
// import '../theme/app_colors.dart';
import '../services/sms_service.dart';
import '../utils/platform_helper.dart';
import '../routes/app_routes.dart';
@@ -90,8 +90,6 @@ class _SplashScreenState extends State<SplashScreen>
(reduced ? 1200 : 2000); // 축소 시 더 짧게
final delay = (random % 10) / 10 * 2000; // 0-2초 사이의 지연시간
int colorIndex = (random + i) % AppColors.blueGradient.length;
_particles.add({
'size': size,
'x': x,
@@ -99,7 +97,7 @@ class _SplashScreenState extends State<SplashScreen>
'opacity': opacity,
'duration': duration,
'delay': delay,
'color': AppColors.blueGradient[colorIndex],
// color computed at render from ColorScheme.primary
});
}
}
@@ -137,23 +135,15 @@ class _SplashScreenState extends State<SplashScreen>
return Scaffold(
body: Stack(
children: [
// 배경 그라디언트
Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
AppColors.dayGradient[0],
AppColors.dayGradient[1],
],
),
),
),
// 단색 배경
Container(color: Theme.of(context).colorScheme.surface),
// 글래스모피즘 오버레이
Container(
decoration: BoxDecoration(
color: AppColors.pureWhite.withValues(alpha: 0.05),
color: Theme.of(context)
.colorScheme
.onSurface
.withValues(alpha: 0.05),
),
),
Stack(
@@ -180,11 +170,14 @@ class _SplashScreenState extends State<SplashScreen>
width: particle['size'],
height: particle['size'],
decoration: BoxDecoration(
color: particle['color'],
color: Theme.of(context).colorScheme.primary,
shape: BoxShape.circle,
boxShadow: [
BoxShadow(
color: particle['color'].withValues(alpha: 0.3),
color: Theme.of(context)
.colorScheme
.primary
.withValues(alpha: 0.3),
blurRadius: 10,
spreadRadius: 1,
),
@@ -195,43 +188,23 @@ class _SplashScreenState extends State<SplashScreen>
);
}).toList(),
// 상단 원형 그라데이션
// 상단 원형 장식 제거(단색 배경 유지)
Positioned(
top: -size.height * 0.2,
right: -size.width * 0.2,
child: Container(
child: SizedBox(
width: size.width * 0.8,
height: size.width * 0.8,
decoration: BoxDecoration(
shape: BoxShape.circle,
gradient: RadialGradient(
colors: [
AppColors.pureWhite.withValues(alpha: 0.1),
AppColors.pureWhite.withValues(alpha: 0.0),
],
stops: const [0.2, 1.0],
),
),
),
),
// 하단 원형 그라데이션
// 하단 원형 장식 제거
Positioned(
bottom: -size.height * 0.1,
left: -size.width * 0.3,
child: Container(
child: SizedBox(
width: size.width * 0.9,
height: size.width * 0.9,
decoration: BoxDecoration(
shape: BoxShape.circle,
gradient: RadialGradient(
colors: [
AppColors.pureWhite.withValues(alpha: 0.07),
AppColors.pureWhite.withValues(alpha: 0.0),
],
stops: const [0.4, 1.0],
),
),
),
),
@@ -271,62 +244,32 @@ class _SplashScreenState extends State<SplashScreen>
reduced: 8)),
child: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [
AppColors.pureWhite
.withValues(alpha: 0.2),
AppColors.pureWhite
.withValues(alpha: 0.1),
],
),
color: Theme.of(context)
.colorScheme
.surface
.withValues(alpha: 0.6),
borderRadius:
BorderRadius.circular(30),
border: Border.all(
color: AppColors.pureWhite
.withValues(alpha: 0.3),
color: Theme.of(context)
.colorScheme
.outline
.withValues(alpha: 0.2),
width: 1.5,
),
boxShadow: [
BoxShadow(
color:
AppColors.shadowBlack,
spreadRadius: 0,
blurRadius:
ReduceMotion.scale(
context,
normal: 30,
reduced: 12),
offset: const Offset(0, 10),
),
],
),
child: Center(
child: AnimatedBuilder(
animation:
_animationController,
builder: (context, _) {
return ShaderMask(
blendMode:
BlendMode.srcIn,
shaderCallback: (bounds) =>
const LinearGradient(
colors: AppColors
.blueGradient,
begin:
Alignment.topLeft,
end: Alignment
.bottomRight,
).createShader(bounds),
child: Icon(
Icons
.subscriptions_outlined,
size: 64,
color:
Theme.of(context)
.primaryColor,
),
return Icon(
Icons
.subscriptions_outlined,
size: 64,
color: Theme.of(context)
.colorScheme
.primary,
);
}),
),
@@ -356,7 +299,9 @@ class _SplashScreenState extends State<SplashScreen>
style: TextStyle(
fontSize: 36,
fontWeight: FontWeight.bold,
color: AppColors.primaryColor
color: Theme.of(context)
.colorScheme
.primary
.withValues(alpha: 0.9),
letterSpacing: 1.2,
),
@@ -382,7 +327,9 @@ class _SplashScreenState extends State<SplashScreen>
AppLocalizations.of(context).appSubtitle,
style: TextStyle(
fontSize: 16,
color: AppColors.primaryColor
color: Theme.of(context)
.colorScheme
.primary
.withValues(alpha: 0.7),
letterSpacing: 0.5,
),
@@ -404,18 +351,22 @@ class _SplashScreenState extends State<SplashScreen>
height: 60,
padding: const EdgeInsets.all(6),
decoration: BoxDecoration(
color: AppColors.pureWhite
color: Theme.of(context)
.colorScheme
.onSurface
.withValues(alpha: 0.1),
borderRadius: BorderRadius.circular(50),
border: Border.all(
color: AppColors.pureWhite
color: Theme.of(context)
.colorScheme
.onSurface
.withValues(alpha: 0.2),
width: 1,
),
),
child: const CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation<Color>(
AppColors.pureWhite),
child: CircularProgressIndicator(
color:
Theme.of(context).colorScheme.primary,
strokeWidth: 3,
),
),
@@ -436,7 +387,10 @@ class _SplashScreenState extends State<SplashScreen>
'© 2025 NatureBridgeAI. All rights reserved.',
style: TextStyle(
fontSize: 12,
color: AppColors.pureWhite.withValues(alpha: 0.6),
color: Theme.of(context)
.colorScheme
.onSurface
.withValues(alpha: 0.6),
letterSpacing: 0.5,
),
),