묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[2025 리뉴얼]플러터플로우로 코딩 없이 한달 안에 앱 만들기
홈화면에서 계속 충돌이 발생해요
플러터플로우 관련 질문글을 자유롭게 작성해 주세요!문제가 발생하는 환경을 자세히 적어줄수록 좋아요나머지 화면들은 괜찮은데 홈화면에서만 계속 버벅거리는 현상이 발생해요....수업 그대로 따라 했는데 해결이 안되네요. 왜그럴까요?
-
해결됨비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE
lovable 슈퍼베이스 연결
결제하고 러너블에서 슈퍼베이스 연동을 할려했는데 connect supabase 이 버튼을 눌렀는데어딜봐도 슈퍼베이스란건 안적혀있는데 어떻게 연동하나요?
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
Column을 가로방향 최대 사이즈를 차지하도록 하는 방법에 관련
안녕하세요. Column의 가로방향 최대 사이즈를 차지하도록 만들때 2가지 방법을 섞어서 설명해주시는데요. 1) SizedBox로 Wrapping하기2) CrossAxisAlignment.stretch 속성 설정하기 이렇게 2가지로 만들 때, Widget properties로 확인해보면 Column 위젯의 width가 최대가 되기 때문에 차이가 없어 보이는데요. 어떤 방법을 언제 사용해야 되는지 규칙이 따로 있는 것인지 문의드립니다.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
pubspec.yaml에서 font를 추가하면서 weight 값을 지정하는 것이 의미가 있는 것인지 문의
안녕하세요. 좋은 강의 만들어 주셔서 감사합니다. pubspec.yaml 에서 font를 추가하면서 weight 값도 추가해주는데요. 이 값일 빼거나, 다른 값으로 변경해서 테스트를 해도 변화가 없는것 같던데요. 그래서 의미가 없는 코드처럼 보여서요. 제가 맞게 파악하고 있는 것일까요? 아래 내용은 강사님께서 수업하시면서 말씀하신 내용을 주석으로 남겼던 부분입니다. # 패밀리는 폰트의 종류를 의미한다.(철자는 마음대로 지정해도 된다) fonts: - family: parisienne fonts: #fonts는 실제 적용될 폰트를 의미한다. - asset: asset/font/Parisienne-Regular.ttf #asset에 실제로 사용될 폰트를 선택해준다. - family: sunflower fonts: #Medium, Bold는 더 굵은것이라는 것을 구분하기 위해서 명시해줘야 한다. - asset: asset/font/Sunflower-Light.ttf - asset: asset/font/Sunflower-Medium.ttf weight: 700 # 숫자는 마음대로 넣을 수 있다. 코드에서 weight500를 사용하면 Medium 폰트를 사용할 것이라는 뜻이다. - asset: asset/font/Sunflower-Bold.ttf weight: 500 # 숫자는 마음대로 넣을 수 있다. 코드에서 weight500를 사용하면 Medium 폰트를 사용할 것이라는 뜻이다.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
setState()를 호출하지 않으면 build가 실행 안되는 건가요?
안녕하세요. setState()를 실행하면, build()함수가 실행되는 것을 배웠는데요. build()가 처음 실행된 이후로, setState()를 명시적으로 호출하지 않는다면, build()함수가 실행되는 경우는 없는 것인가요? 즉, setState()를 개발자가 명시적으로 넣어주지 않았다면, 화면 갱신이 절대 발생 안되는 것인지가 궁금했습니다. 나중에 강의를 더 나가면 저절로 알게될지도 모르겠지만, 궁금해서 문의드립니다. 감사합니다.
-
해결됨Flutter 앱 개발 기초
user-not-found, wrong-password 코드가 더 이상 반환되지 않습니다
2023년 9월 15일 이후 프로젝트에서는 Email Enumeration Protection이 기본 활성화되어 user-not-found, wrong-password 코드가 더 이상 반환되지 않습니다 -> INVALID_LOGIN_CREDENTIALS 코드로 통합 try { await FirebaseAuth.instance.signInWithEmailAndPassword( email: email, password: password, ); onSuccess(); notifyListeners(); } on FirebaseAuthException catch (e) { if (e.code == 'INVALID_LOGIN_CREDENTIALS' || e.code.contains('invalid-credential') || e.code == 'wrong-password' || e.code == 'user-not-found') { onError('이메일 또는 비밀번호를 확인해주세요.'); } else if (e.code == 'invalid-email') { onError('이메일 형식을 확인해주세요.'); } else { onError(e.message!); } } catch (e) { onError('서버 오류가 발생하였습니다 $e.toString()'); }
-
해결됨Flutter 앱 개발 기초
SharedPreferences prefs 초기화 시기 문제
제 식대로 코드를 수정했습니다. MultiProvider로 CatService(prefs)를 호출하는 시기와 prefs를 초기화하는 시기가 비슷하여, 문제가 생겼습니다. "CatService 내부에서 async로 초기화하게 만들고생성자에서 바로 prefs를 쓰지 않도록 수정"하는 방식을 추천하는데 그게 맞을까요? 에러 메세지는 다음과 같습니다 [ERROR:flutter/runtime/dart_vm_initializer.cc(40)] Unhandled Exception: PlatformException(channel-error, Unable to establish connection on channel: "dev.flutter.pigeon.shared_preferences_android.SharedPreferencesApi.getAll"., null, null) 주요 코드import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); SharedPreferences prefs = await SharedPreferences.getInstance(); runApp( MultiProvider( providers: [ ChangeNotifierProvider(create: (context) => CatService(prefs)), ], child: const MyApp(), ), ); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: HomePage(), theme: ThemeData(textTheme: GoogleFonts.getTextTheme('Sunflower')), ); } } class CatService extends ChangeNotifier { SharedPreferences prefs; List<String> catImages = []; List<String> favoriteImages = []; CatService(this.prefs) { getRandomCatImages(); favoriteImages = prefs.getStringList("favorites") ?? []; } void getRandomCatImages() async { Response result = await Dio().get( 'https://api.thecatapi.com/v1/images/search?limit=10&mime_types=jpg', ); for (var i = 0; i < result.data.length; i++) { catImages.add(result.data[i]["url"]); } notifyListeners(); } void toggleFavoriteImages(String image) { if (favoriteImages.contains(image)) { favoriteImages.remove(image); } else { favoriteImages.add(image); } prefs.setStringList("favorites", favoriteImages); notifyListeners(); } } <전체 코드>import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); SharedPreferences prefs = await SharedPreferences.getInstance(); runApp( MultiProvider( providers: [ ChangeNotifierProvider(create: (context) => CatService(prefs)), ], child: const MyApp(), ), ); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: HomePage(), theme: ThemeData(textTheme: GoogleFonts.getTextTheme('Sunflower')), ); } } class CatService extends ChangeNotifier { SharedPreferences prefs; List<String> catImages = []; List<String> favoriteImages = []; CatService(this.prefs) { getRandomCatImages(); favoriteImages = prefs.getStringList("favorites") ?? []; } void getRandomCatImages() async { Response result = await Dio().get( 'https://api.thecatapi.com/v1/images/search?limit=10&mime_types=jpg', ); for (var i = 0; i < result.data.length; i++) { catImages.add(result.data[i]["url"]); } notifyListeners(); } void toggleFavoriteImages(String image) { if (favoriteImages.contains(image)) { favoriteImages.remove(image); } else { favoriteImages.add(image); } prefs.setStringList("favorites", favoriteImages); notifyListeners(); } } class HomePage extends StatefulWidget { const HomePage({super.key}); @override State<HomePage> createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { @override Widget build(BuildContext context) { return Consumer<CatService>( builder: (context, catService, child) { return Scaffold( appBar: AppBar( backgroundColor: Colors.yellow, title: Center(child: Text("랜덤 고양이")), actions: [ IconButton( onPressed: () { Navigator.push( context, MaterialPageRoute(builder: (context) => FavoritePage()), ); }, icon: Icon(Icons.favorite, color: Colors.red), ), ], ), body: SafeArea( child: Container( color: Colors.brown.shade100, child: GridView.count( crossAxisCount: 2, mainAxisSpacing: 8, crossAxisSpacing: 8, padding: EdgeInsets.all(8), children: List.generate(catService.catImages.length, (index) { String catImage = catService.catImages[index]; return Stack( children: [ Positioned.fill( child: GestureDetector( onTap: () { catService.toggleFavoriteImages(catImage); }, child: Image.network(catImage, fit: BoxFit.cover), ), ), Positioned( right: 0, bottom: 0, child: Icon( Icons.favorite, size: 40, color: catService.favoriteImages.contains(catImage) ? Colors.pink.shade200 : Colors.transparent, ), ), ], ); }), ), ), ), ); }, ); } } class FavoritePage extends StatelessWidget { const FavoritePage({super.key}); @override Widget build(BuildContext context) { return Consumer<CatService>( builder: (context, catService, child) { return Scaffold( appBar: AppBar( backgroundColor: Colors.yellow, title: Center(child: Text("좋아")), ), body: SafeArea( child: GridView.count( crossAxisCount: 2, mainAxisSpacing: 8, crossAxisSpacing: 8, padding: EdgeInsets.all(8), children: List.generate(catService.favoriteImages.length, ( index, ) { String catImage = catService.favoriteImages[index]; return Stack( children: [ Positioned.fill( child: GestureDetector( onTap: () { catService.toggleFavoriteImages(catImage); }, child: Image.network(catImage, fit: BoxFit.cover), ), ), Positioned( right: 0, bottom: 0, child: Icon( Icons.favorite, size: 40, color: catService.favoriteImages.contains(catImage) ? Colors.pink.shade200 : Colors.transparent, ), ), ], ); }), ), ), ); }, ); } }
-
해결됨비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE
download as zip 윈도우에서 어디있나요?
2-3강 듣는 중에 교재 위치 2-39) 이거 저만 안보이는 것일까요? 흑흑,, 윈도우 사용중인데 이게 어디있는지 모르겠습니다. 지피티한테 물어봐도 모르겠어서 질문드려요 현재 수강 진도를 함께 알려주세요! "1주차 3강까지 완료" 또는 "2주차 실습 중"처럼 어디까지 들으셨는지 적어주시면 맞춤형 답변을 드릴 수 있어요 📚구체적인 상황과 함께 질문해주세요! "AI가 안 된다"보다는 "Cursor에서 이런 프롬프트를 입력했는데 이런 에러가 나와요"처럼 상세하게 적어주시면 더 정확한 답변을 드릴 수 있어요 🎯스크린샷이나 코드를 첨부해주세요. 에러 화면, 현재 진행 상황을 보여주시면 문제 해결이 10배 빨라집니다! 마크다운 코드 블록(```)을 활용하면 더 깔끔하게 정리할 수 있어요 📸커뮤니티 검색을 먼저 해보세요. 같은 문제로 고민하신 분들이 이미 해결책을 찾았을 수도 있어요. 검색 후 못 찾으시면 언제든 새로 질문해주세요! 🔍서로 도우며 함께 성장해요. 나도 모르는 건 "저도 궁금해요!"라고 댓글 달아주시고, 아는 건 적극적으로 공유해주세요. 가르치면서 더 잘하게 됩니다 💪바이브코딩 관련 질문은 환영, 기술 세부사항은 GPT 활용! 프롬프트 작성법, AI 도구 사용법은 여기서, 복잡한 코딩 문법은 ChatGPT에게 물어보시는 게 더 빨라요 🤖진도나 과제 관련 문의는 1:1 문의를 이용해주세요. 개인적인 학습 계획, 환불, 수강 기간 연장 등은 따로 문의해주시면 더 자세히 상담드릴게요 📞실패 사례도 공유해주세요! "이렇게 했더니 망했어요" 같은 경험담도 다른 수강생들에게 큰 도움이 됩니다. 실패도 소중한 학습 자료예요 💡💬 좋은 질문 예시[진도] 2주차 5강 - React 컴포넌트 생성까지 완료[질문] Cursor에서 버튼 컴포넌트 생성 시 에러 발생상황: 2주차 실습 중 버튼 컴포넌트를 만들려고 하는데프롬프트: "빨간색 버튼 컴포넌트 만들어줘"에러 메시지: [스크린샷 첨부]시도해본 것: GPT에게도 물어봤는데 같은 에러 발생어떻게 해결하면 될까요?
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
video_call 플러그인 설치시 에러문제
위처럼 플러그인 설치후에 에러가 발생합니다. 도움부탁드립니다.
-
해결됨Flutter 앱 개발 기초
index로 삭제하게 되면, index가 고정되어 있으니 문제가 발생하지 않나요?
bucketlist의 index와 삭제할 index가 다르게 되는 상황이 발생하지 않나요? 제가 직접 설명하긴 어려워서 ai 답변 올립니다index 캡처 문제가 있습니다 // 1. IconButton 클릭 → showDeleteDialog(context, index) 호출 onPressed: () { showDeleteDialog(context, index); }, // index=1 (예시) // 2. Dialog에서 onPressed 호출 시 TextButton( onPressed: () { setState(() { bucketList.removeAt(index); // ❌ index=1 고정 (Dialog 동안 리스트 변경됨) }); }, )Dialog가 열리는 동안 다른 항목 삭제 → index 무효화 → 잘못된 항목 삭제
-
해결됨Flutter 앱 개발 실전
다트 프로젝트
이렇게 뜨는데 왜 lib이 없을까요?
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
children 안의 if 문에서 { } 못쓰는 이유?
child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ if(show) GestureDetector( onTap: () { setState(() { color = color == Colors.blue ? Colors.red : Colors.blue; }); }, child: CodeFactoryWidget( color: color ), ), SizedBox(height: 32.0,), ElevatedButton( onPressed: () { //print('Clikced!'); setState(() { show = show == true ? false : true; }); }, child: Text('클릭해서 보이기/ 안보이기')) ], 이렇게 인데, if(show) 의 코드를 좀더 편하게 보기 위해 GestureDectector() 를 { } 로 묶어주려고하니까 오류가 뜨네요. 왜그런가요?if() {} 이렇게 할 수 있지 않나요?그리고 if() {} 안에 print() 넣으려고 하니 print 도 에러가 뜨네여child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ if(show) { // if문 {} 로 묶어줌 GestureDetector( onTap: () { setState(() { color = color == Colors.blue ? Colors.red : Colors.blue; }); }, child: CodeFactoryWidget( color: color ), ), } else print("Error"); // print 도 에러 뜸 SizedBox(height: 32.0,), ElevatedButton( onPressed: () { //print('Clikced!'); setState(() { show = show == true ? false : true; }); }, child: Text('클릭해서 보이기/ 안보이기')) ], ),코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
해결됨Flutter 앱 개발 기초
API 사이트가 안되네요
[링크] Numbers Quiz API URL 여기 눌러도 그냥 아무것도 안떠요
-
해결됨Flutter 앱 개발 기초
잘 되다가 sharedPreferences부터 에러
exception: warning: classpath entry points to a non-existent location: C:\Users\uAE40uC740uC9C4\.gradle\caches\modules-2\files-2.1\org.jetbrains\annotations\23.0.0\8cc20c07506ec18e0834947b84a864bfc094484e\annotations-23.0.0.jarexception: warning: classpath entry points to a non-existent location: C:\Users\uAE40uC740uC9C4\.gradle\caches\8.14\transforms\66a55c9302b8dacfca4a88d55f2bb41c\transformed\startup-runtime-1.1.1-api.jarexception: warning: classpath entry points to a non-existent location: C:\Users\uAE40uC740uC9C4\.gradle\caches\8.14\transforms\0323f414d3b6f829989b737577ddbcb8\transformed\tracing-1.2.0-api.jarexception: warning: classpath entry points to a non-existent location: C:\Users\uAE40uC740uC9C4\.gradle\caches\8.14\transforms\b5ea8c96fd0431c40235788c8b3be10a\transformed\relinker-1.4.5-api.jarexception: error: source file or directory not found: C:\Users\uAE40uC740uC9C4\AppData\Local\Pub\Cache\hosted\pub.dev\shared_preferences_android-2.4.18\android\src\main\kotlin\io\flutter\plugins\sharedpreferences\MessagesAsync.g.ktexception: error: source file or directory not found: C:\Users\uAE40uC740uC9C4\AppData\Local\Pub\Cache\hosted\pub.dev\shared_preferences_android-2.4.18\android\src\main\kotlin\io\flutter\plugins\sharedpreferences\SharedPreferencesPlugin.ktexception: error: source file or directory not found: C:\Users\uAE40uC740uC9C4\AppData\Local\Pub\Cache\hosted\pub.dev\shared_preferences_android-2.4.18\android\src\main\kotlin\io\flutter\plugins\sharedpreferences\StringListObjectInputStream.ktFAILURE: Build failed with an exception.* What went wrong:Execution failed for task ':shared_preferences_android:compileDebugKotlin'.> A failure occurred while executing org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction > Compilation error. See log for more details* Try:> Run with --stacktrace option to get the stack trace.> Run with --info or --debug option to get more log output.> Run with --scan to get full insights.> Get more help at https://help.gradle.org. --- 위처럼 에러나고, 재실행하려고 하니까 아예 앱이 안켜집니다.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
이렇게 오류가 떠요
E/flutter ( 5343): [ERROR:flutter/runtime/dart_vm_initializer.cc(40)] Unhandled Exception: 'package:webview_flutter_platform_interface/src/platform_webview_controller.dart': Failed assertion: line 26 pos 7: 'WebViewPlatform.instance != null': A platform implementation for webview_flutter has not been set. Please ensure that an implementation of WebViewPlatform has been set to WebViewPlatform.instance before use. For unit testing, WebViewPlatform.instance can be set with your own test implementation. 코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
AppBar 사용했는데
AppBar 사용했는데, 예시처럼 파란색 바탕에 흰색 글씨가 아니라, 그냥 똑같이 흰색 배경에 검정색 글씨가 나와요 코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
해결됨비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE
저 플러터 앱 만들준비 된건가요?
저는 지금 진도 4-1입니다 이렇게 나와요. visual studio에 !표시 있습니다.추가로 준비해야 하나요? 강사님의 macOS와 다른 windows를 쓰고 있어서 다르게 나오는지 모르겠습니다 현재 수강 진도를 함께 알려주세요! "1주차 3강까지 완료" 또는 "2주차 실습 중"처럼 어디까지 들으셨는지 적어주시면 맞춤형 답변을 드릴 수 있어요 📚구체적인 상황과 함께 질문해주세요! "AI가 안 된다"보다는 "Cursor에서 이런 프롬프트를 입력했는데 이런 에러가 나와요"처럼 상세하게 적어주시면 더 정확한 답변을 드릴 수 있어요 🎯스크린샷이나 코드를 첨부해주세요. 에러 화면, 현재 진행 상황을 보여주시면 문제 해결이 10배 빨라집니다! 마크다운 코드 블록(```)을 활용하면 더 깔끔하게 정리할 수 있어요 📸커뮤니티 검색을 먼저 해보세요. 같은 문제로 고민하신 분들이 이미 해결책을 찾았을 수도 있어요. 검색 후 못 찾으시면 언제든 새로 질문해주세요! 🔍서로 도우며 함께 성장해요. 나도 모르는 건 "저도 궁금해요!"라고 댓글 달아주시고, 아는 건 적극적으로 공유해주세요. 가르치면서 더 잘하게 됩니다 💪바이브코딩 관련 질문은 환영, 기술 세부사항은 GPT 활용! 프롬프트 작성법, AI 도구 사용법은 여기서, 복잡한 코딩 문법은 ChatGPT에게 물어보시는 게 더 빨라요 🤖진도나 과제 관련 문의는 1:1 문의를 이용해주세요. 개인적인 학습 계획, 환불, 수강 기간 연장 등은 따로 문의해주시면 더 자세히 상담드릴게요 📞실패 사례도 공유해주세요! "이렇게 했더니 망했어요" 같은 경험담도 다른 수강생들에게 큰 도움이 됩니다. 실패도 소중한 학습 자료예요 💡💬 좋은 질문 예시[진도] 2주차 5강 - React 컴포넌트 생성까지 완료[질문] Cursor에서 버튼 컴포넌트 생성 시 에러 발생상황: 2주차 실습 중 버튼 컴포넌트를 만들려고 하는데프롬프트: "빨간색 버튼 컴포넌트 만들어줘"에러 메시지: [스크린샷 첨부]시도해본 것: GPT에게도 물어봤는데 같은 에러 발생어떻게 해결하면 될까요?
-
해결됨Flutter 앱 개발 기초
기존의 프로젝트
에뮬레이터 켜면 기존의 프로젝트가 뜨는데이거 어떻게 새걸로 나오게 할 수 있을까요
-
해결됨Flutter 앱 개발 기초
I/O라는 창이 윈도우에서는 없어요
어디가야 I/O 이거로 키보드 보이게 할 수 있을까요? 10:18 부분입니다
-
해결됨Flutter 초입문 왕초보편
실로폰 음원 재생 오류 해결 (do.1.wav)
안녕하세요. 강의 듣다가 테스트 중에 문제가 발생하여 해당 내용에 대해 공유를 드리고자 이렇게 글 남깁니다.문제가 발생한 부분은 음원을 audioPlayer 객체로 읽어 들이는 과정에서 제대로 처리가 되지 않아 _isLoading State 값이 변경되지 않고 무한 로딩이 걸리는 문제가 있습니다.원인을 찾고자 try ~ catch 문을 통해 에러 메세지를 출력해 보았다가 _isLoading State가 정상적으로 업데이트 되어 화면 UI가 나오기 시작했습니다.for (final note in notes) { final player = AudioPlayer(); try { await player.setAsset('assets/$note'); } catch (e) { print(e); } _audioPlayers.add(player); }다만 이렇게 수정한 후에는 맨 첫 번째 '도' 건반의 소리가 나지 않았습니다. 다른 음원은 모두 정상적으로 로드했지만, 첫 번째 'do1.wav' 만 로드가 되지 않고 에러가 발생합니다.Playback error androidx.media3.exoplayer.ExcoPlaybackException: Source Error여러 고민을 해 보다가 혹시나 싶어 'do1.wav'의 음원의 이름을 'do.wav'로 바꾸니 정상적으로 작동하였습니다.정확한 원인은 모르겠지만, 혹시 같은 문제를 겪는 분은 이름을 바꿔보는 걸 시도해 보시면 좋을 거 같습니다!