묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
video_player / image_picker 버전관련 질문입니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.코드팩토리 디스코드https://bit.ly/3HzRzUMFlutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다! 강의대로 따라해도,최신버전을 넣어도 Pub get 에러가 계속생기는데 다른 설정을 따로 해야하나요?윈도우10 사용중입니다
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
구글지도 - 플랫폼뷰 관련 에러
안녕하세요 강사님, 구글지도 사용해보기 수업을 듣는데 지도가 나타나지 않아 질문드립니다. PlatformView, registerViewFactory가 호출되었는지 확인하라는 메세지로 파악했으나 해결 방법을 찾지 못하고 있습니다. 에러 메세지는 아래와 같습니다. [VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(unregistered_view_type, A UIKitView widget is trying to create a PlatformView with an unregistered type: < plugins.flutter.io/google_maps >, If you are the author of the PlatformView, make sure registerViewFactory is invoked.See: https://docs.flutter.dev/development/platform-integration/platform-views#on-the-platform-side-1 for more details.If you are not the author of the PlatformView, make sure to call GeneratedPluginRegistrant.register., null)#0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:652:7)#1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:310:18)<asynchronous suspension>#2 PlatformViewsService.initUiKitView (package:flutter/src/services/platform_views.dart:242:5)<asynchronous suspension>#3 UiKitViewState.createNewUiKitView (package:flutter/src/widgets/platform_view.dart:649:44)<asynchronous suspension>
-
해결됨[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
button강의에 resolveWith()메소드 질문 있어요!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.코드팩토리 디스코드https://bit.ly/3HzRzUMFlutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다!강의에 나온대로 resolveWith를 사용해서 실행했는데 버튼을 눌러도 계속 빨강색으로 뜨고 하얀색으로 바뀌질 않아요.뭐가 문제인걸까요?ㅠㅠ
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
webview 강의 따라하는데 다음과 같은 에러가 나옵니다. ㅜㅜ
webview 강의 진행중 에러가 나와서 문의 드립니다. console창에 나온 에러 내용입니다. 강의보면서 세팅 똑같이 했는데 이렇게 나오면서 화면이 아무것도 적용이 안되네요.Performing hot restart...Syncing files to device Android SDK built for x86...Restarted application in 797ms.E/flutter ( 3101): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(channel-error, Unable to establish connection on channel., null, null)E/flutter ( 3101): #0 WebStorageHostApi.create (package:webview_flutter_android/src/android_webview.pigeon.dart:2036:7)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): E/flutter ( 3101): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(channel-error, Unable to establish connection on channel., null, null)E/flutter ( 3101): #0 WebViewHostApi.create (package:webview_flutter_android/src/android_webview.pigeon.dart:289:7)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): E/flutter ( 3101): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(channel-error, Unable to establish connection on channel., null, null)E/flutter ( 3101): #0 WebSettingsHostApi.create (package:webview_flutter_android/src/android_webview.pigeon.dart:1013:7)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): E/flutter ( 3101): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(channel-error, Unable to establish connection on channel., null, null)E/flutter ( 3101): #0 WebSettingsHostApi.setDomStorageEnabled (package:webview_flutter_android/src/android_webview.pigeon.dart:1061:7)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): E/flutter ( 3101): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(channel-error, Unable to establish connection on channel., null, null)E/flutter ( 3101): #0 WebSettingsHostApi.setJavaScriptCanOpenWindowsAutomatically (package:webview_flutter_android/src/android_webview.pigeon.dart:1087:7)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): E/flutter ( 3101): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(channel-error, Unable to establish connection on channel., null, null)E/flutter ( 3101): #0 WebSettingsHostApi.setSupportMultipleWindows (package:webview_flutter_android/src/android_webview.pigeon.dart:1113:7)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): E/flutter ( 3101): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(channel-error, Unable to establish connection on channel., null, null)E/flutter ( 3101): #0 WebSettingsHostApi.setLoadWithOverviewMode (package:webview_flutter_android/src/android_webview.pigeon.dart:1239:7)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): E/flutter ( 3101): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(channel-error, Unable to establish connection on channel., null, null)E/flutter ( 3101): #0 WebSettingsHostApi.setUseWideViewPort (package:webview_flutter_android/src/android_webview.pigeon.dart:1263:7)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): E/flutter ( 3101): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(channel-error, Unable to establish connection on channel., null, null)E/flutter ( 3101): #0 WebSettingsHostApi.setDisplayZoomControls (package:webview_flutter_android/src/android_webview.pigeon.dart:1288:7)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): E/flutter ( 3101): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(channel-error, Unable to establish connection on channel., null, null)E/flutter ( 3101): #0 WebSettingsHostApi.setBuiltInZoomControls (package:webview_flutter_android/src/android_webview.pigeon.dart:1313:7)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): E/flutter ( 3101): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(channel-error, Unable to establish connection on channel., null, null)E/flutter ( 3101): #0 WebViewClientHostApi.create (package:webview_flutter_android/src/android_webview.pigeon.dart:1476:7)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): E/flutter ( 3101): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(channel-error, Unable to establish connection on channel., null, null)E/flutter ( 3101): #0 WebSettingsHostApi.setUserAgentString (package:webview_flutter_android/src/android_webview.pigeon.dart:1163:7)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): #1 Future.wait.<anonymous closure> (dart:async/future.dart:522:21)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): #2 WebViewAndroidPlatformController.updateSettings (package:webview_flutter_android/webview_android_widget.dart:275:5)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): E/flutter ( 3101): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(channel-error, Unable to establish connection on channel., null, null)E/flutter ( 3101): #0 WebSettingsHostApi.setMediaPlaybackRequiresUserGesture (package:webview_flutter_android/src/android_webview.pigeon.dart:1189:7)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): E/flutter ( 3101): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(channel-error, Unable to establish connection on channel., null, null)E/flutter ( 3101): #0 DownloadListenerHostApi.create (package:webview_flutter_android/src/android_webview.pigeon.dart:1749:7)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): #1 Future.wait.<anonymous closure> (dart:async/future.dart:522:21)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): #2 WebView.setDownloadListener (package:webview_flutter_android/src/android_webview.dart:379:5)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): E/flutter ( 3101): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(channel-error, Unable to establish connection on channel., null, null)E/flutter ( 3101): #0 WebChromeClientHostApi.create (package:webview_flutter_android/src/android_webview.pigeon.dart:1861:7)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): #1 Future.wait.<anonymous closure> (dart:async/future.dart:522:21)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): #2 WebView.setWebChromeClient (package:webview_flutter_android/src/android_webview.dart:399:5)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): E/flutter ( 3101): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(channel-error, Unable to establish connection on channel., null, null)E/flutter ( 3101): #0 WebViewHostApi.loadUrl (package:webview_flutter_android/src/android_webview.pigeon.dart:401:7)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): E/flutter ( 3101): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(error, java.lang.IllegalStateException: Trying to create a platform view of unregistered type: plugins.flutter.io/webviewE/flutter ( 3101): at io.flutter.plugin.platform.PlatformViewsController$1.createPlatformView(PlatformViewsController.java:489)E/flutter ( 3101): at io.flutter.plugin.platform.PlatformViewsController$1.createForTextureLayer(PlatformViewsController.java:191)E/flutter ( 3101): at io.flutter.embedding.engine.systemchannels.PlatformViewsChannel$1.create(PlatformViewsChannel.java:128)E/flutter ( 3101): at io.flutter.embedding.engine.systemchannels.PlatformViewsChannel$1.onMethodCall(PlatformViewsChannel.java:55)E/flutter ( 3101): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:258)E/flutter ( 3101): at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:295)E/flutter ( 3101): at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:322)E/flutter ( 3101): at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(Unknown Source:12)E/flutter ( 3101): at android.os.Handler.handleCallback(Handler.java:938)E/flutter ( 3101): at android.os.Handler.dispatchMessage(Handler.java:99)E/flutter ( 3101): at android.os.Looper.loop(Looper.java:223)E/flutter ( 3101): at android.app.ActivityThread.main(ActivityThread.java:7656)E/flutter ( 3101): at java.lang.reflect.Method.invoke(Native Method)E/flutter ( 3101): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)E/flutter ( 3101): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)E/flutter ( 3101): , null, null)E/flutter ( 3101): #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:653:7)E/flutter ( 3101): #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:315:18)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): #2 SurfaceAndroidViewController._sendCreateMessage (package:flutter/src/services/platform_views.dart:1017:30)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): #3 AndroidViewController.create (package:flutter/src/services/platform_views.dart:801:5)E/flutter ( 3101): <asynchronous suspension>E/flutter ( 3101): 도움 좀 부탁드립니다.
-
해결됨[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
질문1) webview 과제중 실행시 url화면을 받아오지 못하는 문제 질문2)실행시 app관련 화면보여주는 emulator 설정방법
질문1)webview 과제중 실행시 url화면을 받아오지를 못하네요질문2)Android studio에서 run작동시킬때 app ios나 android가 나오지않습니다.추가로 설정하는방법 알고싶습니다 감사합니다!!:)
-
미해결Slack 클론 코딩[실시간 채팅 with React]
npm warn 은 고치지 않고 넘어가도 되나요?
안녕하세요 질문 드립니다.npm 설치할 때 이러 경고가 나타났는데, 에러는 아니길래 그냥 지나갔는데,로컬호스트3095 들어가면 계속 이러 에러가 나와서 진행이 안 되고 있어요서버는 잘 연결되었습니다
-
미해결Slack 클론 코딩[실시간 채팅 with React]
워크스페이스 내에서 채널 및 디엠 채팅 시 소켓의 구조가 궁금합니다.
안녕하세요! 강의 정말 잘 듣고 있습니다. 저에게 여러모로 큰 도움이 되고 있는 것 같습니다!다른게 아니라 강의를 들으면서 아직 웹소켓에 대해 잘 몰라서 정확한 로직을 잘 모르겠어서 질문을 드립니다! 소켓을 사용하는 로직이한 클라이언트에 대해 워크스페이스를 바꿀 때 마다 해당 워크스페이스에 대한 소켓을 연결서버는 워크스페이스 별로 소켓을 관리. 채널과 디엠 상관없이 워크스페이스 별로 들어오는 모든 소켓 요청(채팅 내용)을 받아서 전달함클라이언트는 해당 채팅 내용들을 다 받지만 현재 접속해있는 채널이나 dm을 주고 받는 상대에 대한 채팅 내용만 걸러서 화면에 보여줌이렇게 진행되는 것이 맞을까요? 맞다면 혹시 워크스페이스라는 개념이 없이 채팅방만 있거나 1:1 채팅의 기능만 소켓을 사용하여 구현한다고 했을 때는 채팅방 별로 혹은 클라이언트 별로 소켓을 생성해서 구현을 하게 되나요..? 그게 아니라면 보통 어떻게 구현하는지 질문 드리고 싶습니다..! 감사합니다
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
가운데정렬 이안되여
import 'package:flutter/material.dart'; class HomeScreen extends StatelessWidget { const HomeScreen({super.key}); @override Widget build(BuildContext context) { return Scaffold( body: SafeArea( bottom: false, child: Container( width: double.infinity, height: double.infinity, color: Colors.black, child: Column( mainAxisAlignment: MainAxisAlignment.spaceAround, crossAxisAlignment: CrossAxisAlignment.center, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Container(color: Colors.red, width: 50, height: 50), Container(color: Colors.orange, width: 50, height: 50), Container(color: Colors.yellow, width: 50, height: 50), Container(color: Colors.green, width: 50, height: 50), ], ), Row( children: [ Container(color: Colors.orange, width: 50, height: 50), ], ), Row( mainAxisAlignment: MainAxisAlignment.end, children: [ Container(color: Colors.red, width: 50, height: 50), Container(color: Colors.orange, width: 50, height: 50), Container(color: Colors.yellow, width: 50, height: 50), Container(color: Colors.green, width: 50, height: 50), ], ), Row(children: [ Container(color: Colors.green, width: 50, height: 50), ],), ], ), ), ), ); } }
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(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 디렉토리에서 코드 수정해도 반영이 안고 있는데 혹시 어떤걸 잘 못 하고 있는지 알 수 있을까요?