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
118 changes: 73 additions & 45 deletions .firebase/hosting.YnVpbGQvd2Vi.cache

Large diffs are not rendered by default.

61 changes: 61 additions & 0 deletions assets/characters/half_character.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/profile.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
Expand Down Expand Up @@ -72,6 +73,7 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
Expand Down
21 changes: 2 additions & 19 deletions lib/core/services/js_interop_service.dart
Original file line number Diff line number Diff line change
@@ -1,19 +1,2 @@
import 'dart:js_interop';

@JS()
external JSPromise<JSString> _requestNotificationPermission();

@JS()
external JSBoolean _isInStandaloneMode();

class JsInteropService {
static Future<String> requestNotificationPermission() {
return _requestNotificationPermission()
.toDart
.then((jsString) => jsString.toString());
}

static bool isInStandaloneMode() {
return _isInStandaloneMode().toDart;
}
}
export 'js_interop_service_stub.dart'
if (dart.library.js_interop) 'js_interop_service_web.dart';
9 changes: 9 additions & 0 deletions lib/core/services/js_interop_service_stub.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
class JsInteropService {
static Future<String> requestNotificationPermission() async {
throw UnsupportedError('JsInteropService is only available on web');
}

static bool isInStandaloneMode() {
throw UnsupportedError('JsInteropService is only available on web');
}
}
20 changes: 20 additions & 0 deletions lib/core/services/js_interop_service_web.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import 'dart:js_interop';
import 'package:js/js.dart';

@JS()
external JSPromise<JSString> _requestNotificationPermission();

@JS()
external JSBoolean _isInStandaloneMode();

class JsInteropService {
static Future<String> requestNotificationPermission() {
return _requestNotificationPermission()
.toDart
.then((jsString) => jsString.toString());
}

static bool isInStandaloneMode() {
return _isInStandaloneMode().toDart;
}
}
32 changes: 32 additions & 0 deletions lib/l10n/app_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -274,5 +274,37 @@
"type": "int"
}
}
},
"myPageTitle": "My Page",
"@myPageTitle": {
"description": "Title for the my page screen"
},
"myAccount": "My Account",
"@myAccount": {
"description": "Title for the my account section"
},
"appSettings": "App Settings",
"@appSettings": {
"description": "Title for the app settings section"
},
"editDefaultPreparation": "Edit Default Preparation / Spare Time",
"@editDefaultPreparation": {
"description": "Setting tile for editing default preparation and spare time"
},
"allowAppNotifications": "Allow App Notifications",
"@allowAppNotifications": {
"description": "Setting tile for allowing app notifications"
},
"editSpareTime": "Edit spare time",
"@editSpareTime": {
"description": "Section title for editing spare time"
},
"editPreparationTime": "Edit preparation time",
"@editPreparationTime": {
"description": "Section title for editing preparation time"
},
"totalTime": "Total time: ",
"@totalTime": {
"description": "Label for total preparation time"
}
}
13 changes: 11 additions & 2 deletions lib/l10n/app_ko.arb
Original file line number Diff line number Diff line change
Expand Up @@ -62,5 +62,14 @@
"plus": "플러스",
"schedule": "일정",
"hourFormatted": "{count}시간",
"minuteFormatted": "{count}분"
}
"minuteFormatted": "{count}분",
"myPageTitle": "마이페이지",
"myAccount": "내 계정",
"appSettings": "앱 설정",
"editDefaultPreparation": "기본 준비과정 / 여유시간 수정",
"allowAppNotifications": "앱 알림 허용"
,
"editSpareTime": "여유시간 수정",
"editPreparationTime": "준비시간 수정",
"totalTime": "총 시간: "
}
48 changes: 48 additions & 0 deletions lib/l10n/app_localizations.dart
Original file line number Diff line number Diff line change
Expand Up @@ -481,6 +481,54 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'{count,plural, =1{{count} minute} other{{count} minutes}}'**
String minuteFormatted(int count);

/// Title for the my page screen
///
/// In en, this message translates to:
/// **'My Page'**
String get myPageTitle;

/// Title for the my account section
///
/// In en, this message translates to:
/// **'My Account'**
String get myAccount;

/// Title for the app settings section
///
/// In en, this message translates to:
/// **'App Settings'**
String get appSettings;

/// Setting tile for editing default preparation and spare time
///
/// In en, this message translates to:
/// **'Edit Default Preparation / Spare Time'**
String get editDefaultPreparation;

/// Setting tile for allowing app notifications
///
/// In en, this message translates to:
/// **'Allow App Notifications'**
String get allowAppNotifications;

/// Section title for editing spare time
///
/// In en, this message translates to:
/// **'Edit spare time'**
String get editSpareTime;

/// Section title for editing preparation time
///
/// In en, this message translates to:
/// **'Edit preparation time'**
String get editPreparationTime;

/// Label for total preparation time
///
/// In en, this message translates to:
/// **'Total time: '**
String get totalTime;
}

class _AppLocalizationsDelegate
Expand Down
24 changes: 24 additions & 0 deletions lib/l10n/app_localizations_en.dart
Original file line number Diff line number Diff line change
Expand Up @@ -229,4 +229,28 @@ class AppLocalizationsEn extends AppLocalizations {
);
return '$_temp0';
}

@override
String get myPageTitle => 'My Page';

@override
String get myAccount => 'My Account';

@override
String get appSettings => 'App Settings';

@override
String get editDefaultPreparation => 'Edit Default Preparation / Spare Time';

@override
String get allowAppNotifications => 'Allow App Notifications';

@override
String get editSpareTime => 'Edit spare time';

@override
String get editPreparationTime => 'Edit preparation time';

@override
String get totalTime => 'Total time: ';
}
24 changes: 24 additions & 0 deletions lib/l10n/app_localizations_ko.dart
Original file line number Diff line number Diff line change
Expand Up @@ -210,4 +210,28 @@ class AppLocalizationsKo extends AppLocalizations {
String minuteFormatted(int count) {
return '$count분';
}

@override
String get myPageTitle => '마이페이지';

@override
String get myAccount => '내 계정';

@override
String get appSettings => '앱 설정';

@override
String get editDefaultPreparation => '기본 준비과정 / 여유시간 수정';

@override
String get allowAppNotifications => '앱 알림 허용';

@override
String get editSpareTime => '여유시간 수정';

@override
String get editPreparationTime => '준비시간 수정';

@override
String get totalTime => '총 시간: ';
}
11 changes: 4 additions & 7 deletions lib/presentation/home/components/todays_schedule_tile.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ class TodaysScheduleTile extends StatelessWidget {

Widget _noSchedule(BuildContext context) {
final theme = Theme.of(context);
return Center(
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 11.0, vertical: 16.0),
child: Text(
AppLocalizations.of(context)!.noAppointments,
style: theme.textTheme.bodyLarge?.copyWith(
Expand Down Expand Up @@ -63,14 +64,10 @@ class TodaysScheduleTile extends StatelessWidget {
color: schedule == null
? theme.colorScheme.surfaceContainerLow
: theme.colorScheme.primaryContainer,
borderRadius: BorderRadius.circular(16),
borderRadius: BorderRadius.circular(8),
),
width: double.infinity,
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 6.5),
child:
schedule == null ? _noSchedule(context) : _scheduleExists(context),
),
child: schedule == null ? _noSchedule(context) : _scheduleExists(context),
);
}
}
Expand Down
15 changes: 7 additions & 8 deletions lib/presentation/home/screens/home_screen_tmp.dart
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,7 @@ class _HomeScreenTmpState extends State<HomeScreenTmp> {
Container(
color: colorScheme.primary,
padding: const EdgeInsets.only(top: 58.0),
child: Stack(
alignment: Alignment.bottomCenter,
child: Column(
children: [
_CharacterSection(score: score),
todaysScheduleOverlayBuilder(state),
Expand Down Expand Up @@ -105,15 +104,16 @@ class _HomeScreenTmpState extends State<HomeScreenTmp> {
borderRadius: BorderRadius.circular(20),
),
color: theme.colorScheme.surface,
elevation: 2,
elevation: 6,
shadowColor: Colors.black.withOpacity(0.4),
child: Padding(
padding: const EdgeInsets.all(20.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
AppLocalizations.of(context)!.todaysAppointments,
style: theme.textTheme.titleLarge,
style: theme.textTheme.titleMedium,
),
SizedBox(height: 21.0),
TodaysScheduleTile(
Expand Down Expand Up @@ -307,8 +307,7 @@ class _CharacterSection extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.only(bottom: 40.0) +
EdgeInsets.symmetric(horizontal: 17.0),
padding: const EdgeInsets.symmetric(horizontal: 17.0),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
Expand Down Expand Up @@ -380,9 +379,9 @@ class _Character extends StatelessWidget {
Widget build(BuildContext context) {
return SizedBox(
width: 176,
height: 247.57,
height: 130,
child: SvgPicture.asset(
'characters/character.svg',
'characters/half_character.svg',
package: 'assets',
),
);
Expand Down
5 changes: 3 additions & 2 deletions lib/presentation/login/screens/sign_in_main_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class _SignInMainScreenState extends State<SignInMainScreen> {
mainAxisSize: MainAxisSize.min,
children: [
_Title(),
SizedBox(height: 24),
SizedBox(height: 48),
_CharacterImage(),
SizedBox(height: 24),
GoogleSignInButton(),
Expand All @@ -55,6 +55,7 @@ class _Title extends StatelessWidget {
Widget build(BuildContext context) {
final colorScheme = Theme.of(context).colorScheme;
return Column(
spacing: 8,
children: [
Text(AppLocalizations.of(context)!.appName,
style: TextStyle(
Expand All @@ -78,7 +79,7 @@ class _CharacterImage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return SizedBox(
height: 280,
height: 241,
child: SvgPicture.asset(
'characters/character.svg',
package: 'assets',
Expand Down
Loading
Loading