[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
질문의 내용은 제목과 동일합니다. 아래는 제가 궁금해서 찾아본 내용입니다. Base64 인코딩은 텍스트형태로 데이터를 전송할 때 사용한다고 하더군요. 저희는 HTTP 통신을 하게 되는데, HTTP 통신에서는 이진데이터 전송이 불가하다고 합니다. (버전별로 다 그런지 찾아본것은 아님) 그래서 pdf 나 이미지 같은 이진 바이너리 파일을 전송하기 위해 Base64 를 사용한다고 이해를 했습니다. 코드 상에서 String 형태의 문자열은 이미 문자열 형태라고 하는데.. ID, PW 를 Base64 인코딩하시는 이유가 있을까요? 찾아본 바로는, 있다면 시스템간의 호환성 문제일거라고 생각하는데, 호환성 문제라고 찾았본 케이스들은 너무 예전 시스템이라고하니 와닿지 않네요. 찾아본 내용들은 책이 아니라, 인터넷에서 검색한 내용들이라 틀렸을 수도 있습니다. 실무에서는 일반적으로 ID/PW에 대해 Base64 인코딩을 사용하는 것인가요?
좀 더 상세한 코드입니다. name: flutter_cart_bloc_exam description: A new Flutter application. version: 1.0.0+1 environment: sdk: ">=2.12.0 <3.0.0" dependencies: flutter: sdk: flutter cupertino_icons: ^0.1.2 flutter_bloc: ^7.0.0 http: ^0.12.0+1 dev_dependencies: flutter_test: sdk: flutter test: ^1.24.9 test_api: ^0.5.1 flutter: uses-material-design: true 처음에 환경의 sdk 관련해서 2.7로 변경한 이후에 null 관련된 정보들 및 다른 분들이 작성한 코드들을 확인하며 수정을 모두 완료했습니다. 그런데 Pub get 관련해서 가져오더라도 계속 오류가 발생하네요. @override bool updateShouldNotify(InheritedWidget oldWidget) => true; static CartBloc of(BuildContext context) => (context.dependOnInheritedWidgetOfExactType<CartProvider>() as CartProvider) .cartBloc; 어떻게든 맞춰서 실행을 해봤지만 실행 버전이 달라 마이그레이션이 필요하다는 오류를 다시한번 받게 되었습니다. . . + 안드로이드의 gradle 파일이 잘못되었고, 버전이 잘못되었다는 오류가 발생해서 다시 롤백 후 삽질을 해봤습니다. 그래서 sdk가 2.7이어야만 하는 것인가? 생각이 되어 별도의 삽질을 해봤는데 안되네요. 아무래도 제가 깃에서 클론받은 프로젝트로 진행하다보니 이러한 문제가 발생했다고 생각이 되는데 혹시 해결책이 따로 있을까요? 일단은 새로 프로젝트 생성해서 처음부터 다시 진행해 볼 예정입니다. 제가 궁금한 부분은 git에서 클론받은 프로젝트가 있을 때 그래도 pubspec.yaml 파일에서의 라이브러리를 불러오는 것까지는 필요할 것 같은데( + 추후에 버전이 달라질 경우 운영 중인 프로젝트를 새로 만드는 것은 말이 안되기 때문에), 혹시 어느 키워드로 파고들어서 찾아야 할지, 혹은 별도의 해결책이 있으신지가 궁금합니다. 감사합니다.!
[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
안녕하세요~ 딜리버리앱을 수없이 반복하며 나날이 하나씩 더 배워가고 있습니다^^; 오늘은 제 실제 Z폴드5 기기에서 USB연결하여 에뮬레이터 구동을 해보려고 했습니다. 그런데 앱은 실행이 되는데, 로그인에서 루트탭 페이지로 영 이동이 안되고 로그인 버튼이 회색으로 되었다가 다시 일정 시간이 지나면 원래의 초록 로그인 버튼으로 변경되기만 합니다. 동일한 코드로 안드로이드 스튜디오 상의 에뮬레이터 작동시키면 문제없이 로그인이 패스되고 홈페이지로 이동합니다. 해결할 수 있는 방법이 없을까요? 제 폰에서도 자유롭게 작동해보고 싶습니다, 추가로 apk 앱으로 빌드해서 폰에 깔아봤는데 동일하게 로그인페이지에서 변화가 없었습니다. 이것은 왜그럴까요?
안녕하세요 연구실에서 자체적으로 실험기기와 컴퓨터랑 통신을 진행하는 중인데, 하나가 해결이 안 되어서 너무 답답해서 고수님들께 자문을 구하려고 합니다. Rs232 rtu 모드를 지원한다고 한 OS-20 overhead stirrer과 통신을 진행 중 입니다. 이 친구의 통신 규격과 방식은 아래 그림 3개와 같습니다. 이중 stirrer control 부분을 제가 참조해서 저 command를 hex 방식으로 입력하였는데 도무지 안되는 겁니다. 그런데 웃긴게 이 회사에서 지원하는 공식 통신프로그램을 사용하면 작동이 잘 되더군요. Instruction overview에서 나온 규칙은 다음과 같습니다. Command 구조는 Prefix Instruction_code Data_frame Checksum로 되어 있고 입력의 prefix는 0xfe로 시작하며 responce는 0xfd로 시작합니다. 모든 바이트 사이에는 50ms delay가 존재해야하며 Dataframe은 큰 수 자리부터 전송합니다. ex) 1000rpm을 data frame에 입력하려고 할 시 Hex값이 03E8이니까 앞에 두 자리를 0x03에 해당하고 뒤에 두 자리를 0xE8로 해당시킵니다. Null은 0x00입니다. Checksum 방식은 0xfe,0xfd인 prefix를 제외하고 나머지를 전부 더한 값으로 0xnn 이런식으로 표현됩니다. 신기하게도 16진수의 2자리를 넘어가도 뒤에 2 자리만 붙이면 된다고 하더군요. ex) 0xfe 0xb1 0x03 0xe8 0x00 checksum인데 0xfe를 제외하고 다 더하면 019c이지만 0x9c만 입력하면 되는 형식입니다. 그래서 이 규칙대로 코드를 짜서 통신을 해 보았는데, 아무리 해도 안되어서 너무 답답합니다. 심지어 제가 잘못했는지 확인하려고 시리얼 통신 sniffer을 사용하여서 공식 프로그램에서는 어떻게 통신이 되나 뜯어보았습니다. 결과는 아래 사진과 같습니다. 제가 python으로 작성한 코드는 아래와 같습니다. import serial import time ser = serial.Serial( port='COM7', # Update with your actual port baudrate=9600, parity=serial.PARITY_NONE, # No parity stopbits=serial.STOPBITS_ONE, # 1 stop bit bytesize=serial.EIGHTBITS # 8 data bits ) def send_hex_string(hex_string): # Convert the hex string to bytes byte_data = bytes.fromhex(hex_string) # Send the bytes over the serial port ser.write(byte_data) def send_hex_string_with_delay(hex_string, delay_ms=50): for i in range(0, len(hex_string), 2): # Extract each pair of characters and convert to bytes hex_pair = hex_string[i:i + 2] byte_data = bytes.fromhex(hex_pair) # Send the bytes over the serial port ser.write(byte_data) # Wait for the specified delay time.sleep(delay_ms / 1000.0) command = 'feb103e8009c' send_hex_string_with_delay(command) ser.close() 또한 파이썬에서의 결과를 시리얼 전송으로 보면 다음과 같습니다. 입력은 제대로 되는데 기기에는 반응이 제대로 나오지 않네요... 제가 잘못하고 빠뜨린 점이 있을까요? 읽어주셔서 정말 감사드립니다.
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
영상통화 NOW 6.x.x 강의를 진행하고 있습니다. 처음 agora 세팅에서 프로젝트를 생성하고 channel name과 token을 받아오라고 하셨는데 제가 현재 보고 있는 agora 페이지는 강의 내에 있는 페이지와 다른 것 같습니다. channel name을 입력하고 token을 받아오는 페이지를 찾을 수 없어 진행이 어렵습니다.ㅜㅜ 가이드 부탁드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 클린아키텍쳐를 구현중인데요 노트를 수정하는 플로우에서 viewModel -> useCase.update -> repository.update -> remoteDatasource.update 의 과정을 거치고 노트리스트 조회의 플로우를 생각해보면 viewModel -> useCase.getList -> repository.getList -> remoteDatasource.getLIst 처럼 같은 과정을 거치게 됩니다. updateapi를 성공했다면 리스트화면으로 돌아올때 데이터 최신화를 위해 다시한번 조회하는 의미없는 리소스를 없애고싶습니다. 혹은 화면 A,B에서 같은리스트를 보여주는 상황이라면 update 성공 하고나서 A,B화면에 어떤방식으로 notify를 해줄 수 있을까요? 클린아키텍쳐의 구조를 구현하기 전에는 SingleTon으로 구현된 Repository에서 stream을 열어서 viewModelA와 viewModelB 에서 같은 repository의 stream을 구독해서 state를 바꿔주는 방식으로 했는데 usecase를 사용하려고하니 해당구조는 어려움이 생겨서 어떻게 할지 고민하다가 질문 드립니다!
[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
안녕하세요 강사님강의 너무잘보고 있습니다. 레스토랑 카드 만드는 중에 이미지를 둥글게 주는 옵션을 추가하면 아래 캡쳐본 처럼 이미지가 노출되지 않습니다. borderRadius: BorderRadius.circular(10.0), 반면에 아래 부분은 주석처리하면 이미지가 잘 노출되구요.. asset에 파일이 없는 문제는 아닐꺼같은데 혹시 어떻게 해결할수잇을까요? 일시적인 버그가 아닐까하여 재시작은 여러번 해보았습니다 borderRadius: BorderRadius.circular(10.0), import 'package:flutter/material.dart'; class RestaurantCard extends StatelessWidget { // 이미지 final Widget image; // 레스토랑 이름 final String name; // 레스토랑 태그 final List<String> tags; // 평점 갯수 final int ratingCount; // 배송 걸리는 시간 final int deliveryTime; // 배송 비용 final int deliveryFee; // 평균 평점 final double rating; const RestaurantCard({ required this.image, required this.name, required this.tags, required this.ratingCount, required this.deliveryTime, required this.deliveryFee, required this.rating, super.key }); @override Widget build(BuildContext context) { return Column( children: [ // image, ClipRRect( // borderRadius: BorderRadius.circular(10.0), child: image, ), const SizedBox(height: 16.0), Text( name ), ], ); } } 참고사항 restaurant_screen.dart import 'package:flutter/material.dart'; import 'package:untitled2/restaurant/component/restaurant_card.dart'; class RestaurantScreen extends StatelessWidget { const RestaurantScreen({super.key}); @override Widget build(BuildContext context) { return Container( child: Center( child: Padding( padding: const EdgeInsets.symmetric(horizontal: 16.0), child: RestaurantCard( image: Image.asset( 'asset/img/food/ddeok_bok_gi.jpg', fit: BoxFit.cover ), name: '불타는 떡볶이', tags: ['떡볶이', '치즈', '매운맛'], ratingCount: 100, deliveryTime: 15, deliveryFee: 2000, rating: 4.52, ), ), ), ); } } - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 코드팩토리 디스코드 https://bit.ly/3HzRzUM Flutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다!
[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
안녕하세요! 처음부터 「ProductCard작업하기 」강의까지 수업을 잘듣다가 에뮬레이터 새로고침 하는 도중에 로딩에서 갑자기 멈춰버렸습니다. (현상황) 에러를 찾아보던중에 예전 수업에서 build.gradle파일의 minSdkVersion 부분에 「18」로 변경하라고 말씀하셨던거 같은데 현재 파일을 확인해 보니 「flutter.minSdkVersion」로 다시 돌아왔습니다. 이부분을 다시 「18」로 수정하고 프로그램을 실행하면 다시 「flutter.minSdkVersion」로 돌아가는데 어떻게 해결해야 하나요..?? 그리고 제가 생각하는 에러의 원인은 위의내용이라고 생각하는데 혹시 다른 원인이 있다면 알려주실수 있을실까요?
안녕하세요 선생님 ios시뮬 선택하고 run debug을 했는데Error (Xcode): Target debug_unpack_ios failed: Exception: Failed to codesign /Users/hoseong/Desktop/flutter/hello_flutter/build/ios/Debug-iphonesimulator/Flutter.framework/Flutter with identity -. 이런 에러가 나오는데 어떻게 해결해야할까요?