묻고 답해요
148만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)
context를 두개로 나눠쓰는 이유에 대해 궁금합니다.
StateContext안에 value로 state와 dispatch 두개를 전달하면 하나의 ContextProvider만 쓰면되는데, context를 두개로 나눈 이유가 무엇인지 궁금합니다!
-
미해결Slack 클론 코딩[실시간 채팅 with React]
DMList 선택 시 무한로딩되는 에러
안녕하세요 제로초님. 강의 잘 듣고 있습니다.다름이 아니라 채널 토글에서 각 채널을 선택하면 정상적으로 이동하지만, DMlist에서 선택하면 아래와 같이 useEffect가 무한루프처럼 호출되어 문제가 발생하는 것 같습니다. 제로초님께서 업로드해주신 코드와 동일하게 def에 workspace를 넣어 작성했는데, 어떠한 부분에서 위와 같이 무한로딩되는 에러가 발생하는지 못 찾겠습니다ㅠㅠ DMList/index.tsx// import useSocket from '@hooks/useSocket'; import { CollapseButton } from '@components/DMList/style'; import { IDM, IUser, IUserWithOnline } from '@typings/db'; import fetcher from '@utils/fetcher'; import React, { FC, useCallback, useEffect, useState } from 'react'; import { useParams } from 'react-router'; import { NavLink } from 'react-router-dom'; import useSWR from 'swr'; const DMList: FC = () => { const { workspace } = useParams<{ workspace?: string }>(); const { data: userData, error, mutate } = useSWR<IUser>('/api/users', fetcher, { dedupingInterval: 2000, // 2초 }); const { data: memberData } = useSWR<IUserWithOnline[]>( userData ? `/api/workspaces/${workspace}/members` : null, fetcher, ); // const [socket] = useSocket(workspace); const [channelCollapse, setChannelCollapse] = useState(false); const [countList, setCountList] = useState<{ [key:string]: number}>({}); const [onlineList, setOnlineList] = useState<number[]>([]); const toggleChannelCollapse = useCallback(() => { setChannelCollapse((prev) => !prev); }, []); const resetCount = useCallback( (id) => () => { setCountList((list) => { return{ ...list, [id]: 0, }; }); }, [], ); const onMessage = (data: IDM) => { console.log("DM 왓따", data); setCountList((list) => { return { ...list, [data.SenderId] : list[data.SenderId] ? list[data.SenderId]+1 : 1, }; }); }; useEffect(() => { console.log('DMList: workspace 바꼈다', workspace); setOnlineList([]); setCountList({}); }, [workspace]); // useEffect(() => { // socket?.on('onlineList', (data: number[]) => { // setOnlineList(data); // }); // socket?.on('dm', onMessage); // console.log('socket on dm', socket?.hasListeners('dm'), socket); // return () => { // socket?.off('dm', onMessage); // console.log('socket off dm', socket?.hasListeners('dm')); // socket?.off('onlineList'); // }; // }, [socket]); return ( <> <h2> <CollapseButton collapse={channelCollapse} onClick={toggleChannelCollapse}> <i className="c-icon p-channel_sidebar__section_heading_expand c-icon--caret-right c-icon--inherit c-icon--inline" data-qa="channel-section-collapse" aria-hidden="true" /> </CollapseButton> <span>Direct Messages</span> </h2> <div> {!channelCollapse && memberData?.map((member) => { const isOnline = onlineList.includes(member.id); return ( <NavLink key={member.id} activeClassName="selected" to={`/workspace/${workspace}/dm/${member.id}`} > <i className={`c-icon p-channel_sidebar__presence_icon p-channel_sidebar__presence_icon--dim_enabled p-channel_sidebar__presence_icon--on-avatar c-presence ${ isOnline ? 'c-presence--active c-icon--presence-online' : 'c-icon--presence-offline' }`} aria-hidden="true" data-qa="presence_indicator" data-qa-presence-self="false" data-qa-presence-active="false" data-qa-presence-dnd="false" /> <span>{member.nickname}</span> {member.id === userData?.id && <span> (나)</span>} </NavLink> ); })} </div> </> ); }; export default DMList;
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
Row 위젯의 children의 [위젯1, 위젯2...] 안에서 if문
위 코드처럼 Row위젯의 children 파라미터에 있는 ElevatedButton 위에 if문을 작성하였는데,이떄 if 문을 적용하는 코드에는 {} 를 쓰는데 여기서는 안써도 왜 if문을 먼저 통과해야 ElevatedButton이 생기는지 이유가 궁금합니다!
-
해결됨Slack 클론 코딩[실시간 채팅 with React]
서버 켜는 명령어가 안 되요ㅜㅜ
안녕하세요. 서버 켜려고 back 폴더에서 npm run dev 하면 [nodemon] app crashed - waiting for file changes before starting...와 같은 에러가 나옵니다. node.js 버전은 18.16.1 입니다.결국 로컬호스트3095 들어가면:3095/l:1 GET http://localhost:3095/l 500 (Internal Server Error)이런 에러가 나오는데, 이건 서버 접속이 아예 안되었기 때문에 나오는 거겠죠..?
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
[ ...TABS, ...TSBS, ...TSBS].map(~)
[ ...TABS, ...TSBS, ...TSBS].map(~)여기에서 ...TABS의 의미가 무엇인지 궁금합니다!그냥 TABS로 적으면 e가 List type의 TABS를 불러와서 e.icon에 오류가 발생하는데,...TABS로 적으면 map이 실제로 TABS안에 있는 리스트 요소를 e로 가져오는거같은데 ...의 의미가 궁금합니다!
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
padding 같은 단위에 꼭 소수점을 붙이는 이유
EdgeInsets.symmetric( horizontal: 16.0) 처럼16으로 줘도 double로 인식하는 것 같던데 꼭 소수점을 적어야 하는 이유가 있나요??
-
미해결Slack 클론 코딩[실시간 채팅 with React]
로그인 화면에서 리다이렉트 시 workspace 목록이 표시되지 않는 문제
안녕하세요. 강의 잘 듣고 있습니다. 다름이 아니라 login 한 후 workspace로 리다이렉트 된 후, workspace 목록이 아래와 같이 나타나지 않는 현상이 발생합니다. 하지만 다른 탭을 다녀오거나, workspace 추가를 하면 다시 정상적으로 아래와 같이 workspace 목록이 나타납니다. 아마 userData를 리다이렉트하면서 불러오지 않아 생기는 문제 같습니다. mutate()를 사용하고, dedupinginterval을 줄여도 문제 해결이 안되는 것 같아 리다이렉트됨과 동시에 다시 userData를 불러오도록 수정해야 할 것 같은데, 이를 구현할 수 있는 방법이 생각이 나지 않습니다. 현재 제 코드 일부 아래에 첨부합니다.App.jsconst App: FC = () => { return ( <Switch> <Redirect exact path="/" to="/login" /> <Route path="/login" component={LogIn} /> <Route path="/signup" component={SignUp} /> <Route path="/workspace/:workspace" component={Workspace} /> </Switch> ); };Login/index.tsxconst LogIn = () => { const {data, error, mutate} = useSWR('/api/users', fetcher, { dedupingInterval: 100000, }); const [logInError, setLogInError] = useState(false); const [email, onChangeEmail] = useInput(''); const [password, onChangePassword] = useInput(''); const onSubmit = useCallback( (e) => { e.preventDefault(); setLogInError(false); axios .post( '/api/users/login', { email, password }, { withCredentials: true }, ) .then((response) => { mutate(response.data, false); //Optimistic UI }) .catch((error) => { setLogInError(error.response?.status === 401); }); }, [email, password], ); if (data === undefined) { return <div>로딩중...</div>; } if (data) { return <Redirect to="/workspace/sleact/channel/일반" />; }Workspace/index.tsximport Menu from "@components/Menu"; import Modal from "@components/Modal"; import CreateChannelModal from "@components/CreateChannelModal"; import useInput from "@hooks/useinput"; import fetcher from "@utils/fetcher"; import axios from "axios"; import React, { FunctionComponent, useCallback, useState } from "react" import { Link, Redirect, Route, Switch, useParams } from 'react-router-dom'; import { toast } from 'react-toastify'; import useSWR from "swr"; import { AddButton, Channels, Chats, Header, LogOutButton, MenuScroll, ProfileImg, ProfileModal, RightMenu, WorkspaceButton, WorkspaceModal, WorkspaceName, WorkspaceWrapper, Workspaces } from "@layouts/Workspace/style"; import gravatar from 'gravatar'; import { Button, Input, Label } from '@pages/SignUp/style'; import { IChannel, IUser } from "@typings/db"; import loadable from "@loadable/component"; const Channel = loadable(() => import('@pages/SignUp')); const DirectMessage = loadable(() => import('@layouts/Workspace')); const Workspace: FunctionComponent = () => { const [showUserMenu, setShowUserMenu] = useState(false); const [showCreateWorkspaceModal, setShowCreateWorkspaceModal] = useState(false); const [showWorkspaceModal, setShowWorkspaceModal] = useState(false); const [showCreateChannelModal, setShowCreateChannelModal] = useState(false); const [newWorkspace,onChangeNewWorkspace, setNewWorkSpace] = useInput(''); const [newUrl, onChangeNewUrl, setNewUrl] = useInput(''); const { workspace } = useParams<{workspace: string}>(); const { data: userData , error, mutate} = useSWR<IUser | false>( '/api/users', fetcher, { dedupingInterval: 2000, } ); const { data: channelData } = useSWR<IChannel[]>( userData? `api/workspaces/${workspace}/channels` : null, fetcher ); const onLogout = useCallback(() => { axios .post('/api/users/logout', null, { withCredentials: true, }) .then(() => { mutate(false, false); }); }, []) const onClickUserProfile = useCallback((e) => { e.stopPropagation(); setShowUserMenu((prev) => !prev); }, []); const onClickCreateWorkSpace = useCallback(() => { setShowCreateWorkspaceModal(true); }, []); const onCreateWorkspace = useCallback((e) => { e.preventDefault(); if(!newWorkspace || !newWorkspace.trim()) return; if(!newUrl || !newUrl.trim()) return; axios .post( '/api/workspaces', { workspace: newWorkspace, url : newUrl, }, { withCredentials: true, }) .then(() => { mutate(); setShowCreateWorkspaceModal(false); setNewWorkSpace(''); setNewUrl(''); }) .catch((error)=>{ console.dir(error); toast.error(error.response?.data, { position: 'bottom-center' }); }); }, [newWorkspace, newUrl]); const onCloseModal = useCallback(() => { setShowCreateWorkspaceModal(false); setShowCreateChannelModal(false); }, []); if(!userData) { return <Redirect to="/login"/> } const toggleWorkspaceModal = useCallback(()=> { setShowWorkspaceModal((prev) => !(prev)); },[]); const onClickAddChannel = useCallback(() => { setShowCreateChannelModal(true); }, []); return ( <div> <Header> <RightMenu> <span onClick = {onClickUserProfile}> <ProfileImg src = {gravatar.url(userData.email, {s: '28px', d: 'retro'})} alt= {userData.nickname}/> {showUserMenu && ( <Menu style={{right:0, top:38}} show={showUserMenu} onCloseModal={onClickUserProfile}> <ProfileModal> <img src={gravatar.url(userData.email, {s: '36px', d: 'retro'})} alt= {userData.nickname}/> <div> <span id="profile-name">{userData.nickname}</span> <span id="profile-active">Active</span> </div> </ProfileModal> <LogOutButton onClick={onLogout}>로그아웃</LogOutButton> </Menu> )} </span> </RightMenu> </Header> <WorkspaceWrapper> <Workspaces> {userData?.Workspaces?.map((ws) => { return ( <Link key={ws.id} to={'/workspace/${123}/channel/일반'}> <WorkspaceButton>{ws.name.slice(0,1).toUpperCase()}</WorkspaceButton> </Link> ); })} <AddButton onClick={onClickCreateWorkSpace}>+</AddButton> </Workspaces> <Channels> <WorkspaceName onClick={toggleWorkspaceModal}> Sleact </WorkspaceName> <MenuScroll> <Menu show={showWorkspaceModal} onCloseModal={toggleWorkspaceModal} style={{ top: 95, left: 80}}> <WorkspaceModal> <h2>Sleact</h2> <button onClick={onClickAddChannel}>채널 만들기</button> <button onClick={onLogout}>로그아웃</button> </WorkspaceModal> </Menu> {channelData?.map((v) => (<div>{v.name}</div>))} </MenuScroll> </Channels> <Chats> <Switch> <Route path="/workspace/:workspace/channel/:channel" component={Channel} /> <Route path="/workspace/:workspace/dm/:id" component={DirectMessage} /> </Switch> </Chats> </WorkspaceWrapper> <Modal show={showCreateWorkspaceModal} onCloseModal={onCloseModal}> <form onSubmit={onCreateWorkspace}> <Label id="workspace-label"> <span>워크스페이스 이름</span> <Input id="workspace" value={newWorkspace} onChange={onChangeNewWorkspace}/> </Label> <Label id="workspace-url-label"> <span>워크스페이스 url</span> <Input id="workspace-url" value={newUrl} onChange={onChangeNewUrl}/> </Label> <Button type="submit">생성하기</Button> </form> </Modal> <CreateChannelModal show={showCreateChannelModal} onCloseModal={onCloseModal} setShowCreateChannelModal={setShowCreateChannelModal} /> </div> ) } export default Workspace
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
[긴급] 플러터 앱 개발 시 안드로이드 에뷸레이터에서 아래와 같은 에러가 납니다
선생님 레슨, 책, 유튜브 잘 보고 있습니다.플러터 챗 봇 앱 만들었는데 아이폰 시뮬레이터에서는 잘 돌아가는데 안드로이드 에뷸레이터에서는 아래와 같은 에러가 뜨고채팅 창에 글자도 입력이 안되네요현재 구글 플레이 스토어에 출시는 한 상태입니다. 보시면 전송 버튼을 눌러도 아무런 응답이 없습니다.어떻게 해결하면 좋을까요?앱 이름은 '친절한 한쌤' 입니다. 빠른 답변 늘 감사합니다... Launching lib/main.dart on sdk gphone64 x86 64 in debug mode...Running Gradle task 'assembleDebug'...✓ Built build/app/outputs/flutter-apk/app-debug.apk.Debug service listening on ws://127.0.0.1:53849/OrbnIHJyefU=/wsSyncing files to device sdk gphone64 x86 64...I/ImeTracker( 4545): com.aihanssam.kindteacherhan:a09ac563: onRequestShow at ORIGIN_CLIENT_SHOW_SOFT_INPUT reason SHOW_SOFT_INPUTD/InputMethodManager( 4545): showSoftInput() view=io.flutter.embedding.android.FlutterView{86562a2 VFE...... .F....ID 0,0-1080,1857 #1 aid=1073741824} flags=0 reason=SHOW_SOFT_INPUTI/AssistStructure( 4545): Flattened final assist data: 472 bytes, containing 1 windows, 3 viewsD/EGL_emulation( 4545): app_time_stats: avg=15687.04ms min=37.24ms max=46608.22ms count=3D/InsetsController( 4545): show(ime(), fromIme=true)I/ImeTracker( 4545): com.aihanssam.kindteacherhan:a09ac563: onShownD/EGL_emulation( 4545): app_time_stats: avg=205.99ms min=65.45ms max=322.47ms count=5D/EGL_emulation( 4545): app_time_stats: avg=293.51ms min=39.90ms max=566.13ms count=4D/EGL_emulation( 4545): app_time_stats: avg=500.04ms min=499.71ms max=500.36ms count=2D/EGL_emulation( 4545): app_time_stats: avg=499.55ms min=483.14ms max=516.56ms count=3D/EGL_emulation( 4545): app_time_stats: avg=500.43ms min=499.89ms max=500.97ms count=2D/EGL_emulation( 4545): app_time_stats: avg=500.48ms min=500.24ms max=500.72ms count=2
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
스타일링 마무리 직후 갑자기 에러 발생
안녕하세요 강사님. 다름이 아니라 스타일링 마무리 직후 갑자기 type 'String' is not a subtype of type 'int' of 'index' 라는 에러가 발생해서 글 남깁니다.분명 스타일링 마무리 후 재시작하여 잘 실행이 되는 것을 확인했으나, 안드로이드 스튜디오를 껐다 켠 이후로 FutureBuilder 내에서 계속 위와 같은 에러가 발생하고 있습니다. int 값을 넣어야 할 곳에 String 값을 넣은 적이 없는 것 같은데 말이죠...분명 잘 되는 것을 확인했는데 갑자기 이런 에러가 발생하니 당황스럽네요. 혹시 짐작가는 부분이 있으신지 궁금해서 글 남겨 봅니다.
-
미해결[2023 코틀린 강의 무료제공] 기초에서 수익 창출까지, 안드로이드 프로그래밍 A-Z
tvLocationTitle이 Null이에요 ㅠ
어떤 부분이 문제인지 혼자 머리 싸매고 고민해봐도 영 답이 없네요 ㅠ밑에는 Logcat(location), LocationProvider,MainActivity 코드 내용 입니다! 2023-07-09 00:55:07.703 8921-8921 m.dk.airQualit com.dk.airQuality W DexFile /data/data/com.dk.airQuality/code_cache/.studio/instruments-234ebcbd.jar is in boot class path but is not in a known location2023-07-09 00:55:07.725 8921-8921 m.dk.airQualit com.dk.airQuality W Accessing hidden method Landroid/app/LoadedApk$ReceiverDispatcher;->setUnregisterLocation(Ljava/lang/RuntimeException;)V (greylist-max-o, linking, denied)2023-07-09 00:55:07.725 8921-8921 m.dk.airQualit com.dk.airQuality W Accessing hidden method Landroid/app/LoadedApk$ReceiverDispatcher;->getUnregisterLocation()Ljava/lang/RuntimeException; (greylist-max-o, linking, denied)2023-07-09 00:55:07.725 8921-8921 m.dk.airQualit com.dk.airQuality W Accessing hidden method Landroid/app/LoadedApk$ServiceDispatcher;->getUnbindLocation()Ljava/lang/RuntimeException; (greylist-max-o, linking, denied)2023-07-09 00:55:22.314 8996-8996 m.dk.airQualit com.dk.airQuality W DexFile /data/data/com.dk.airQuality/code_cache/.studio/instruments-234ebcbd.jar is in boot class path but is not in a known location2023-07-09 00:55:22.341 8996-8996 m.dk.airQualit com.dk.airQuality W Accessing hidden method Landroid/app/LoadedApk$ReceiverDispatcher;->setUnregisterLocation(Ljava/lang/RuntimeException;)V (greylist-max-o, linking, denied)2023-07-09 00:55:22.341 8996-8996 m.dk.airQualit com.dk.airQuality W Accessing hidden method Landroid/app/LoadedApk$ReceiverDispatcher;->getUnregisterLocation()Ljava/lang/RuntimeException; (greylist-max-o, linking, denied)
-
미해결애플 웹사이트 인터랙션 클론!
원래 쿼리셀렉터에서는 띄워쓰기 하면안되나요?
- 질문에 대한 답변은 강의자가 하는 경우도 있고, 수강생 여러분들이 해주시는 경우도 있습니다. 같이 도와가며 공부해요! :)- 작성하신 소스코드 자체의 오류보다는, 개념이나 원리가 이해되지 않는 부분을 질문해주시는게 좋습니다. 그대로 따라했는데 소스코드에서 버그가 나는 경우는 99%가 오타에 의한거라서, 완성된 소스랑 찬찬히 비교해보시면 직접 찾으실 수 있을 거예요. 개발자도구 console에 오류로 표시된 부분만 완성 코드에서 복사->붙여넣기를 해보시는 것도 방법입니다.- 먼저 유사한 질문이 있었는지 검색해보세요.- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 원래 위처럼 document.querySelector("#scroll-section-0 .main-message.a"),.main-message.a 와 같이 클래스는 붙여서 작성해야하나요? 띄워서 작성하니까 안찾아지던데아이디와 클래스는 다른 속성이라서 띄워주고, 클래스끼리는 붙여서 작성해야하는 건가요아니면main-message클래스랑 a클래스는 형제클래스니까 부모 자식의 관계를 뜻할 때만 띄워주는 건가요?
-
미해결Slack 클론 코딩[실시간 채팅 with React]
강의 초기 셋팅 문제
react를 처음 접해보는 취준생입니다.제가 강의를 보면서 따라하려는데 settings/js 디렉토리의 디렉토리명을 front로 변경해서 사용하고 back 디렉토리에서 npm start로 백앤드 서버 실행시키고 따라하라고 하신거 같아서 그렇게 따라하고 있습니다. 현재 localhost:3095로 접근하면 슬리액 페이지가 잘 나오는데 front 디렉토리에서 코드 수정해도 반영이 안고 있는데 혹시 어떤걸 잘 못 하고 있는지 알 수 있을까요?
-
해결됨[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
dev_dependencies 추가 방법
안녕하세요 강사님. dependencies 추가 방법에 대해 궁금한 점이 생겨서 문의 남깁니다.dependencies의 경우 pubspec.yaml을 직접 수정하지 않고, 터미널에서 flutter pub add ~를 입력해도 추가할 수 있는 것으로 알고 있습니다.그러면 dev_dependencies 역시 터미널 명령어로 추가할 수 있는 방법이 있을까요?또한, pub.dev에서 dev_dependencies도 검색이 되는 게 맞을까요?궁금합니다...
-
미해결[LG유플러스] 앱 만들기 초급 과정 (Flutter)
""구글지도 사용해보기" 에서 에러 문제
구글 맵은 확대/축소 버튼 까지 뜨는데요,흰색 빈 화면으로 나옵니다.에러 원인을 찾다가 못 찾겠어서요에러 내용 아래와 같이 올려 드립니다.어떻게 해결하면 될지 문의 드립니다.[에러 문구]Launching lib\main.dart on sdk gphone x86 64 in debug mode...Running Gradle task 'assembleDebug'...√ Built build\app\outputs\flutter-apk\app-debug.apk.Installing build\app\outputs\flutter-apk\app-debug.apk...D/FlutterGeolocator( 8967): Attaching Geolocator to activityD/FlutterGeolocator( 8967): Creating service.D/FlutterGeolocator( 8967): Binding to location service.D/FlutterGeolocator( 8967): Geolocator foreground service connectedD/FlutterGeolocator( 8967): Initializing Geolocator servicesDebug service listening on ws://127.0.0.1:51323/1PK6KOdyzYM=/wsSyncing files to device sdk gphone x86 64...I/ple.chool_check( 8967): Compiler allocated 4533KB to compile void android.view.ViewRootImpl.performTraversals()D/MapsInitializer( 8967): preferredRenderer: nullD/zzcb ( 8967): preferredRenderer: nullI/zzcb ( 8967): Making Creator dynamicallyW/ziparchive( 8967): Unable to open '/data/user_de/0/com.google.android.gms/app_chimera/m/00000002/DynamiteLoader.dm': No such file or directoryW/ziparchive( 8967): Unable to open '/data/user_de/0/com.google.android.gms/app_chimera/m/00000002/DynamiteLoader.dm': No such file or directoryI/DynamiteModule( 8967): Considering local module com.google.android.gms.maps_dynamite:0 and remote module com.google.android.gms.maps_dynamite:203115000I/DynamiteModule( 8967): Selected remote version of com.google.android.gms.maps_dynamite, version >= 203115000V/DynamiteModule( 8967): Dynamite loader version >= 2, using loadModule2NoCrashUtilsW/ziparchive( 8967): Unable to open '/data/user_de/0/com.google.android.gms/app_chimera/m/00000006/MapsDynamite.dm': No such file or directoryW/ziparchive( 8967): Unable to open '/data/user_de/0/com.google.android.gms/app_chimera/m/00000006/MapsDynamite.dm': No such file or directoryI/Google Maps Android API( 8967): Google Play services client version: 12451000D/CompatibilityChangeReporter( 8967): Compat change id reported: 183155436; UID 10160; state: ENABLEDI/Google Maps Android API( 8967): Google Play services package version: 225014047I/Google Maps Android API( 8967): Google Play services maps renderer version(legacy): 203115000D/MapsInitializer( 8967): loadedRenderer: LEGACYD/zzcb ( 8967): preferredRenderer: nullI/Google Maps Android API( 8967): Google Play services package version: 225014047I/Google Maps Android API( 8967): Google Play services maps renderer version(legacy): 203115000D/CompatibilityChangeReporter( 8967): Compat change id reported: 210923482; UID 10160; state: ENABLEDD/CompatibilityChangeReporter( 8967): Compat change id reported: 171228096; UID 10160; state: ENABLEDI/PlatformViewsController( 8967): Using hybrid composition for platform view: 0W/Parcel ( 8967): Expecting binder but got null!E/GoogleMapController( 8967): Cannot enable MyLocation layer as location permissions are not grantedD/EGL_emulation( 8967): eglMakeCurrent: 0x785afc957d10: ver 3 1 (tinfo 0x785d1cf4d080) (first time)I/bb ( 8967): Successfully registered with Phenotype.E/EGL_emulation( 8967): eglQueryContext 32c0 EGL_BAD_ATTRIBUTEE/EGL_emulation( 8967): tid 8967: eglQueryContext(2122): error 0x3004 (EGL_BAD_ATTRIBUTE)D/HostConnection( 8967): createUnique: callD/HostConnection( 8967): HostConnection::get() New Host Connection established 0x785afc95e850, tid 9046D/HostConnection( 8967): HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_native_sync_v2 ANDROID_EMU_native_sync_v3 ANDROID_EMU_native_sync_v4 ANDROID_EMU_dma_v1 ANDROID_EMU_direct_mem ANDROID_EMU_host_composition_v1 ANDROID_EMU_host_composition_v2 ANDROID_EMU_vulkan ANDROID_EMU_deferred_vulkan_commands ANDROID_EMU_vulkan_null_optional_strings ANDROID_EMU_vulkan_create_resources_with_requirements ANDROID_EMU_YUV_Cache ANDROID_EMU_vulkan_ignored_handles ANDROID_EMU_has_shared_slots_host_memory_allocator ANDROID_EMU_vulkan_free_memory_sync ANDROID_EMU_vulkan_shader_float16_int8 ANDROID_EMU_vulkan_async_queue_submit ANDROID_EMU_vulkan_queue_submit_with_commands ANDROID_EMU_sync_buffer_data ANDROID_EMU_vulkan_async_qsri ANDROID_EMU_read_color_buffer_dma ANDROID_EMU_hwc_multi_configs GL_OES_EGL_image_external_essl3 GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_host_side_tracing ANDROID_EMU_gles_max_version_3_1 D/EGL_emulation( 8967): eglCreateContext: 0x785afc95e010: maj 1 min 0 rcv 1D/EGL_emulation( 8967): eglMakeCurrent: 0x785afc95e010: ver 1 0 (tinfo 0x785d1cf4d280) (first time)D/EGL_emulation( 8967): eglMakeCurrent: 0x785afc95e010: ver 1 0 (tinfo 0x785d1cf4d280) (first time)
-
해결됨[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
안드로이드 스튜디오 실행 시 start failed라는 오류가 발생하는데 어떡하나요?
인텔칩이 탑재된 맥을 사용하고 있습니다.그런데 안드로이드 스튜디오를 실행하면 start failed라는 제목의 오류가 발생하며 실행되지 않습니다.오류 내용은 이렇습니다.Internal error. Please refer to https://code.google.com/p/android/issuesjava.nio.file.AccessDeniedException: /Users/hanjaejune/Library/Application Support/Google/AndroidStudio2022.2 at java.base/sun.nio.fs.UnixException.translateToIOException(Unknown Source) at java.base/sun.nio.fs.UnixException.rethrowAsIOException(Unknown Source) at java.base/sun.nio.fs.UnixException.rethrowAsIOException(Unknown Source) at java.base/sun.nio.fs.UnixFileSystemProvider.createDirectory(Unknown Source) at java.base/java.nio.file.Files.createDirectory(Unknown Source) at java.base/java.nio.file.Files.createAndCheckIsDirectory(Unknown Source) at java.base/java.nio.file.Files.createDirectories(Unknown Source) at com.intellij.idea.SocketLock.lockPortFiles(SocketLock.java:202) at com.intellij.idea.SocketLock.lockAndTryActivate(SocketLock.java:131) at com.intellij.idea.StartupUtil.lockSystemDirs(StartupUtil.java:783) at com.intellij.idea.StartupUtil.start(StartupUtil.java:169) at com.intellij.idea.Main.bootstrap(Main.java:125) at com.intellij.idea.Main.main(Main.java:82)-----Your JRE: 17.0.6+0-17.0.6b802.4-9586694 x86_64 (JetBrains s.r.o.)/Applications/Android Studio.app/Contents/jbr/Contents/Home 어떻게 해결하면 좋을까요?
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
pushNamedAndRemoveUntil관련 질문있어용
import 'package:flutter/material.dart'; import 'package:navigation/layout/main_layout.dart'; import 'package:navigation/screen/route_three_screen.dart'; class RouteTwoScreen extends StatelessWidget { const RouteTwoScreen({super.key}); @override Widget build(BuildContext context) { final arguments = ModalRoute.of(context)!.settings.arguments; return MainLayout(title: 'Route Two', children: [ Text( 'arguments: ${arguments}', textAlign: TextAlign.center, ), ElevatedButton( onPressed: () { // [HomeScreen(), RouteOne(), RouteTwo()] stack 구조! Navigator.of(context).pop(); }, child: Text( 'Pop', ), ), ElevatedButton( onPressed: () { Navigator.of(context).pushNamed('/three', arguments: 999); }, child: Text('Push Named'), ), ElevatedButton( onPressed: () { // Navigator.of(context).pushReplacement( // MaterialPageRoute( // builder: (_) => RouteThreeScreen(), // ), // ); Navigator.of(context).pushReplacementNamed('/three'); }, child: Text('Push Replacement'), ), ElevatedButton( onPressed: () { // Navigator.of(context).pushAndRemoveUntil( // MaterialPageRoute(builder: (_) => RouteThreeScreen()), // (route) => route.settings.name == '/', // ); Navigator.of(context).pushNamedAndRemoveUntil( '/three', (route) => route.settings.name == '/one', ); }, child: Text('Push Named Replacement'), ), ]); } } Navigator.of(context).pushNamedAndRemoveUntil( '/three', (route) => route.settings.name == '/one', );제가 이런식으로 '/'이 아닌 '/one'으로 바꾸어 보았는데, route_three에서 pop()하면 one으로 가는게 아니라 그냥 검은 화면이 보여요. '/'은 잘 작동하고 main파일에서도 정확히 '/one'으로 잘 등록해 놓았는데 왜 작동이 안되는 걸까요??
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
블루투스로 센서 데이터 수집하고 싶은데 어떠게 해야 할까요?
강의 잘 듣고 있습니다. 정말 감사드립니다.제가 블루투스를 이용해서 센서에서 데이터를 수집하는 app을 개발하려고 합니다. 아직 준비 중이라 이렇게 flutter 강좌를 듣고 있습니다.블루투스를 이용한 데이터 수집과 관련된 강좌나 참고할만한 자료가 있을 까요?
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
중첩 map 쓰는 부분
안녕하세요 강사님.return query.watch().map( (rows) => rows .map( (row) => ScheduleWithColor( schedule: row.readTable(schedules), categoryColor: row.readTable(categoryColors), ), ) .toList(), );이 부분에 질문이 있어서 글 남깁니다.제 생각에는 데이터 구조가 위와 같다고 생각했습니다. 이에 그냥 아래와 같이 작성하면 어떨까라는 생각이 들었습니다.return query.watch().map( (rows) => ScheduleWithColor(schedule: rows[0].readTable(schedules), categoryColor: rows[0].readTable(categoryColors)), ).toList();근데 이와 같이 작성하면 return 타입이 Stream이 아니라 Future가 되는 것 같더군요. 제가 어느 부분에서 혼란을 겪고 있는지 알고 싶습니다. + 추가제가 이렇게 생각한 이유는return query.watch().map((rows) { print(rows.length); return rows .map( (row) => ScheduleWithColor( schedule: row.readTable(schedules), categoryColor: row.readTable(categoryColors), ), ) .toList(); });코드를 이렇게 변경해 봤을 때, rows.length가 1이 출력되었기 때문입니다.
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
children 속성과 관련하여 질문이 있습니다.
children: [ 123, 456, 789, ].map((e) => Row( children:[ e.toString().split('').map((y) => Image.asset('asset/img/$y.png')).toList(), ] )).toList(), ),이 부분에서 강사님이 children에 [] 부분을 빼고 코드 작성을 하셨지만 저는 안드로이드 스튜디오에서 children : [] 을 자동완성 시켜주기도 하고 []의 존재 이유가 복수의 위젯을 넣기 위함이니 그냥 하나만 넣어서 작성하여도 상관없을 것이라고 생각하였습니다.하지만 막상 그렇게 작성해보니 오류가 나서 인터넷도 찾아보고 GPT한테도 물어봤지만 마땅한 해답은 못찾은 채 children 부분에 []를 지우니 오류가 사라지더군요. 왜 그런지 알 수 있을까요?
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
CrossAxisAlignment 질문
import 'package:flutter/material.dart'; class HomeScreen extends StatefulWidget { const HomeScreen({super.key}); @override State<HomeScreen> createState() => _HomeScreenState(); } class _HomeScreenState extends State<HomeScreen> { @override Widget build(BuildContext context) { return Scaffold( body: SafeArea( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text('랜덤숫자 생성기'), IconButton( onPressed: () {}, icon: Icon( Icons.settings, ), ), ], ), Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text('123'), Text('456'), Text('789'), ], ), ), Container( width: double.infinity, child: ElevatedButton( onPressed: () {}, child: Text('생성하기!'), ), ), ], ), ), ); } }그냥 수업 내용인데, 왜 첫번째 Column에서는 container나 sizedBox하지 않고 그냥 crossAxisAlignment가 바로 적용되는 건가요?? 혹시 SafeArea 영역이 width가 최대라서 바로 횡축 정렬이 가능해지나요?