묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결애플 웹사이트 인터랙션 클론!
선생님 안녕하세요. 혹시 메인개발(?)분야가 뭔지 궁금합니다.
안녕하세요 선생님!예전에 선생님 강의 청첩장강의랑 flex,grid, 기타 강의들 구매하고 들었던 학생입니다.선생님은 메인개발분야가 뭔지 궁금합니당.또 리액트 사용하시는지도 궁금합니다!질문과는 무관한 여담이지만,,최근 리액트로 프로젝트하면서 애니메이션 편하게 구현하기위해서 여러 라이브러리를 사용하고 또 gsap관련해서도 찾아보고 했었는데.. gsap로 이렇게 손쉽게 인터랙티브 애니메이션을 구현할 수있다고? 하면서 혁신이다! 라고 생각했었는데보니깐 자체 서비스에서 결제 같은 기능이있을경우 (넷플릭스같은) gsap 프리미엄을 결제해서 사용해야하더라구요..그것도 연간 구독 시스템이고, 코딩하는 개발자 수에따라서 개별로 구매..ㅎㄷㄷ 그래서 돌고돌아 다시 선생님 곁으로왔습니다.이 강의 듣다가 개인적인 일들이 겹쳐서 중간하차했었는데 다시 처음부터 차근차근 수강하고 복습해서 마스터해보려고합니닷.. 질문 요약1: 선생님 메인분야가 뭐에요?2: gsap에 관해서 의견이궁금합니다.
-
해결됨기초부터 배우는 Next YTMusic 클론 코딩 (with next.js 14, UI 마스터)
article / section 태그에 관해
article 과 section tag 를 자주 사용하시는데, 혹시 어떤 기준으로 사용하시나요?
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
답변) 자동 완성 안되는 이유
가끔 자동 완성이 안되는 이유는,자동 완성을 입력하고자 하는 바로 아랫쪽에 위치한 함수에함수의 반환형이 명시되어 있지 않아서 그런 것 같습니다.
-
해결됨기초부터 배우는 Next YTMusic 클론 코딩 (with next.js 14, UI 마스터)
카테고리 변경 시 이미지 로딩
카테고리 관련 강의를 수강 중입니다. 카테고리 변경 시 백그라운드 변경되는 부분이 있는데요해당 부분이 이미지 로딩(변경?)이 매우 늦게 되더라구요해당 부분 개선해보려면 어떤 것을 시도해보면 좋을까요?
-
미해결기초부터 배우는 Next YTMusic 클론 코딩 (with next.js 14, UI 마스터)
next zustand 사용 시 문의
next zustand 세팅 시, provider 를 사용해야한다는 글이 있어서요.현재 강의처럼 이후에 서비스 개발 시 사용해도 이슈가 없는 부분일까요?https://zustand.docs.pmnd.rs/guides/nextjs#providing-the-storehttps://leonkong.cc/nextjs-zustand-
-
해결됨[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
에뮬레이터 창이 뜨지 않습니다..ㅠㅠ
안녕하세요.강의 잘 듣고 있습니다.^^ 안드로이드 스튜디오 설치부터 막혀서 며칠 째 다시 해보다가 문의 드립니다. ㅠ.ㅠ 두 가지 문의가 있는데, 한번 봐주시면 감사하겠습니다! 첫 번째로, Path 설정을 맞게 한것 같은데 cmd에서 flutter doctor 실행 시, 하기 오류 문구가 계속 뜹니다. 몇번이고 다시 해봤는데 해결이 안됩니다 ㅠㅠ 조언 부탁드립니다. 두 번째로, 에뮬레이터를 실행하면 창이 아예 뜨지 않고 있습니다. 삭제 후 다시 설치해봐도,시스템 언어로 영어로 수정 후 해봐도 안되는데 뭐가 문제일까요? 하기와 같이 작업표시줄에서는 보이는데 전혀 창이 뜨지 않고 있습니다. 해결 방법 알려주시면 감사하겠습니다. 감사합니다.
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
섹션 26의 플러그인 설치 부분에서 에러가 납니다.
FAILURE: Build failed with an exception.* What went wrong:A problem occurred configuring project ':agora_rtm'.> Could not create an instance of type com.android.build.api.variant.impl.LibraryVariantBuilderImpl. > Namespace not specified. Specify a namespace in the module's build file. See https://d.android.com/r/tools/upgrade-assistant/set-namespace for information about setting the namespace. If you've specified the package attribute in the source AndroidManifest.xml, you can use the AGP Upgrade Assistant to migrate to the namespace value in the build file. Refer to https://d.android.com/r/tools/upgrade-assistant/agp-upgrade-assistant for general information about using the AGP Upgrade Assistant.* Try:> Run with --stacktrace option to get the stack trace.> Run with --info or --debug option to get more log output.> Run with --scan to get full insights.> Get more help at https://help.gradle.org.BUILD FAILED in 687msError: Gradle task assembleDebug failed with exit code 1라는 에러가 발생하네요. macOS를 sequoia로 올려서 그럴까요?
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
키노트 자료는 제공 안해주나요?
개인 노트에 내용을 정리하는데 큰 도움이 될것 같은데,키노트는 제공이 안되는건지요?스크린샷이 안되기 때문에 그림을 정리할 수가 없네요.
-
해결됨기초부터 배우는 Next YTMusic 클론 코딩 (with next.js 14, UI 마스터)
component 파일에서는 tsx파일이 아니라 jsx 파일을 쓰는 이유를 알 수 있을까요?
4.5 loading.error에서요... component 폴더에 넣는 ErrorMessage와 LoadingBar 파일은 tsx가 아니라 jsx파일을 쓰는 이유를 알고 싶습니다
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
GestureDetector onTap이 올바르게 동작하지 않습니다.
안녕하세요.좋은 강의 잘 듣고 있습니다. VideoPlayer을 포함한 위젯을 VideoPlayerWidget으로 Stateful 위젯으로 구현했습니다.그리고 자식 위젯으로 아래 코드와 같이 GestureDetector > ApstectRatio > Stack 으로 구성하였습니다.Stack의 자식 위젯으로는 VideoPlayer, _PlayButtons, _Bottom 위젯을 가지고 있습니다. 이 때, VideoPlayer가 포함되어 있으면 GestureDetector의 onTap 메서드가 호출되지 않으며, VideoPlayer를 제외하는 경우 onTap 메서드가 호출되고 있습니다. 관련해서 자식의 터치 이벤트도 감지하기 위해 GestureDetector에 behavior 프로퍼티로 HitTestBehavior.opaque 값을 할당했지만, 그래도 VideoPlayer가 존재하는 경우 올바르게 동작하지 않고 있습니다. 혹시 어떤 부분이 문제인지 알 수 있을까요...?감사합니다. 아래 코드는 VideoPlayerWidget의 build 메서드입니다.@override Widget build(BuildContext context) { return GestureDetector( behavior: HitTestBehavior.opaque, onTap: (){ print("onTap"); }, child: !isInitalized ? const CircularProgressIndicator() : AspectRatio( aspectRatio: videoPlayerController.value.aspectRatio, child: Stack( children: [ VideoPlayer(videoPlayerController), _PlayButtons( onLeft: onLeft, onPlay: onPlay, onRight: onRight, isPlaying: videoPlayerController.value.isPlaying, ), _Bottom( posMinutes: videoPlayerController.value.position.inMinutes, posSeconds: videoPlayerController.value.position.inSeconds, durationMinuets: videoPlayerController.value.duration.inMinutes, durationSeconds: videoPlayerController.value.duration.inSeconds, onSliderChanged: onSliderChanged, ), // _PickPicture(onPress: widget.onPickPicture,) ])), ); }
-
해결됨기초부터 배우는 Next YTMusic 클론 코딩 (with next.js 14, UI 마스터)
versel 을 통한 배포를 하는 것과 (홈서버 + 클라우드 플래어 프록시)를 하는 것을 비교해주실 수 있나요?
안녕하세요. 우선 소개부터 드리자면 저는 FE 개발자나 그쪽을 지망하는 것은 아니고 백엔드를 업으로 하고 있고 집에서 홈서버에 제 개인 서비스를 배포할 목적으로 해당 강의를 수강하게 되었습니다. 사실 제가 프론트의 세계는 잘 몰라서 질문 드립니다. 혹시 페이지 로드 속도 & 검색 엔진 노출도가 배포 플랫폼에 영향을 받을까요?다른 말로는, versel 을 통해 프론트를 배포하는 것이 배포가 쉬운 것 이외에 서비스의 퀄리티에도 도움을 주는 장점이 있을까요 ?
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
onStartTimeValidate 함수에서 값이 null로 넘어 올 수 있나요?
String? onStartTimeValidate(String? val) { if (val == null) return '값을 입력 해주세요.'; if (int.tryParse(val) == null) return '값을 숫자로 입력해주세요.'; final int time = int.parse(val); if (time > 24 || time < 0) return '0~24의 값을 입력해주세요.'; return null; }강의처럼 코드를 위와 같이 작성했을때텍스트 필드에 값을 입력하지 않고 저장하면 값이 빈 문자열로 넘어와서 '값을 입력해주세요' 가 아니라 '숫자를 입력해주세요' 라는 에러가 발생합니다.텍스트 필드의 값이 미입력시 null 이 아니라 빈문자열('')로 넘어오는것 같아서 아래처럼 코드를 수정했는데 맞는걸까요?if (val == null || val == '') return '값을 입력 해주세요.';
-
해결됨기초부터 배우는 Next YTMusic 클론 코딩 (with next.js 14, UI 마스터)
선생님 죄송한대
Supabase, Next 풀 스택 시작하기 (feat. 슈파베이스 OAuth, nextjs 14) 강의쿠폰 더 없을까요 ㅠㅠ 너무 늦게알았네요 ㅠㅠ
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
typedef를 사용한 특별한 이유가 있을까요?
BottomSheet 디자인 마무리하기에서 categoryColor를 변경할때 typedef를 사용하신 이유가 뭔가요?_Categories( selectedColor: selectedColor, onTap: (String color) { setState(() { selectedColor = color; }); }, ),위 처럼 넘기고 _Category 클래스에서 일반함수로 받고 아래처럼 실행해줘도 오류 없이 되는 것 같은데onTap: () { onTap(e); },typedef로 별도로 정의해서 받는 특별한 이유가 있는지 궁금합니다!
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
Appbar 의 my_location 버튼을 눌러도 현재위치로 이동하질 않습니다.
강의 정말 잘 듣고있습니다! 오늘도 출근 프로젝트에서 앱바 액션 버튼의현재 위치로 시점 이동 버튼 기능이 동작하지 않습니다. 중간에 기능 확인할때 잘 작동하는것을 확인했는데강의 다 듣고 나서 다시 확인하니 작동을 하지 않습니다. Geolocator.getCurrentPosition() 여기서 데이터를 못받아와서 그런것 같은데 뭐 때문에 갑자기 못 받아오는건지 알수가 없습니다... import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:geolocator/geolocator.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; class HomeScreen extends StatefulWidget { const HomeScreen({super.key}); @override State<HomeScreen> createState() => _HomeScreenState(); } class _HomeScreenState extends State<HomeScreen> { final CameraPosition initialPosition = CameraPosition( target: LatLng( 37.5214, 126.9246, ), zoom: 15); late final GoogleMapController controller; bool choolCheckDone = false; bool canChoolCheck = false; final double okDistance = 100; final testPosition = LatLng(37.5214, 126.9246); @override initState() { super.initState(); Geolocator.getPositionStream().listen((event) { final start = testPosition; final end = LatLng(event.latitude, event.longitude); final distance = Geolocator.distanceBetween( start.latitude, start.longitude, end.latitude, end.longitude, ); setState(() { if (distance > okDistance) { canChoolCheck = false; } else { canChoolCheck = true; } }); }); } checkPermission() async { final isLocationEnabled = await Geolocator.isLocationServiceEnabled(); if (!isLocationEnabled) { throw Exception('위치 기능을 활성화 해주세요.'); } LocationPermission checkedPermission = await Geolocator.checkPermission(); if (checkedPermission == LocationPermission.denied) { checkedPermission = await Geolocator.requestPermission(); } if (checkedPermission != LocationPermission.always && checkedPermission != LocationPermission.whileInUse) { throw Exception('위치 권한을 허용 해주세요.'); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text( '오늘도 출근', style: TextStyle( color: Colors.blue, fontWeight: FontWeight.w700, ), ), actions: [ IconButton( color: Colors.blue, onPressed: myLocationPressed, icon: Icon(Icons.my_location), ), ], ), body: FutureBuilder( future: checkPermission(), builder: (BuildContext context, AsyncSnapshot snapshot) { if (snapshot.hasError) { return Center( child: Text(snapshot.error.toString()), ); } return Column( children: [ Expanded( flex: 2, child: _GoogleMaps( testPosition: testPosition, okDistance: okDistance, canChoolCheck: canChoolCheck, initialPosition: initialPosition, onMapCreated: googleMapController, ), ), Expanded( flex: 1, child: _Bottom( choolCheckDone: choolCheckDone, canChoolCheck: canChoolCheck, onChoolCheckPressed: onChoolCheckPressed, ), ) ], ); }, ), ); } googleMapController(GoogleMapController controller) { // state에 선언한 controller에 방금 선언한 controller 넣음 this.controller = controller; } onChoolCheckPressed() async { final result = await showDialog( context: context, builder: (BuildContext context) { return CupertinoAlertDialog( title: Text('출근하기'), content: Text('출근을 하시겠습니까?'), actions: [ TextButton( onPressed: () { Navigator.of(context).pop(false); }, child: Text('취소'), style: TextButton.styleFrom(foregroundColor: Colors.red), ), TextButton( onPressed: () { Navigator.of(context).pop(true); }, child: Text('출근하기'), style: TextButton.styleFrom(foregroundColor: Colors.blue), ) ], ); }, ); if (result) { setState(() { choolCheckDone = true; }); } } myLocationPressed() async { print('before'); final location = await Geolocator.getCurrentPosition(); print('after'); controller.animateCamera( CameraUpdate.newLatLng( // 이 위치로 구글맵 카메라를 애니메이션과 함께 움직여라! LatLng( location.latitude, location.longitude, ), ), ); } } class _GoogleMaps extends StatelessWidget { final LatLng testPosition; final double okDistance; final bool canChoolCheck; final CameraPosition initialPosition; final MapCreatedCallback onMapCreated; const _GoogleMaps({ super.key, required this.testPosition, required this.okDistance, required this.canChoolCheck, required this.initialPosition, required this.onMapCreated, }); @override Widget build(BuildContext context) { return GoogleMap( initialCameraPosition: initialPosition, mapType: MapType.normal, myLocationEnabled: true, myLocationButtonEnabled: false, zoomControlsEnabled: false, onMapCreated: onMapCreated, markers: { Marker( markerId: MarkerId('123'), position: testPosition, ), }, circles: { Circle( circleId: CircleId('inDistance'), center: testPosition, radius: okDistance, fillColor: canChoolCheck ? Colors.blue.withOpacity(0.5) : Colors.red.withOpacity(0.5), strokeColor: canChoolCheck ? Colors.blue : Colors.red, strokeWidth: 1, ) }, ); } } class _Bottom extends StatelessWidget { final bool choolCheckDone; final bool canChoolCheck; final VoidCallback onChoolCheckPressed; const _Bottom({ super.key, required this.choolCheckDone, required this.canChoolCheck, required this.onChoolCheckPressed, }); @override Widget build(BuildContext context) { return Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon( choolCheckDone ? Icons.check : Icons.timelapse_outlined, color: choolCheckDone ? Colors.green : Colors.blue, ), SizedBox( height: 16, ), if (!choolCheckDone && canChoolCheck) OutlinedButton( onPressed: onChoolCheckPressed, child: Text('출근하기'), style: OutlinedButton.styleFrom( foregroundColor: Colors.blue, ), ), ], ); } }
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
윈도우 에뮬레이터창 오류
에뮬레이터터 세팅하기 강의 잘 따라하다가 에뮬레이터 실행하면 아래 그림처럼 최소화된 상태에서 클릭도 안되고 더이상 진행이 안됩니다. 강의에서처럼 구글디바이스 기본화면이 별도창으로 나와야하는데 말이죠 ㅜ 진도는 나가야하기 때문에 다시 '체크헤제'취소하고 아래처럼 사용하고 있습니다. 코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
[섹션16] 프로젝트_4. 디자인 마무리하기
안녕하세요 :)좋은 강의 만들어주신 덕분에 감사히 참고하고 있습니다.섹션 16 U&I 프로젝트 4번째 동영상에서 궁금한 점이 있어 게시판에 여쭙게 되었습니다. pubspec.yaml에서 font weight를 설정해주었는데요,- family: Sunflower fonts: - asset: asset/font/Sunflower-Light.ttf - asset: asset/font/Sunflower-Medium.ttf weight: 500 - asset: asset/font/Sunflower-Bold.ttf weight: 700 강의에서 말씀주신대로 fontWeight 파라미터에서 FontWeight.w500 등을 통해 1번에서 설정했던 fontweight을 불러올 수 있었습니다. Text( 'D+1', style: TextStyle( color: Colors.white, fontFamily: 'Sunflower', fontSize: 50.0, fontWeight: FontWeight.w400, ), ),다만, 1번에서 설정했던 500과 700 외에 다른 숫자들도 weight로 설정할 수 있더라구요. 그렇다면 굳이 1번과 같이 weight에 500, 700등을 미리 설정하는 것이 어떤 차이를 줄 수 있는지 여쭙습니다! 도움을 부탁드립니다.감사합니다~!
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
PageController를 initState()에서 사용할 수 있는 이유가 무엇인가요
지난번 StatefullWidget 라이프사이클에서 Constructor > 2. Create State > 3.InitState > 4. didChangeDependencies > 5. build 이라고 알려주셨습니다. 이번강의에서는 initState()에서 Pagecontroller.animateToPage를 사용하여 위젯을 컨트롤 하였는데요. 아직 빌드되지 않은 위젯을 어떻게 InitState에서 컨트롤할 수 있는건가요?5단계 Build 단계에서 위젯에 컨트롤러를 할당한 이후에 사용할 수 있어야하지 않나요? 코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결Slack 클론 코딩[실시간 채팅 with React]
Module not found: Error: Can't resolve './App' 에러
안녕하세요. 강의에서 배운 내용 응용해서 사이드 프로젝트 만드는 중인데 Module not found: Error: Can't resolve './App' in '/Users/taetae/Documents/github/PicKIvy/frontend/src' 오류가 고쳐지지 않아 질문드립니다. (시도해본 해결방법들)[ Tsconfig.json ]“jsx": "react-jsx" 으로 설정됐는지 확인 -> 그래도 안됌“paths" 확인> "baseUrl": "src", (원래 “.”이었음) "paths": { "@pages/*": ["pages/*"], "@components/*": ["components/*"], "@layouts/*": ["layouts/*"], "@hooks/*": ["hooks/*"], "@utils/*": ["utils/*"], "@typings/*": ["typings/*"] }, 패스에 전부 src/붙여서 "@pages/*": [“src/pages/*"], 해봤는데 안됨 “moduleResolution": "node", 확인 -> 그래도 안됌 [ Web pack.config]Extensions: [ “.tsx”] 으로 설정됐는지 확인 -> 그래도 안됌package-lock.json지우고 다시 Npm install안됌 ( rm -rf node_modules package-lock.json ->npm cache clean --force -> npm install ) [ index.tsx ]import App from './App'; 을 import App from './App.tsx; ‘ 로 해봤는데 안됌[ 폴더구조, tsconfig ][ 웹팩 ]import path from 'path'; import ReactRefreshWebpackPlugin from '@pmmmwh/react-refresh-webpack-plugin'; import webpack, { Configuration as WebpackConfiguration } from 'webpack'; import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin'; // import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'; import { Configuration as WebpackDevServerConfiguration } from 'webpack-dev-server'; interface Configuration extends WebpackConfiguration { devServer?: WebpackDevServerConfiguration; } const isDevelopment = process.env.NODE_ENV !== 'production'; const config: Configuration = { name: 'PicKivy', mode: isDevelopment ? 'development' : 'production', devtool: isDevelopment ? 'inline-source-map' : 'hidden-source-map', resolve: { extensions: ['.js', '.jsx', '.ts', '.tsx', '.json'], alias: { '@hooks': path.resolve(__dirname, 'src/hooks'), '@components': path.resolve(__dirname, 'src/components'), '@layouts': path.resolve(__dirname, 'src/layouts'), '@pages': path.resolve(__dirname, 'src/pages'), '@utils': path.resolve(__dirname, 'src/utils'), '@typings': path.resolve(__dirname, 'src/typings'), }, }, entry: { app: './src/index.tsx', }, target: ['web', 'es6'], module: { rules: [ { test: /\.tsx?$/, loader: 'babel-loader', exclude: /node_modules/, options: { presets: [ [ '@babel/preset-env', { targets: { browsers: ['> 0.25%', 'not dead'] }, // 최신 브라우저 타겟팅 debug: isDevelopment, }, ], '@babel/preset-react', '@babel/preset-typescript', ], plugins: [ '@babel/plugin-transform-runtime', isDevelopment && 'react-refresh/babel', '@emotion/babel-plugin', ].filter(Boolean), }, }, { test: /\.css$/, use: ['style-loader', 'css-loader'], }, { test: /\.(png|jpg|gif|svg)$/, type: 'asset/resource', }, ], }, plugins: [ new ForkTsCheckerWebpackPlugin({ async: false, }), new webpack.EnvironmentPlugin({ NODE_ENV: isDevelopment ? 'development' : 'production' }), ], output: { path: path.join(__dirname, 'dist'), filename: '[name].[contenthash].js', publicPath: '/dist/', }, devServer: { historyApiFallback: true, port: 3000, devMiddleware: { publicPath: '/dist/' }, static: { directory: path.resolve(__dirname, 'public') }, proxy: { '/api/': { target: 'http://localhost:3000', changeOrigin: true, ws: true, }, }, }, }; if (isDevelopment && config.plugins) { config.plugins.push(new webpack.HotModuleReplacementPlugin()); config.plugins.push( new ReactRefreshWebpackPlugin({ overlay: { useURLPolyfill: true, }, }), ); // config.plugins.push(new BundleAnalyzerPlugin({ analyzerMode: 'server', openAnalyzer: false })); } if (!isDevelopment && config.plugins) { config.plugins.push(new webpack.LoaderOptionsPlugin({ minimize: true })); // config.plugins.push(new BundleAnalyzerPlugin({ analyzerMode: 'static' })); } export default config; 코드 복붙하니까 코드가 이상하게 나와서 캡쳐본도 올립니다. (test: /\.tsx? 아래부분부터) [ App, index ]@page 하니까 에러떠서 ./로 했습니다. 이것때문에 계속 못하고 있는데 저에게 답을 알려주시면 감사하겠습니다...ㅠ.ㅜ
-
해결됨[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
Section 26 RtcEngine initialize 에러(해결은 했습니다!)
채널 입장하고 권한 체크 후 앱이 꺼지고 Debug 콘솔에 아래 같은 로그가 뜨길래 한참 헤맸습니다.코드 한 줄씩 지워가며 어디서 에러가 뜨는지 확인해보니 await engine!.initialize(RtcEngineContext(appId: appId,)); 코드가 들어가는 순간 앱이 꺼지더라구요해당 부분을 집중해서 검색하다가 발견한 방법대로 RtcEngine 선언 부분에 late 를 넣어주니 앱이 꺼지지 않았습니다. 혹시 원인을 알 수 있을까요?에러 로그D/EGL_emulation( 2046): app_time_stats: avg=10745.24ms min=12.90ms max=31961.13ms count=3 D/nativeloader( 2046): Load /data/app/~~nTLNP9Bj_egzZU9DQGxSrQ==/com.example.video_call-LRfYUQJyccQppChea-IfMw==/lib/arm64/libAgoraRtcWrapper.so using ns clns-7 from class loader (caller=/data/app/~~nTLNP9Bj_egzZU9DQGxSrQ==/com.example.video_call-LRfYUQJyccQppChea-IfMw==/base.apk!classes2.dex): dlopen failed: empty/missing DT_HASH/DT_GNU_HASH in "/data/app/~~nTLNP9Bj_egzZU9DQGxSrQ==/com.example.video_call-LRfYUQJyccQppChea-IfMw==/lib/arm64/libAgoraRtcWrapper.so" (new hash type from the future?) E/AndroidRuntime( 2046): FATAL EXCEPTION: main E/AndroidRuntime( 2046): Process: com.example.video_call, PID: 2046 E/AndroidRuntime( 2046): java.lang.UnsatisfiedLinkError: dlopen failed: empty/missing DT_HASH/DT_GNU_HASH in "/data/app/~~nTLNP9Bj_egzZU9DQGxSrQ==/com.example.video_call-LRfYUQJyccQppChea-IfMw==/lib/arm64/libAgoraRtcWrapper.so" (new hash type from the future?) E/AndroidRuntime( 2046): at java.lang.Runtime.loadLibrary0(Runtime.java:1081) E/AndroidRuntime( 2046): at java.lang.Runtime.loadLibrary0(Runtime.java:1003) E/AndroidRuntime( 2046): at java.lang.System.loadLibrary(System.java:1765) E/AndroidRuntime( 2046): at io.agora.agora_rtc_ng.AgoraRtcNgPlugin.onMethodCall(AgoraRtcNgPlugin.java:65) E/AndroidRuntime( 2046): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:267) E/AndroidRuntime( 2046): at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:292) E/AndroidRuntime( 2046): at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:319) E/AndroidRuntime( 2046): at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(Unknown Source:12) E/AndroidRuntime( 2046): at android.os.Handler.handleCallback(Handler.java:959) E/AndroidRuntime( 2046): at android.os.Handler.dispatchMessage(Handler.java:100) E/AndroidRuntime( 2046): at android.os.Looper.loopOnce(Looper.java:232) E/AndroidRuntime( 2046): at android.os.Looper.loop(Looper.java:317) E/AndroidRuntime( 2046): at android.app.ActivityThread.main(ActivityThread.java:8705) E/AndroidRuntime( 2046): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime( 2046): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580) E/AndroidRuntime( 2046): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886) I/Process ( 2046): Sending signal. PID: 2046 SIG: 9 Lost connection to device. the Dart compiler exited unexpectedly.해결했던 방법late RtcEngine? engine; //선언할 때 late 추가