[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
다른 프로젝트들은 외부 프로젝트를 현재 만드는 프로젝트를 임폴트하여 접근이 가능한데 플러터에도 이러한 방법이 있을까요 pub.dev를 이용하지 않고 제가 자주 쓰는 클래스를 따로 만들어 프로젝트를 진행할때 마다 import하는 방법을 알고 싶은데 해당 내용이 없어서 찾으려고 해도 어떤 용어로 어떻게 찾을 지 몰라서 여기다 물어봅니다. (ex : utils, repository connection...) 아시면 꼭 답변 부탁드릴게요
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
안녕하세요 액자 프로젝트에서 dispose 함수로 Stateful 위젯 삭제할 때, if 문 안쓰고 46번 코드만 적어도 되나요? 제가 생각했을 땐, 어차피 init 함수 실행되면서 timer 무조건 실행되니까 timer 가 null 이 안되고, 또, 느낌표로 null 아니라고 인증마크?도 했으니 if 문으로 체크해야되나? 라는 의문이 들어서요^^
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 코드팩토리 디스코드 https://bit.ly/3HzRzUM Flutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다! 안녕하세요 강사님! image_picker pub get 관련하여 해당 오류가 지속적으로 발생해 질문 드립니다. 답변 부탁드립니다 ㅠㅠ!
[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
final routeProvider = Provider<GoRouter>( (ref) { print('1 : routeProvider 실행'); final authState = ref.watch(authProvider); print('1 : authState is ${authState}'); print('------GoRouter return!!-------'); return GoRouter( initialLocation: '/', routes: authState.route, refreshListenable: authState, redirect: authState.redirect, ); }, ); 위에서 return GoRouter하는 순간 위와 같은 오류가 발생하네요...ㅠ 몇 시간을 고민해도 도저히 모르겠습니다. 복기하면서 나는 오류인데, 그 전에 강의 보면서 해놓은거랑 똑같이해도 이것만 오류가 나네요... 도와주세요
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
final homeUrl = Uri.parse(' https://blog.codefatory.ai '); homeUrl을 해당 변수를 사용하는 클래스 밖(상위)에서 선언하는건 어떤이유인가요? loadRequest()가 수행되는공간과 같은 공간에 위치시켰더니 'the instance member 'homeUrl' can't be accessed in an initializer. Try replacing the reference to the instance member with a different expression.' 이란 에러가 뜨더군요. 클래스 컨스트럭터 내에서 변수를 사용하려면 상위공간에 미리 선언해야만 하는것인가요? (이전 코드에선 web view위젯 안에서 homeUrl을 call했기에 webview위젯 밖에 선언되어있어서 괜찮았던거라고 이해해도되는걸까요? WebViewController controller = WebViewController() ..setJavaScriptMode( JavaScriptMode .unrestricted) ..loadRequest(homeUrl); 새로 등장한 이 코드에서 (..)은 찾아보니 cascade notation 이라는 문법이더군요. 맞다면 WebViewController controller = WebViewController(); controller.setJavaScriptMode( JavaScriptMode .unrestricted); controller.loadRequest(homeUrl); 과 같은 뜻일텐데 이 코드처럼 풀어서 쓰려하면' the name of a constructor must match the name of the enclosing class'라는 에러가 뜹니다. 이는 왜일까요?
200여개의 csv 파일이 있습니다. (용량은 각각 1메가에서 120메가 - 최대 100만건 데이터 등등 ). 결측치 가 있어서 판다스 에서 불러들여서 정리하고 for 반복문으로 파일 개별적으로 읽어 들여와 장고 모델에 save() 로 입력시키는 작업을 진행하고 있습니다. 초반 10여개 파일까지는 제법 속도가 나오는데 (7만행 데이터 20분 소요) 이후로 속도가 급격하게 감소해서 24시간 돌려서 30메가 파일 겨우 저장 중입니다(1건에 1초씩 걸리네요 ㅠㅠ). 개발중이라 로컬에 있는 장고 내장 sqlite 사용 했습니다. 속도를 좀 더 빠르게 하는 방법이 있을까요? 3일째 검색 해봤는데 별다른 해결책이 보이지 않아서 질문 남겨 봅니다. app.py # new 폴더에 정리된 csv 파일을 읽어서 DB에 저장 import pandas as pd # django 프로젝트에 있는 settings.py 파일을 읽어서 환경변수로 설정 import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dbking.settings") import django django.setup() #django 프로젝트에 있는 models.py 파일에서 BasicData 클래스를 읽어온다 from common.models import BasicData # new 폴더에 있는 파일명을 읽어서 product 변수에 리스트에 저장 product_list = os.listdir("./script/newdb") # product_list 에 csv 파일 정렬(오름차순) for x in product_list: # csv 파일 하나씩 읽어오기 df = pd.read_csv("./script/newdb/" + x, encoding="cp949") # 결측치를 0으로 채운다 df = df.fillna(0) for a in list_of_csv: # 파일마다 컬럼수가 달라서 remark1, remark2 라는 예비컬럼 2개 추가 # -> 인덱스 에러 나는 경우 0 으로 저장 if a[16] is None: a.insert(16, 0) a.insert(17, 0) elif a[17] is None: a.insert(17, 0) # DB에 저장 try: db_insert = BasicData( opnSvcId = a[2], opnSfTeamCode = a[3], mgtNo = a[4], fileNumber = fileNumber, businessType = businessType, opnSvcNm = a[1], apvPermYmd = a[5], confirmNumber = a[6], businessCondition = a[7], siteTel = a[8], sitePostNo = a[9], siteWhlAddr = a[10], rdnWhlAddr = a[11], rdnPostNo = a[12], bplcNm = a[13], latitude = a[14], longitude = a[15], remark1 = a[16], remark2 = a[17], ) i += 1 # print(i) except Exception as e: print("쿼리", e) continue #DB에 저장 입력 try: db_insert.save() except Exception as e: print("저장중에러",e) continue from django.db import models class BasicData(models.Model): # 개방서비스아이디 opnSvcId = models.CharField(max_length=100) #개방자치단체코드 opnSfTeamCode = models.CharField(max_length=10) # 관리번호 mgtNo = models.CharField(max_length=100) #파일번호 fileNumber = models.IntegerField() #업종명 businessType = models.CharField(max_length=100) #개방서비스명 opnSvcNm = models.CharField(max_length=100) #인허가일자 apvPermYmd = models.DateField() #영업상태구분코드(1-정상, 2-폐업, 3-휴업, 4-전환) confirmNumber = models.IntegerField() #영업상태명 businessCondition = models.CharField(max_length=100) #소재지전화 siteTel = models.CharField(max_length=100) #우편번호 sitePostNo = models.CharField(max_length=100) #주소 siteWhlAddr = models.CharField(max_length=100) #도로명주소 rdnWhlAddr = models.CharField(max_length=100) #도로명우편번호 rdnPostNo = models.CharField(max_length=100) #사업장명 bplcNm = models.CharField(max_length=100) # 위도 latitude = models.FloatField() # 경도 longitude = models.FloatField() #비고1 remark1 = models.CharField(max_length=100) #비고2 remark2 = models.CharField(max_length=100) # 생성시점 created = models.DateTimeField(auto_now_add=True) update = models.DateTimeField(auto_now=True) def save(self, *args, **kwargs): queryset = BasicData.objects.filter(mgtNo__exact=self.mgtNo) # 중복된 이름이 없을 때만 저장 if len(queryset) == 0: super().save(*args, **kwargs) print('> Created new category') # if '&' in self.addr: # self.addr = self.addr.replace('&', ' ') # self.save() # 중복된 카테고리 있을 시 저장 안함 else: print('> Cannot create category with existing name') def __str__(self): return self.name
안녕하세요. 어제부터 DeepingSauce님 로드맵을 갓 시작한 코린이 입니다. 금일 강의를 전부 결재하고 시작점에 섰는데 확인해보니 공부 환경상 Jupyter lab 활용이 불가능 하여 두가지 질문 드립니다. Colab 활용 가능성 수강 환경상 Jupyter Notebook은 쓸 수 있지만 Jupyter Lab의 사용이 불가능합니다. 그래서 Colab을 사용해볼까 하는데, 수업 진행에 무리가 없을런지 질문 드립니다. (수업내용을 보니 Jupyter에 Extention까지 설치해서 사용하던데 Colab이 해당 기능들을 다 지원할지 모르겠습니다.) Colab 설치 및 세팅방법 Colab이 활용 가능하다면 선생님 수업을 위해 (Jupyter Lab에서 했듯이) Colab의 설치 및 세팅방법도 알고 싶습니다. 혹시 가능하다면 안내 부탁 드립니다. 아는 지식이 짧아 있는 그대로 질문 드립니다.
안녕하세요~ 덕분에 클린 아키텍쳐 구조 잘 공부했습니다. 혹시 의존성 주입부분에서 질문이 있습니다. 제가 개인적으로 연습을 하면서 클린 아키텍쳐를 적용하고 있습니다. /di/provider_setup.dart 에서 한번에 의존성 주입 List<ChangeNotifierProvider> getProviders() { final dio = Dio(); SongRepository repository = SongRepository(dio); UseCases useCases = UseCases( getSearchSong: GetSearchSongUseCase(repository: repository), getSearchSinger: GetSearchSingerUseCase(repository: repository), getRecentlySongsList: GetRecentlySongsListUseCase(repository:repository), ); SearchViewModel searchViewModel = SearchViewModel(useCases: useCases); HomeViewModel homeViewModel = HomeViewModel(useCases: useCases); return [ ChangeNotifierProvider(create: (_) => searchViewModel), ChangeNotifierProvider(create: (_) => homeViewModel), ]; } main 에서 주입 void main() { // provider 호출 final providers = getProviders(); runApp( MultiProvider( providers: providers, child: const MyApp(), ), ); } context.watch <SearchViewModel>(); 은 잘 작동해서 뷰에 출력을 잘 하고있습니다. class _SearchScreenState extends State<SearchScreen> { @override Widget build(BuildContext context) { final searchViewModel = context.watch<SearchViewModel>(); final state = searchViewModel.state; ... } context.watch <HomeViewModel>();은 에러가 발생합니다. class _Body extends StatelessWidget { const _Body({Key? key}) : super(key: key); @override Widget build(BuildContext context) { final homeViewModel = context.watch<HomeViewModel>(); final state = homeViewModel.state; ... } 에러내용 ======== Exception caught by widgets library ======================================================= The following ProviderNotFoundException was thrown building _Body(dirty): Error: Could not find the correct Provider<HomeViewModel> above this _Body Widget This happens because you used a `BuildContext` that does not include the provider of your choice. There are a few common scenarios: - You added a new provider in your `main.dart` and performed a hot-reload. To fix, perform a hot-restart. - The provider you are trying to read is in a different route. Providers are "scoped". So if you insert of provider inside a route, then other routes will not be able to access that provider. - You used a `BuildContext` that is an ancestor of the provider you are trying to read. Make sure that _Body is under your MultiProvider/Provider<HomeViewModel>. This usually happens when you are creating a provider and trying to read it immediately. For example, instead of: ``` Widget build(BuildContext context) { return Provider<Example>( create: (_) => Example(), // Will throw a ProviderNotFoundError, because `context` is associated // to the widget that is the parent of `Provider<Example>` child: Text(context.watch<Example>().toString()), ); } ``` consider using `builder` like so: ``` Widget build(BuildContext context) { return Provider<Example>( create: (_) => Example(), // we use `builder` to obtain a new `BuildContext` that has access to the provider builder: (context, child) { // No longer throws return Text(context.watch<Example>().toString()); } ); } ``` If none of these solutions work, consider asking for help on StackOverflow: https://stackoverflow.com/questions/tagged/flutter The relevant error-causing widget was: When the exception was thrown, this was the stack: #0 Provider._inheritedElementOf (package:provider/src/provider.dart:343:7) #1 Provider.of (package:provider/src/provider.dart:293:30) #2 WatchContext.watch (package:provider/src/provider.dart:693:21) #3 _Body.build (package:what_do_you_want_to_sing/presentation/home/home_screen.dart:79:35) #4 StatelessElement.build (package:flutter/src/widgets/framework.dart:4949:49) #5 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4878:15) #6 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5) #7 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2667:19) #8 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:882:21) #9 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:378:5) #10 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1175:15) #11 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1104:9) #12 SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:881:7) (elided 4 frames from class _RawReceivePortImpl, class _Timer, and dart:async-patch) 저번에 이런 에러가 발생했을때, 의존성 주입이 안된 상태에서 context.watch() 를 해서 오류가 나 의존성을 추가해 해결했습니다. 하지만 이번에는 잘모르겠습니다. 의존성도 잘 주입되어서 view 단에서 잘 호출 하고 있는거 같은데.. 어떻게 해결해야할까요?
a = {'Phone': '01095136634', 'birth': '910904', 'adress': 'Busan', 'rank': [1, 2, 3], 'test': 'test_dict'} a라는 딕셔너리에서 910904라는 value값을 통해 key 값을 찾아서 출력 하고 싶습니다. 제가 생각 해낸 방법은 딕셔너리에는 순서가 없음으로 리스트로 형 변환을 하여 해당하는 인덱스를 불러오는 방법을 사용했습니다. print(list(a.keys())[list(a.values()).index('910904')]) 이거보다 더 효율적이고 간결한 방법이 있을 가요?
unittest 기반의 Unit Test시 Celery 혹은 ProcessPoolExecutor을 이용하면 해당 Context에서 DB 접근 시, Test DB를 참조 하는 것이 아니라 settings의 Default로 설정해놓은 Exist DB에 접근하는 이슈가 있더군요. 해당하는 경우 어떻게 해야 Test DB로 붙어서 작업할 수 있을까요? with concurrent.futures.ProcessPoolExecutor() as executor: