거의 최종본
@@ -1,8 +1,8 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<application
|
<application
|
||||||
android:label="poet"
|
android:label="시인의 서재"
|
||||||
android:name="${applicationName}"
|
android:name="${applicationName}"
|
||||||
android:icon="@mipmap/ic_launcher">
|
android:icon="@mipmap/launcher_icon">
|
||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".MainActivity"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
|
|||||||
BIN
assets/audio/1.mp3
Normal file
BIN
assets/audio/2.mp3
Normal file
BIN
assets/audio/3.mp3
Normal file
BIN
assets/audio/4.mp3
Normal file
BIN
assets/audio/5.mp3
Normal file
BIN
assets/audio/6.mp3
Normal file
BIN
assets/audio/7.mp3
Normal file
BIN
assets/audio/8.mp3
Normal file
BIN
assets/audio/9.mp3
Normal file
BIN
assets/images/title.webp
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
@@ -427,7 +427,7 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
@@ -484,7 +484,7 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 295 B After Width: | Height: | Size: 602 B |
|
Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 450 B After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 282 B After Width: | Height: | Size: 844 B |
|
Before Width: | Height: | Size: 462 B After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 704 B After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 586 B After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 762 B After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 2.0 KiB |
@@ -5,7 +5,7 @@
|
|||||||
<key>CFBundleDevelopmentRegion</key>
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||||
<key>CFBundleDisplayName</key>
|
<key>CFBundleDisplayName</key>
|
||||||
<string>Poet</string>
|
<string>시인의 서재</string>
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>$(EXECUTABLE_NAME)</string>
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
<string>6.0</string>
|
<string>6.0</string>
|
||||||
<key>CFBundleName</key>
|
<key>CFBundleName</key>
|
||||||
<string>poet</string>
|
<string>시인의 서재</string>
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
|
|||||||
@@ -2,9 +2,15 @@
|
|||||||
class Assets {
|
class Assets {
|
||||||
Assets._();
|
Assets._();
|
||||||
|
|
||||||
static const String audio001 = 'assets/audio/001.wav';
|
static const String audio1 = 'assets/audio/1.mp3';
|
||||||
static const String audio002 = 'assets/audio/002.wav';
|
static const String audio2 = 'assets/audio/2.mp3';
|
||||||
static const String audio003 = 'assets/audio/003.wav';
|
static const String audio3 = 'assets/audio/3.mp3';
|
||||||
|
static const String audio4 = 'assets/audio/4.mp3';
|
||||||
|
static const String audio5 = 'assets/audio/5.mp3';
|
||||||
|
static const String audio6 = 'assets/audio/6.mp3';
|
||||||
|
static const String audio7 = 'assets/audio/7.mp3';
|
||||||
|
static const String audio8 = 'assets/audio/8.mp3';
|
||||||
|
static const String audio9 = 'assets/audio/9.mp3';
|
||||||
static const String goSubsetsButton01 = 'assets/images/go_subsets/Button_01.webp';
|
static const String goSubsetsButton01 = 'assets/images/go_subsets/Button_01.webp';
|
||||||
static const String goSubsetsButton02 = 'assets/images/go_subsets/Button_02.webp';
|
static const String goSubsetsButton02 = 'assets/images/go_subsets/Button_02.webp';
|
||||||
static const String goSubsetsButton03 = 'assets/images/go_subsets/Button_03.webp';
|
static const String goSubsetsButton03 = 'assets/images/go_subsets/Button_03.webp';
|
||||||
@@ -15,6 +21,7 @@ class Assets {
|
|||||||
static const String goSubsetsButton08 = 'assets/images/go_subsets/Button_08.webp';
|
static const String goSubsetsButton08 = 'assets/images/go_subsets/Button_08.webp';
|
||||||
static const String goSubsetsButton09 = 'assets/images/go_subsets/Button_09.webp';
|
static const String goSubsetsButton09 = 'assets/images/go_subsets/Button_09.webp';
|
||||||
static const String imagesMainBack = 'assets/images/Main_Back.webp';
|
static const String imagesMainBack = 'assets/images/Main_Back.webp';
|
||||||
|
static const String imagesTitle = 'assets/images/title.webp';
|
||||||
static const String subsetsSub01 = 'assets/images/subsets/Sub_01.webp';
|
static const String subsetsSub01 = 'assets/images/subsets/Sub_01.webp';
|
||||||
static const String subsetsSub02 = 'assets/images/subsets/Sub_02.webp';
|
static const String subsetsSub02 = 'assets/images/subsets/Sub_02.webp';
|
||||||
static const String subsetsSub03 = 'assets/images/subsets/Sub_03.webp';
|
static const String subsetsSub03 = 'assets/images/subsets/Sub_03.webp';
|
||||||
@@ -27,6 +34,7 @@ class Assets {
|
|||||||
static const String uiUI5minus = 'assets/images/ui/UI_5minus.webp';
|
static const String uiUI5minus = 'assets/images/ui/UI_5minus.webp';
|
||||||
static const String uiUI5plus = 'assets/images/ui/UI_5plus.webp';
|
static const String uiUI5plus = 'assets/images/ui/UI_5plus.webp';
|
||||||
static const String uiUIBack = 'assets/images/ui/UI_Back.webp';
|
static const String uiUIBack = 'assets/images/ui/UI_Back.webp';
|
||||||
|
static const String uiUIPause = 'assets/images/ui/UI_Pause.webp';
|
||||||
static const String uiUIPlay = 'assets/images/ui/UI_Play.webp';
|
static const String uiUIPlay = 'assets/images/ui/UI_Play.webp';
|
||||||
static const String uiUIReplay = 'assets/images/ui/UI_Replay.webp';
|
static const String uiUIReplay = 'assets/images/ui/UI_Replay.webp';
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
import 'dart:io';
|
import 'package:flutter/foundation.dart';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:poet/poet_screen.dart';
|
import 'package:poet_repository/poet_screen.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
@@ -28,6 +27,10 @@ class PoetStudyScreen extends StatefulWidget {
|
|||||||
|
|
||||||
class _PoetStudyScreenState extends State<PoetStudyScreen>
|
class _PoetStudyScreenState extends State<PoetStudyScreen>
|
||||||
with WidgetsBindingObserver {
|
with WidgetsBindingObserver {
|
||||||
|
// Variables to control grid spacing
|
||||||
|
final double _crossAxisSpacing = 1.0;
|
||||||
|
final double _mainAxisSpacing = 1.0;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
@@ -36,7 +39,7 @@ class _PoetStudyScreenState extends State<PoetStudyScreen>
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _setSystemUIOverlayStyle() {
|
void _setSystemUIOverlayStyle() {
|
||||||
if (Platform.isAndroid) {
|
if (defaultTargetPlatform == TargetPlatform.android) {
|
||||||
SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
|
SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -45,7 +48,9 @@ class _PoetStudyScreenState extends State<PoetStudyScreen>
|
|||||||
void dispose() {
|
void dispose() {
|
||||||
WidgetsBinding.instance.removeObserver(this);
|
WidgetsBinding.instance.removeObserver(this);
|
||||||
// When the main screen is disposed, restore the system UI
|
// When the main screen is disposed, restore the system UI
|
||||||
SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
|
if (defaultTargetPlatform == TargetPlatform.android) {
|
||||||
|
SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
|
||||||
|
}
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,19 +75,21 @@ class _PoetStudyScreenState extends State<PoetStudyScreen>
|
|||||||
),
|
),
|
||||||
|
|
||||||
// Main content
|
// Main content
|
||||||
SafeArea(
|
Transform.translate(
|
||||||
child: Padding(
|
offset: Offset(0.0, -40.0), // Move up by 40 pixels
|
||||||
padding: const EdgeInsets.all(20.0),
|
child: Center(
|
||||||
child: Column(
|
child: Padding(
|
||||||
children: [
|
padding: const EdgeInsets.all(150.0),
|
||||||
Expanded(
|
child: Column(
|
||||||
child: Center(
|
mainAxisSize: MainAxisSize.min, // Use minimum space
|
||||||
|
children: [
|
||||||
|
Center(
|
||||||
child: GridView.builder(
|
child: GridView.builder(
|
||||||
gridDelegate:
|
gridDelegate:
|
||||||
const SliverGridDelegateWithFixedCrossAxisCount(
|
SliverGridDelegateWithFixedCrossAxisCount(
|
||||||
crossAxisCount: 3,
|
crossAxisCount: 3,
|
||||||
crossAxisSpacing: 15,
|
crossAxisSpacing: _crossAxisSpacing,
|
||||||
mainAxisSpacing: 15,
|
mainAxisSpacing: _mainAxisSpacing,
|
||||||
),
|
),
|
||||||
itemCount: 9,
|
itemCount: 9,
|
||||||
shrinkWrap: true,
|
shrinkWrap: true,
|
||||||
@@ -92,8 +99,20 @@ class _PoetStudyScreenState extends State<PoetStudyScreen>
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
SizedBox(height: 30), // Added space
|
||||||
],
|
Align(
|
||||||
|
alignment: Alignment.centerLeft,
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.only(left: 5),
|
||||||
|
child: Image.asset(
|
||||||
|
'assets/images/title.webp',
|
||||||
|
width: 500, // Adjust as needed
|
||||||
|
height: 100, // Adjust as needed
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -119,8 +138,8 @@ class _PoetStudyScreenState extends State<PoetStudyScreen>
|
|||||||
children: [
|
children: [
|
||||||
Image.asset(
|
Image.asset(
|
||||||
'assets/images/go_subsets/Button_${(index + 1).toString().padLeft(2, '0')}.webp',
|
'assets/images/go_subsets/Button_${(index + 1).toString().padLeft(2, '0')}.webp',
|
||||||
width: 325,
|
width: 260,
|
||||||
height: 325,
|
height: 260,
|
||||||
fit: BoxFit.contain,
|
fit: BoxFit.contain,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import 'dart:io';
|
import 'package:flutter/foundation.dart';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:audioplayers/audioplayers.dart';
|
import 'package:audioplayers/audioplayers.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
@@ -30,7 +29,7 @@ class _PoetScreenState extends State<PoetScreen> with WidgetsBindingObserver {
|
|||||||
|
|
||||||
_backgroundImage =
|
_backgroundImage =
|
||||||
'assets/images/subsets/Sub_${(widget.selectedIndex + 1).toString().padLeft(2, '0')}.webp';
|
'assets/images/subsets/Sub_${(widget.selectedIndex + 1).toString().padLeft(2, '0')}.webp';
|
||||||
_source = AssetSource('audio/00${(widget.selectedIndex + 1).toString()}.wav');
|
_source = AssetSource('audio/${(widget.selectedIndex + 1).toString()}.mp3');
|
||||||
|
|
||||||
_audioPlayer.onPlayerStateChanged.listen((state) {
|
_audioPlayer.onPlayerStateChanged.listen((state) {
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
@@ -67,7 +66,7 @@ class _PoetScreenState extends State<PoetScreen> with WidgetsBindingObserver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _setSystemUIOverlayStyle() {
|
void _setSystemUIOverlayStyle() {
|
||||||
if (Platform.isAndroid) {
|
if (defaultTargetPlatform == TargetPlatform.android) {
|
||||||
SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
|
SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -82,6 +81,7 @@ class _PoetScreenState extends State<PoetScreen> with WidgetsBindingObserver {
|
|||||||
Future<void> _setAudio() async {
|
Future<void> _setAudio() async {
|
||||||
try {
|
try {
|
||||||
await _audioPlayer.setSource(_source);
|
await _audioPlayer.setSource(_source);
|
||||||
|
_audioPlayer.play(_source);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// Handle error, e.g., show a snackbar
|
// Handle error, e.g., show a snackbar
|
||||||
print("Error setting audio source: $e");
|
print("Error setting audio source: $e");
|
||||||
@@ -91,9 +91,9 @@ class _PoetScreenState extends State<PoetScreen> with WidgetsBindingObserver {
|
|||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
WidgetsBinding.instance.removeObserver(this);
|
WidgetsBinding.instance.removeObserver(this);
|
||||||
if (Platform.isAndroid) {
|
// if (defaultTargetPlatform == TargetPlatform.android) {
|
||||||
SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
|
// SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
|
||||||
}
|
// }
|
||||||
_audioPlayer.dispose();
|
_audioPlayer.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
@@ -121,21 +121,23 @@ class _PoetScreenState extends State<PoetScreen> with WidgetsBindingObserver {
|
|||||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
children: [
|
children: [
|
||||||
// 상단 바 (뒤로가기, 제목, 새로고침)
|
// 상단 바 (뒤로가기, 제목, 새로고침)
|
||||||
Row(
|
Padding(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
padding: const EdgeInsets.only(top: 50.0,left: 25),
|
||||||
children: [
|
child: Row(
|
||||||
_buildCircularImageButton('assets/images/ui/UI_Back.webp', () {
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
// 이 버튼을 누르면 이전 화면으로 돌아갑니다.
|
children: [
|
||||||
Navigator.pop(context);
|
_buildCircularImageButton('assets/images/ui/UI_Back.webp', () {
|
||||||
}, size: 50, imageSize: 25),
|
// 이 버튼을 누르면 이전 화면으로 돌아갑니다.
|
||||||
_buildCircularImageButton('assets/images/ui/UI_Replay.webp', () {
|
Navigator.pop(context);
|
||||||
// Refresh action here
|
}, size: 90, imageSize: 90),
|
||||||
}, size: 50, imageSize: 25),
|
// _buildCircularImageButton('assets/images/ui/UI_Replay.webp', () {
|
||||||
],
|
// // Refresh action here
|
||||||
|
// }, size: 100, imageSize: 100),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
|
|
||||||
|
|
||||||
// 하단 음악 제어
|
|
||||||
_buildMusicControls(),
|
_buildMusicControls(),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@@ -177,15 +179,16 @@ class _PoetScreenState extends State<PoetScreen> with WidgetsBindingObserver {
|
|||||||
final newPosition = _position - const Duration(seconds: 5);
|
final newPosition = _position - const Duration(seconds: 5);
|
||||||
_audioPlayer.seek(newPosition > Duration.zero ? newPosition : Duration.zero);
|
_audioPlayer.seek(newPosition > Duration.zero ? newPosition : Duration.zero);
|
||||||
}),
|
}),
|
||||||
const SizedBox(width: 16),
|
const SizedBox(width: 100),
|
||||||
_buildPlayPauseButton(),
|
_buildPlayPauseButton(),
|
||||||
const SizedBox(width: 16),
|
const SizedBox(width: 100),
|
||||||
_buildCircularImageButton('assets/images/ui/UI_5plus.webp', () {
|
_buildCircularImageButton('assets/images/ui/UI_5plus.webp', () {
|
||||||
final newPosition = _position + const Duration(seconds: 5);
|
final newPosition = _position + const Duration(seconds: 5);
|
||||||
_audioPlayer.seek(newPosition < _duration ? newPosition : _duration);
|
_audioPlayer.seek(newPosition < _duration ? newPosition : _duration);
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -204,37 +207,33 @@ class _PoetScreenState extends State<PoetScreen> with WidgetsBindingObserver {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
child: Container(
|
child: Container(
|
||||||
width: 80,
|
width: 150,
|
||||||
height: 80,
|
height: 150,
|
||||||
decoration: BoxDecoration(
|
|
||||||
color: const Color(0xFFF07B41),
|
|
||||||
shape: BoxShape.circle,
|
|
||||||
border: Border.all(color: Colors.white, width: 2),
|
|
||||||
),
|
|
||||||
child: Center(
|
child: Center(
|
||||||
child: _isPlaying
|
child: _isPlaying
|
||||||
? const Icon(Icons.pause, color: Colors.white, size: 50)
|
? Image.asset(
|
||||||
|
'assets/images/ui/UI_Pause.webp',
|
||||||
|
width: 191,
|
||||||
|
height: 190,
|
||||||
|
)
|
||||||
: Image.asset(
|
: Image.asset(
|
||||||
'assets/images/ui/UI_Play.webp',
|
'assets/images/ui/UI_Play.webp',
|
||||||
width: 50,
|
width: 191,
|
||||||
height: 50,
|
height: 190,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildCircularImageButton(String imagePath, VoidCallback onPressed, {double size = 80, double imageSize = 50}) {
|
Widget _buildCircularImageButton(String imagePath, VoidCallback onPressed, {double size = 100, double imageSize = 100}) {
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
onTap: onPressed,
|
onTap: onPressed,
|
||||||
child: Container(
|
child: Container(
|
||||||
width: size,
|
width: size,
|
||||||
height: size,
|
height: size,
|
||||||
decoration: BoxDecoration(
|
|
||||||
color: const Color(0xFFF07B41),
|
|
||||||
shape: BoxShape.circle,
|
|
||||||
border: Border.all(color: Colors.white, width: 2),
|
|
||||||
),
|
|
||||||
child: Center(
|
child: Center(
|
||||||
child: Image.asset(
|
child: Image.asset(
|
||||||
imagePath,
|
imagePath,
|
||||||
@@ -258,5 +257,5 @@ class _PoetScreenState extends State<PoetScreen> with WidgetsBindingObserver {
|
|||||||
].join(':');
|
].join(':');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -4,10 +4,10 @@ project(runner LANGUAGES CXX)
|
|||||||
|
|
||||||
# The name of the executable created for the application. Change this to change
|
# The name of the executable created for the application. Change this to change
|
||||||
# the on-disk name of your application.
|
# the on-disk name of your application.
|
||||||
set(BINARY_NAME "poet")
|
set(BINARY_NAME "시인의 서재")
|
||||||
# The unique GTK application identifier for this application. See:
|
# The unique GTK application identifier for this application. See:
|
||||||
# https://wiki.gnome.org/HowDoI/ChooseApplicationID
|
# https://wiki.gnome.org/HowDoI/ChooseApplicationID
|
||||||
set(APPLICATION_ID "com.example.poet")
|
set(APPLICATION_ID "com.example.poet_repository")
|
||||||
|
|
||||||
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
|
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
|
||||||
# versions of CMake.
|
# versions of CMake.
|
||||||
|
|||||||
@@ -5,10 +5,10 @@
|
|||||||
// 'flutter create' template.
|
// 'flutter create' template.
|
||||||
|
|
||||||
// The application's name. By default this is also the title of the Flutter window.
|
// The application's name. By default this is also the title of the Flutter window.
|
||||||
PRODUCT_NAME = poet
|
PRODUCT_NAME = 시인의 서재
|
||||||
|
|
||||||
// The application's bundle identifier
|
// The application's bundle identifier
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.poet
|
PRODUCT_BUNDLE_IDENTIFIER = com.example.poet_repository
|
||||||
|
|
||||||
// The copyright displayed in application information
|
// The copyright displayed in application information
|
||||||
PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved.
|
PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved.
|
||||||
|
|||||||
88
pubspec.lock
@@ -1,6 +1,22 @@
|
|||||||
# Generated by pub
|
# Generated by pub
|
||||||
# See https://dart.dev/tools/pub/glossary#lockfile
|
# See https://dart.dev/tools/pub/glossary#lockfile
|
||||||
packages:
|
packages:
|
||||||
|
archive:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: archive
|
||||||
|
sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "4.0.7"
|
||||||
|
args:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: args
|
||||||
|
sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.7.0"
|
||||||
async:
|
async:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -81,6 +97,22 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.4.0"
|
version: "1.4.0"
|
||||||
|
checked_yaml:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: checked_yaml
|
||||||
|
sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.4"
|
||||||
|
cli_util:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: cli_util
|
||||||
|
sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.4.2"
|
||||||
clock:
|
clock:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -150,6 +182,14 @@ packages:
|
|||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.0"
|
version: "0.0.0"
|
||||||
|
flutter_launcher_icons:
|
||||||
|
dependency: "direct dev"
|
||||||
|
description:
|
||||||
|
name: flutter_launcher_icons
|
||||||
|
sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.13.1"
|
||||||
flutter_lints:
|
flutter_lints:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
@@ -184,6 +224,22 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.1.2"
|
version: "4.1.2"
|
||||||
|
image:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: image
|
||||||
|
sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "4.5.4"
|
||||||
|
json_annotation:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: json_annotation
|
||||||
|
sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "4.9.0"
|
||||||
leak_tracker:
|
leak_tracker:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -296,6 +352,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.3.0"
|
version: "2.3.0"
|
||||||
|
petitparser:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: petitparser
|
||||||
|
sha256: "1a97266a94f7350d30ae522c0af07890c70b8e62c71e8e3920d1db4d23c057d1"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "7.0.1"
|
||||||
platform:
|
platform:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -312,6 +376,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.8"
|
version: "2.1.8"
|
||||||
|
posix:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: posix
|
||||||
|
sha256: "6323a5b0fa688b6a010df4905a56b00181479e6d10534cecfecede2aa55add61"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "6.0.3"
|
||||||
sky_engine:
|
sky_engine:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
@@ -429,6 +501,22 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.0"
|
version: "1.1.0"
|
||||||
|
xml:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: xml
|
||||||
|
sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "6.6.1"
|
||||||
|
yaml:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: yaml
|
||||||
|
sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.1.3"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=3.8.1 <4.0.0"
|
dart: ">=3.8.1 <4.0.0"
|
||||||
flutter: ">=3.29.0"
|
flutter: ">=3.29.0"
|
||||||
|
|||||||
11
pubspec.yaml
@@ -1,5 +1,5 @@
|
|||||||
name: poet
|
name: poet_repository
|
||||||
description: "A new Flutter project."
|
description: "시인의 서재"
|
||||||
# The following line prevents the package from being accidentally published to
|
# The following line prevents the package from being accidentally published to
|
||||||
# pub.dev using `flutter pub publish`. This is preferred for private packages.
|
# pub.dev using `flutter pub publish`. This is preferred for private packages.
|
||||||
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
||||||
@@ -39,6 +39,7 @@ dependencies:
|
|||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
|
flutter_launcher_icons: "^0.13.1"
|
||||||
|
|
||||||
# The "flutter_lints" package below contains a set of recommended lints to
|
# The "flutter_lints" package below contains a set of recommended lints to
|
||||||
# encourage good coding practices. The lint set provided by the package is
|
# encourage good coding practices. The lint set provided by the package is
|
||||||
@@ -94,3 +95,9 @@ flutter:
|
|||||||
#
|
#
|
||||||
# For details regarding fonts from package dependencies,
|
# For details regarding fonts from package dependencies,
|
||||||
# see https://flutter.dev/to/font-from-package
|
# see https://flutter.dev/to/font-from-package
|
||||||
|
|
||||||
|
flutter_launcher_icons:
|
||||||
|
android: "launcher_icon"
|
||||||
|
ios: true
|
||||||
|
image_path: "assets/images/ui/UI_Play.webp"
|
||||||
|
remove_alpha_ios: true
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
|
||||||
import 'package:poet/main.dart';
|
import 'package:poet_repository/main.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
|
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
|
||||||
|
|||||||
@@ -23,13 +23,13 @@
|
|||||||
<!-- iOS meta tags & icons -->
|
<!-- iOS meta tags & icons -->
|
||||||
<meta name="mobile-web-app-capable" content="yes">
|
<meta name="mobile-web-app-capable" content="yes">
|
||||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||||
<meta name="apple-mobile-web-app-title" content="poet">
|
<meta name="apple-mobile-web-app-title" content="시인의 서재">
|
||||||
<link rel="apple-touch-icon" href="icons/Icon-192.png">
|
<link rel="apple-touch-icon" href="icons/Icon-192.png">
|
||||||
|
|
||||||
<!-- Favicon -->
|
<!-- Favicon -->
|
||||||
<link rel="icon" type="image/png" href="favicon.png"/>
|
<link rel="icon" type="image/png" href="favicon.png"/>
|
||||||
|
|
||||||
<title>poet</title>
|
<title>시인의 서재</title>
|
||||||
<link rel="manifest" href="manifest.json">
|
<link rel="manifest" href="manifest.json">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"name": "poet",
|
"name": "시인의 서재",
|
||||||
"short_name": "poet",
|
"short_name": "시인의 서재",
|
||||||
"start_url": ".",
|
"start_url": ".",
|
||||||
"display": "standalone",
|
"display": "standalone",
|
||||||
"background_color": "#0175C2",
|
"background_color": "#0175C2",
|
||||||
"theme_color": "#0175C2",
|
"theme_color": "#0175C2",
|
||||||
"description": "A new Flutter project.",
|
"description": "시인의 서재",
|
||||||
"orientation": "portrait-primary",
|
"orientation": "portrait-primary",
|
||||||
"prefer_related_applications": false,
|
"prefer_related_applications": false,
|
||||||
"icons": [
|
"icons": [
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
# Project-level configuration.
|
# Project-level configuration.
|
||||||
cmake_minimum_required(VERSION 3.14)
|
cmake_minimum_required(VERSION 3.14)
|
||||||
project(poet LANGUAGES CXX)
|
project(시인의 서재 LANGUAGES CXX)
|
||||||
|
|
||||||
# The name of the executable created for the application. Change this to change
|
# The name of the executable created for the application. Change this to change
|
||||||
# the on-disk name of your application.
|
# the on-disk name of your application.
|
||||||
set(BINARY_NAME "poet")
|
set(BINARY_NAME "시인의 서재")
|
||||||
|
|
||||||
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
|
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
|
||||||
# versions of CMake.
|
# versions of CMake.
|
||||||
|
|||||||