173만명의 커뮤니티!! 함께 토론해봐요.
미해결
따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)
StateContext안에 value로 state와 dispatch 두개를 전달하면 하나의 ContextProvider만 쓰면되는데, context를 두개로 나눈 이유가 무엇인지 궁금합니다!
react node.js postgresql docker typescript 클론코딩 next.js
sjlee
2023-07-13T08:00:20.542Z
댓글 1
좋아요 0
조회수 437
미해결
Slack 클론 코딩[실시간 채팅 with React]
안녕하세요 제로초님. 강의 잘 듣고 있습니다. 다름이 아니라 채널 토글에서 각 채널을 선택하면 정상적으로 이동하지만, 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;
react 웹팩 typescript socket.io babel 클론코딩
김호준
2023-07-12T14:41:52.448Z
댓글 1
좋아요 0
조회수 453
미해결
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
위 코드처럼 Row위젯의 children 파라미터에 있는 ElevatedButton 위에 if문을 작성하였는데, 이떄 if 문을 적용하는 코드에는 {} 를 쓰는데 여기서는 안써도 왜 if문을 먼저 통과해야 ElevatedButton이 생기는지 이유가 궁금합니다!
승일
2023-07-12T05:13:19.967Z
댓글 1
좋아요 0
조회수 465
해결됨
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) 이런 에러가 나오는데, 이건 서버 접속이 아예 안되었기 때문에 나오는 거겠죠..?
따뜻한 거북이
2023-07-11T15:20:11.206Z
댓글 3
좋아요 0
조회수 523
미해결
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
[ ...TABS, ...TSBS, ...TSBS].map(~) 여기에서 ...TABS의 의미가 무엇인지 궁금합니다! 그냥 TABS로 적으면 e가 List type의 TABS를 불러와서 e.icon에 오류가 발생하는데, ...TABS로 적으면 map이 실제로 TABS안에 있는 리스트 요소를 e로 가져오는거같은데 ...의 의미가 궁금합니다!
승일
2023-07-11T09:42:12.960Z
댓글 1
좋아요 0
조회수 331
미해결
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
EdgeInsets.symmetric( horizontal: 16.0) 처럼 16으로 줘도 double로 인식하는 것 같던데 꼭 소수점을 적어야 하는 이유가 있나요??
승일
2023-07-11T03:53:04.250Z
댓글 1
좋아요 0
조회수 490
미해결
Slack 클론 코딩[실시간 채팅 with React]
안녕하세요. 강의 잘 듣고 있습니다. 다름이 아니라 login 한 후 workspace로 리다이렉트 된 후, workspace 목록이 아래와 같이 나타나지 않는 현상이 발생합니다. 하지만 다른 탭을 다녀오거나, workspace 추가를 하면 다시 정상적으로 아래와 같이 workspace 목록이 나타납니다. 아마 userData를 리다이렉트하면서 불러오지 않아 생기는 문제 같습니다. mutate()를 사용하고, dedupinginterval을 줄여도 문제 해결이 안되는 것 같아 리다이렉트됨과 동시에 다시 userData를 불러오도록 수정해야 할 것 같은데, 이를 구현할 수 있는 방법이 생각이 나지 않습니다. 현재 제 코드 일부 아래에 첨부합니다. App.js const 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.tsx const 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.tsx import 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
react 웹팩 typescript socket.io babel 클론코딩
김호준
2023-07-10T16:29:35.565Z
댓글 1
좋아요 0
조회수 736
미해결
[코드팩토리] [초급] 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=/ws Syncing files to device sdk gphone64 x86 64... I/ImeTracker( 4545): com.aihanssam.kindteacherhan:a09ac563: onRequestShow at ORIGIN_CLIENT_SHOW_SOFT_INPUT reason SHOW_SOFT_INPUT D/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_INPUT I/AssistStructure( 4545): Flattened final assist data: 472 bytes, containing 1 windows, 3 views D/EGL_emulation( 4545): app_time_stats: avg=15687.04ms min=37.24ms max=46608.22ms count=3 D/InsetsController( 4545): show(ime(), fromIme=true) I/ImeTracker( 4545): com.aihanssam.kindteacherhan:a09ac563: onShown D/EGL_emulation( 4545): app_time_stats: avg=205.99ms min=65.45ms max=322.47ms count=5 D/EGL_emulation( 4545): app_time_stats: avg=293.51ms min=39.90ms max=566.13ms count=4 D/EGL_emulation( 4545): app_time_stats: avg=500.04ms min=499.71ms max=500.36ms count=2 D/EGL_emulation( 4545): app_time_stats: avg=499.55ms min=483.14ms max=516.56ms count=3 D/EGL_emulation( 4545): app_time_stats: avg=500.43ms min=499.89ms max=500.97ms count=2 D/EGL_emulation( 4545): app_time_stats: avg=500.48ms min=500.24ms max=500.72ms count=2
amorvo
2023-07-10T13:42:17.250Z
댓글 1
좋아요 0
조회수 1436
미해결
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
안녕하세요 강사님. 다름이 아니라 스타일링 마무리 직후 갑자기 type 'String' is not a subtype of type 'int' of 'index' 라는 에러가 발생해서 글 남깁니다. 분명 스타일링 마무리 후 재시작하여 잘 실행이 되는 것을 확인했으나, 안드로이드 스튜디오를 껐다 켠 이후로 FutureBuilder 내에서 계속 위와 같은 에러가 발생하고 있습니다. int 값을 넣어야 할 곳에 String 값을 넣은 적이 없는 것 같은데 말이죠... 분명 잘 되는 것을 확인했는데 갑자기 이런 에러가 발생하니 당황스럽네요. 혹시 짐작가는 부분이 있으신지 궁금해서 글 남겨 봅니다.
David Heo
2023-07-08T18:12:35.446Z
댓글 1
좋아요 0
조회수 405
미해결
[2023 코틀린 강의 무료제공] 기초에서 수익 창출까지, 안드로이드 프로그래밍 A-Z
어떤 부분이 문제인지 혼자 머리 싸매고 고민해봐도 영 답이 없네요 ㅠ 밑에는 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 location 2023-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 location 2023-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)
dddk11
2023-07-08T16:20:26.000Z
댓글 3
좋아요 0
조회수 658
미해결
애플 웹사이트 인터랙션 클론!
- 질문에 대한 답변은 강의자가 하는 경우도 있고, 수강생 여러분들이 해주시는 경우도 있습니다. 같이 도와가며 공부해요! :) - 작성하신 소스코드 자체의 오류보다는, 개념이나 원리가 이해되지 않는 부분을 질문해주시는게 좋습니다. 그대로 따라했는데 소스코드에서 버그가 나는 경우는 99%가 오타에 의한거라서, 완성된 소스랑 찬찬히 비교해보시면 직접 찾으실 수 있을 거예요. 개발자도구 console에 오류로 표시된 부분만 완성 코드에서 복사->붙여넣기를 해보시는 것도 방법입니다. - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 원래 위처럼 document.querySelector("#scroll-section-0 .main-message.a"), .main-message.a 와 같이 클래스는 붙여서 작성해야하나요? 띄워서 작성하니까 안찾아지던데 아이디와 클래스는 다른 속성이라서 띄워주고, 클래스끼리는 붙여서 작성해야하는 건가요 아니면 main-message클래스랑 a클래스는 형제클래스니까 부모 자식의 관계를 뜻할 때만 띄워주는 건가요?
HTML/CSS javascript 웹-디자인 svg 인터랙티브-웹 클론코딩
oridori2705
2023-07-08T11:32:36.050Z
댓글 2
좋아요 0
조회수 638
미해결
Slack 클론 코딩[실시간 채팅 with React]
react를 처음 접해보는 취준생입니다. 제가 강의를 보면서 따라하려는데 settings/js 디렉토리의 디렉토리명을 front로 변경해서 사용하고 back 디렉토리에서 npm start로 백앤드 서버 실행시키고 따라하라고 하신거 같아서 그렇게 따라하고 있습니다. 현재 localhost :3095로 접근하면 슬리액 페이지가 잘 나오는데 front 디렉토리에서 코드 수정해도 반영이 안고 있는데 혹시 어떤걸 잘 못 하고 있는지 알 수 있을까요?
react 웹팩 typescript socket.io babel 클론코딩
wlstmd9597
2023-07-08T00:51:54.131Z
댓글 1
좋아요 0
조회수 389
해결됨
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
안녕하세요 강사님. dependencies 추가 방법에 대해 궁금한 점이 생겨서 문의 남깁니다. dependencies의 경우 pubspec.yaml을 직접 수정하지 않고, 터미널에서 flutter pub add ~를 입력해도 추가할 수 있는 것으로 알고 있습니다. 그러면 dev_dependencies 역시 터미널 명령어로 추가할 수 있는 방법이 있을까요? 또한, pub.dev에서 dev_dependencies도 검색이 되는 게 맞을까요? 궁금합니다...
David Heo
2023-07-04T20:41:24.421Z
댓글 1
좋아요 0
조회수 904
미해결
[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 activity D/FlutterGeolocator( 8967): Creating service. D/FlutterGeolocator( 8967): Binding to location service. D/FlutterGeolocator( 8967): Geolocator foreground service connected D/FlutterGeolocator( 8967): Initializing Geolocator services Debug service listening on ws://127.0.0.1:51323/1PK6KOdyzYM=/ws Syncing 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: null D/zzcb ( 8967): preferredRenderer: null I/zzcb ( 8967): Making Creator dynamically W/ziparchive( 8967): Unable to open '/data/user_de/0/com.google.android.gms/app_chimera/m/00000002/DynamiteLoader.dm': No such file or directory W/ziparchive( 8967): Unable to open '/data/user_de/0/com.google.android.gms/app_chimera/m/00000002/DynamiteLoader.dm': No such file or directory I/DynamiteModule( 8967): Considering local module com.google.android .gms.maps_dynamite:0 and remote module com.google.android .gms.maps_dynamite:203115000 I/DynamiteModule( 8967): Selected remote version of com.google.android .gms.maps_dynamite, version >= 203115000 V/DynamiteModule( 8967): Dynamite loader version >= 2, using loadModule2NoCrashUtils W/ziparchive( 8967): Unable to open '/data/user_de/0/com.google.android.gms/app_chimera/m/00000006/MapsDynamite.dm': No such file or directory W/ziparchive( 8967): Unable to open '/data/user_de/0/com.google.android.gms/app_chimera/m/00000006/MapsDynamite.dm': No such file or directory I/Google Maps Android API( 8967): Google Play services client version: 12451000 D/CompatibilityChangeReporter( 8967): Compat change id reported: 183155436; UID 10160; state: ENABLED I/Google Maps Android API( 8967): Google Play services package version: 225014047 I/Google Maps Android API( 8967): Google Play services maps renderer version(legacy): 203115000 D/MapsInitializer( 8967): loadedRenderer: LEGACY D/zzcb ( 8967): preferredRenderer: null I/Google Maps Android API( 8967): Google Play services package version: 225014047 I/Google Maps Android API( 8967): Google Play services maps renderer version(legacy): 203115000 D/CompatibilityChangeReporter( 8967): Compat change id reported: 210923482; UID 10160; state: ENABLED D/CompatibilityChangeReporter( 8967): Compat change id reported: 171228096; UID 10160; state: ENABLED I/PlatformViewsController( 8967): Using hybrid composition for platform view: 0 W/Parcel ( 8967): Expecting binder but got null! E/GoogleMapController( 8967): Cannot enable MyLocation layer as location permissions are not granted D/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_ATTRIBUTE E/EGL_emulation( 8967): tid 8967: eglQueryContext(2122): error 0x3004 (EGL_BAD_ATTRIBUTE) D/HostConnection( 8967): createUnique: call D/HostConnection( 8967): HostConnection::get() New Host Connection established 0x785afc95e850, tid 9046 D/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 1 D/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)
정유석
2023-07-03T13:12:27.672Z
댓글 1
좋아요 0
조회수 953
해결됨
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
인텔칩이 탑재된 맥을 사용하고 있습니다. 그런데 안드로이드 스튜디오를 실행하면 start failed라는 제목의 오류가 발생하며 실행되지 않습니다. 오류 내용은 이렇습니다. Internal error. Please refer to https://code.google.com/p/android/issues java.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 어떻게 해결하면 좋을까요?
zla_db
2023-07-03T09:01:04.287Z
댓글 1
좋아요 0
조회수 951
미해결
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
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'으로 잘 등록해 놓았는데 왜 작동이 안되는 걸까요??
zla_db
2023-07-03T06:53:02.839Z
댓글 1
좋아요 0
조회수 416
미해결
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
강의 잘 듣고 있습니다. 정말 감사드립니다. 제가 블루투스를 이용해서 센서에서 데이터를 수집하는 app을 개발하려고 합니다. 아직 준비 중이라 이렇게 flutter 강좌를 듣고 있습니다. 블루투스를 이용한 데이터 수집과 관련된 강좌나 참고할만한 자료가 있을 까요?
shmin
2023-07-03T05:39:19.339Z
댓글 1
좋아요 0
조회수 394
미해결
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
안녕하세요 강사님. 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이 출력되었기 때문입니다.
David Heo
2023-07-02T18:07:48.092Z
댓글 1
좋아요 0
조회수 444
미해결
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
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 부분에 []를 지우니 오류가 사라지더군요. 왜 그런지 알 수 있을까요?
이우진
2023-07-02T07:26:03.857Z
댓글 2
좋아요 0
조회수 345
미해결
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
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가 최대라서 바로 횡축 정렬이 가능해지나요?
zla_db
2023-07-02T05:06:02.679Z
댓글 1
좋아요 0
조회수 384