[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
안녕하세요. 오늘 처음 안드로이드 스튜디오 다운받았고, 처음으로 플러터 sdk 다운받았습니다. 그런데 에뮬레이터를 실행하고 test_proj를 실행하는 과정에서 아래와 같은 오류가 발생합니다. ㅠ.. 어떻게 해결해야 하나요? 4번째 Warning 부분이 빨간색으로 나오네요. Launching lib\main.dart on sdk gphone64 x86 64 in debug mode... Running Gradle task 'assembleDebug'... Warning: This version only understands SDK XML versions up to 3 but an SDK XML file of version 4 was encountered. This can happen if you use versions of Android Studio and the command-line tools that were released at different times. Checking the license for package Android SDK Tools in C:\Users\suhol\AppData\Local\Android\sdk\licenses License for package Android SDK Tools accepted. Preparing "Install Android SDK Tools (revision: 26.1.1)". "Install Android SDK Tools (revision: 26.1.1)" ready. Installing Android SDK Tools in C:\Users\suhol\AppData\Local\Android\sdk\tools "Install Android SDK Tools (revision: 26.1.1)" complete. "Install Android SDK Tools (revision: 26.1.1)" finished. Checking the license for package Android SDK Build-Tools 30.0.3 in C:\Users\suhol\AppData\Local\Android\sdk\licenses License for package Android SDK Build-Tools 30.0.3 accepted. Preparing "Install Android SDK Build-Tools 30.0.3 (revision: 30.0.3)". "Install Android SDK Build-Tools 30.0.3 (revision: 30.0.3)" ready. Installing Android SDK Build-Tools 30.0.3 in C:\Users\suhol\AppData\Local\Android\sdk\build-tools\30.0.3 "Install Android SDK Build-Tools 30.0.3 (revision: 30.0.3)" complete. "Install Android SDK Build-Tools 30.0.3 (revision: 30.0.3)" finished. √ Built build\app\outputs\flutter-apk\app-debug.apk Installing build\app\outputs\flutter-apk\app-debug.apk... Debug service listening on ws://127.0.0.1:50981/764n9IlfL4k=/ws Syncing files to device sdk gphone64 x86 64... Lost connection to device. adb.exe: device offline
현재 리액트부분을 시작했는데 리액트를 설치할때 yarn add next@12.1.0 react@17.0.2 react-dom@17.0.2 --exact 이러한 명령어를 사용하는데 이렇게 설치하고 나니 제가 알고있는 폴더들이나 내용이 좀 다르더라구요. 제가 알고있는 건 npx create-react-app ./ 이러한 명령어로 리액트를 설치했는데 이거와 전혀 다른 명령어 인가요?
선생님 ! 우선 강의 잘 듣고있습니다. 많이 배워지는거 같아요~ 혹시 수업 듣기전 먼저 문제 풀어보고 수업 들으면서 타이핑은 하고 있는데 한강 듣고 난 후 빈칸 코랩시트지 다시 다운받아서 첨부터 혼자서 타이핑 해보고 다음강으로 넘어가는게 좋을까요? 아님 우선 먼저 빨리 1회독 하는게 좋을까요? 제안해주신대로 암기는 일단 차치하고 나아갈 생각입니다.
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
동영상 플레이어를 제작하는 중입니다. 영상을 에뮬레이터에 넣고 영상 선택까지도 됩니다. 그런데 초록 화면조차 안 나오고 재생이 안 됩니다. 플러터앱이 아니라 기본 앱을 통해 재생하려고 해도 재생이 안 되네요. 영상 파일 자체에는 이상이 없습니다. 윈도우 플레이어로 재생하면 잘 나오거든요. 에뮬레이터와 앱을 몇 번 재실행해도 안 되네요. 제 컴퓨터가 자원이 충분하지 않은가 싶어서 참고 수강하다가 아무래도 그런 문제는 아닐 것 같아서 문의드립니다.
안녕하세요 일코님 저번 답변으로 큰 도움을 얻었습니다. 감사합니다. 현재 제가 코드를 실행하면 아래와같은 경고메시지가 뜨는데.. 하나씩 실행해가면서 봤을떄는 문제가 없었는데 아래와 같은 문제가 왜 발생하는지 모르겠습니다. 어떨땐 뜨고, 어떨땐 안뜨는데, 도무지 알수가 없네요... 전체 코드를 첨부드립니다. import os from tkinter.filedialog import askopenfilename, askopenfilenames from pyhwpx import Hwp def 타겟인덱스찾기(target,학년): # FindReplace 설정 초기화 hwp.HAction.GetDefault("RepeatFind", hwp.HParameterSet.HFindReplace.HSet) hwp.HParameterSet.HFindReplace.FindString = f"{target[0]}년도 {target[1]:02}월 {학년} 학평 {target[2]:02}번" hwp.HParameterSet.HFindReplace.Direction = hwp.FindDir("Forward") hwp.HParameterSet.HFindReplace.FindType = 1 hwp.HParameterSet.HFindReplace.IgnoreMessage = 1 # 메시지 무시 설정 output = hwp.HAction.Execute("RepeatFind", hwp.HParameterSet.HFindReplace.HSet) if output == False: hwp.HAction.GetDefault("RepeatFind", hwp.HParameterSet.HFindReplace.HSet) hwp.HParameterSet.HFindReplace.FindString = f"{target[0]}년 {target[1]:02}월 {학년} 학평 {target[2]:02}번" hwp.HParameterSet.HFindReplace.Direction = hwp.FindDir("Forward") hwp.HParameterSet.HFindReplace.FindType = 1 hwp.HParameterSet.HFindReplace.IgnoreMessage = 1 # 메시지 무시 설정 return hwp.HAction.Execute("RepeatFind", hwp.HParameterSet.HFindReplace.HSet) else : return True def 워크북복수선택(): """ 선택한 모든 파일들의 전체경로를 가져오는 함수 """ filelist = askopenfilenames(title="문제를 추출할 아래아한글 문서를 모두 선택해주세요.", initialdir=os.getcwd(), filetypes=[("아래아한글파일", "*.hwp *.hwpx")]) return filelist # hwp = Hwp().hwp # 현재 열린 한글 실행 if __name__ == '__main__': hwp = Hwp(visible=True) 학년 = "고2" 타겟리스트 = [(21,11,30), (21,9,30), (20,6,3), (23,6,31), (22,11,31), (23,6,34) , (22,3,33), (21,6,33), (22,11,35), (22,6,35), (23,6,36) , (21,3,37), (20,9,38), (23,6,38), (21,9,39), (20,11,38), (22,9,40), (20,6,40), (23,9,30), (20,11,30) ] doc_1 = hwp.XHwpDocuments.Item(0) # output 문서 hwp.SetMessageBoxMode(0x20000) # 예,아니오 경고창은 노로 대답하기 워크북리스트 = 워크북복수선택() for 파일인덱스, 워크북 in enumerate(워크북리스트, start=1): doc_2 = hwp.XHwpDocuments.Add(False) # input문서 새로운 hwp열고 할당 (False=새로운창 / True = 기존hwp의 탭으로) hwp.Open(워크북) hwp.SetMessageBoxMode(0x20000) # 예,아니오 경고창은 노로 대답하기 doc_2.SetActive_XHwpDocument() # input문서 # Unit 추출하기 # '게시금지 ' 로 검색 hwp.HAction.GetDefault("RepeatFind", hwp.HParameterSet.HFindReplace.HSet) hwp.HParameterSet.HFindReplace.FindString = "게시금지 " hwp.HParameterSet.HFindReplace.Direction = hwp.FindDir("Forward") hwp.HParameterSet.HFindReplace.FindType = 1 hwp.HParameterSet.HFindReplace.IgnoreMessage = 1 # 메시지 무시 설정 hwp.HAction.Execute("RepeatFind", hwp.HParameterSet.HFindReplace.HSet) hwp.HAction.Run("Cancel") # Unit 칸으로 이동하여 복사하기 hwp.HAction.Run("MoveParaEnd") hwp.HAction.Run("MoveRight") hwp.HAction.Run("MoveSelParaEnd") # 현재 문단의 끝까지 블록 설정 hwp.HAction.Run("Copy") # 블록 설정된 텍스트를 클립보드로 복사 hwp.HAction.Run("Cancel") doc_1.SetActive_XHwpDocument() # output 문서 활성화 # 복사한 텍스트를 문서에 입력 if 파일인덱스 != 1 : hwp.HAction.Run("MoveDocEnd") hwp.HAction.Run("BreakPage") hwp.HAction.Run("Paste") hwp.HAction.Run("MoveSelLineBegin") for _ in range(10): hwp.HAction.Run("CharShapeHeightIncrease") # 텍스트 크기 증가 hwp.HAction.Run("Cancel") hwp.HAction.Run("MoveParaEnd") hwp.HAction.GetDefault("PageSetup", hwp.HParameterSet.HSecDef.HSet) hwp.HParameterSet.HSecDef.PageDef.Landscape = 1 hwp.HParameterSet.HSecDef.PageDef.BottomMargin = 0 hwp.HParameterSet.HSecDef.HSet.SetItem("ApplyClass", 28) hwp.HParameterSet.HSecDef.HSet.SetItem("ApplyTo", 2) hwp.HAction.Execute("PageSetup", hwp.HParameterSet.HSecDef.HSet) doc_2.SetActive_XHwpDocument() # input 활성화 for 인덱스,타겟튜플 in enumerate(타겟리스트, start=1) : hwp.HAction.Run("MoveDocBegin") # 타겟 찾아서 쪽 복사하기 if 타겟인덱스찾기(타겟튜플,학년): hwp.HAction.Run("CopyPage") # 두번째 문서 활성화 하고 쪽 붙여넣기 doc_1.SetActive_XHwpDocument() # output 문서 활성화 hwp.HAction.Run("MoveDocEnd") hwp.HAction.Run("BreakPage") hwp.HAction.Run("PastePage") if 인덱스 > 1: hwp.SetMessageBoxMode(0x20) hwp.HAction.Run("MovePrevParaEnd") hwp.HAction.Run("Delete") hwp.HAction.Run("Delete") hwp.HAction.Run("MoveDocEnd") doc_2.SetActive_XHwpDocument() # input 문서 활성화 현재경로 = doc_2.FullName doc_2.Close(False) #TRUE : 내용이 변경된 경우 닫지 않음, FALSE : 강제로 닫음 hwp.SetMessageBoxMode(0xF0000) # 경고창이 기본모드로 바뀜 hwp.SetMessageBoxMode(0xF0) 현재디렉토리 = os.path.dirname(현재경로) 파일이름 = "상세분석_작업완료.hwp" 저장경로 = os.path.join(현재디렉토리, 파일이름) doc_1.SaveAs(저장경로) hwp.Quit() 한두개를 작업할떄는 문제가 없었는데 여러개를 작업하니까 문제가 생기네요..ㅠㅠ 너무 큰 질문을 드리는것 같아 죄송하고 감사한 마음입니다.. 늘 강의 잘 보고있고 업무에 큰도움 받고있습니다 정말 감사합니다.
[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
안녕하세요. 강의를 들으며 ratingState 를 print 해보니 Instance of '_RestaurantRatingRepository' 결과가 나왔습니다. 이제보니 dio 요청 자체도 가지 않은 상태입니다. pagination_provider.dart를 적용한 후 Restaurant와 RestaurantDetail은 잘 실행되는데, Rating 만 dio 요청 자체가 가지 않습니다. 저 아래의 Instance of '_RestaurantRatingRepository' 가 ratingState 입니다. 디버깅을 통해서 dio를 제대로 받아온 것은 확인했는데, pagination 내부의 print는 restaurant만 먹히고, restaurantdetail과 rating은 print되지 않아 어떻게 해결해야할지, 어떻게 해결 방법을 찾아야 할지 갈피도 못 잡겠습니다. 프로젝트의 repository를 첨부합니다. https://github.com/jungeyo3/codefactory-flutter-lv2-study 버전은 아래와 같습니다. 감사합니다.
안녕하세요 강사님! 이번학기에 갑자기 웹 개발을 하게 되어 부랴부랴 프론트 강의 챙겨보는중인데 정말 도움이 많이 돼 우선 감사의 말씀 먼저 드립니다. ㅜㅜ 다름이 아니라 제가 본 영상 강의를 보고 학교 과제를 수행하다가 (투두 리스트를 참고하여 만들었습니다. 참고로 과제는 이슈관리 시스템입니다.) 이러한 메인 화면을 구현하였는데, 각 프로젝트 이름을 누르면 그 프로젝트의 상세 페이지로 연결 시키고 싶은데, 라우터 기능을 사용하여 링크는 제대로 바뀌는데 화면 전환이 되지 않습니다. ㅜㅜ 코드를 여러번 봐도 무엇이 문제인지 감이 안 잡혀 질문 드리게 되었습니다. 코드 첨부 하겠습니다. ! import "./App.css"; import { Routes, Route, Link, useNavigate } from "react-router-dom"; import { useRef, useState } from "react"; import Header from "./components/Header"; import List from "./components/List"; import ProjectDetail from "./pages/ProjectDetail"; //임시데이터 const mokdata = [ { p_id: 0, p_name: "회원가입 프로젝트", date: new Date().getTime(), }, { p_id: 1, p_name: "온라인 테트리스 게임 프로젝트", date: new Date().getTime(), }, { p_id: 2, p_name: "윷놀이 프로젝트", date: new Date().getTime(), }, { p_id: 3, p_name: "온라인 채팅 앱 개발 프로젝트", date: new Date().getTime(), }, { p_id: 4, p_name: "회원 관리 시스템 프로젝트", date: new Date().getTime(), }, { p_id: 5, p_name: "이슈 관리 시스템 프로젝트", date: new Date().getTime(), }, ]; function App() { const [projects, setProjects] = useState(mokdata); const onDelete = (targetId) => { //배열에서 targetId와 일치하는 id를 갖는 요소만 삭제한 새로운 배열 setProjects(projects.filter((project) => project.p_id !== targetId)); }; return ( <> <div className="App"> <Header /> <List projects={projects} onDelete={onDelete} /> </div> <Routes> <Route path="/ProjectDetail:p_id" element={<ProjectDetail projects={projects} />} /> </Routes> </> ); } export default App; 위는 App.jsx 코드 이고 아래는 ProjectDetail 코드 입니다. ! import { useParams } from "react-router-dom"; const ProjectDetail = ({ projects }) => { const { p_id } = useParams(); const project = projects.find((project) => project.p_id === parseInt(p_id)); return ( <div> <h1>프로젝트 상세내용</h1> <h2>{project.p_name}</h2> </div> ); }; export default ProjectDetail;
8번 문제 복습 중 궁금증이 생겨서 질문드립니다. 1) cond = df.loc[2001] > m2001 r1 = sum(cond) cond = df.loc[2003] < m2003 r2 = sum(cond) print (r1+r2) 2) r1 = df.loc[2001] > m2001 r2 = df.loc[2003] < m2003 print (sum(r1+r2)) 1) 같은 경우는 정답 풀이를 그대로 가져와서 출력 값이 202이고, 2) 같은 경우는 제가 다른 방법으로 풀어볼 수 있을까 하는 궁금증에서 적어봤습니다. 출력 값은 202가 아닌 150이 나왔습니다. 둘 다 같은 풀이법 같지만 출력 값이 다른 이유가 궁금해서 질문드립니다 !
리액트에서는 onClick으로 이벤트를 등록하면 Root에 모이게 된다고 하셨는데 제가 이 부분을 정확히 이해했는지 알고싶어서 질문 드립니다! 보통은 자바스크립트에서는 각 요소마다 addEventListener 를 여러 번 호출하면 메모리 측면에서 비효율적이고 성능이 떨어질 수 있다고 알고 있습니다. 그래서 이벤트 위임을 사용하는 것으로 이해했습니다. 현재 강의에서는 각 요소마다 onclick 이벤트를 등록하셨는데 리액트에서는 Root에서 중앙통제하기 때문에 상관없다는 것으로 인지했습니다. 제가 알기로는 이벤트들을 모아다가 root에 addEventListener를 하는 것으로 알고 있는데 이게 맞을까요? 그러면 리액트에서는 굳이 이벤트 위임을 사용할 필요가 없을까요? 예를 들어 onClick을 여러 요소에 등록하지 않고 상위 요소 하나에만 등록하는 것처럼 말이죠..!
문서 두개를 띄워서 작업을 하려고 하는데요. 먼저 한글시작을 하구 hwp = 한글시작(True) def 한글시작(TF): hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") hwp.XHwpWindows.Item(0).Visible = TF hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule") return hwp 그다음 아래와같이 코드를 작성했는데요. hwp = 한글시작(True) doc_2 = hwp.XHwpDocuments.Add(False) # 새로운 hwp열고 할당 (False=새로운창 / True = 기존hwp의 탭으로) doc_2.SetActive_XHwpDocument() # 두 번째 문서 활성화 hwp.HAction.GetDefault("PageSetup", hwp.HParameterSet.HSecDef.HSet) hwp.HParameterSet.HSecDef.PageDef.Landscape = 1 hwp.HParameterSet.HSecDef.HSet.SetItem("ApplyClass", 24) hwp.HParameterSet.HSecDef.HSet.SetItem("ApplyTo", 3) hwp.HAction.Execute("PageSetup", hwp.HParameterSet.HSecDef.HSet) XHwpDocumnets.Add 를 통해서 새로운 hwp를 열었고, 활성화도 했습니다. 그이후에 한글을 직접 작동하여, 페이지를 가로로 돌리는것(편집용지->가로)을 매크로 녹화했는데요 아래 부분을 입력하고 실행했을 때, hwp.HAction.GetDefault("PageSetup", hwp.HParameterSet.HSecDef.HSet) FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\SAMSUN~1\\AppData\\Local\\Temp\\gen_py\\3.12\\7D2B6F3C-1D95-4E0C-BF5A-5EE564186FBCx0x1x0\\ HSecDef.py .18740.temp' 이런 오류 메시지가 터미널에 뜨게됩니다. 반면에, hwp.HAction.Run ("MoveParaEnd")등을 실행했을 떄는 모두 정상적으로 작동합니다. 왜 한글매크로를 녹화한것이 제대로 작동하지 않는걸까요? 잘 알려주셔서 정말 감사합니다