묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
블루투스로 센서 데이터 수집하고 싶은데 어떠게 해야 할까요?
강의 잘 듣고 있습니다. 정말 감사드립니다.제가 블루투스를 이용해서 센서에서 데이터를 수집하는 app을 개발하려고 합니다. 아직 준비 중이라 이렇게 flutter 강좌를 듣고 있습니다.블루투스를 이용한 데이터 수집과 관련된 강좌나 참고할만한 자료가 있을 까요?
-
미해결Flutter 응용 - 공공 API를 활용한 앱 만들기 (MVVM 패턴)
3버전 flutter에서 final stores = List<Store>(); 이 부분이 에러가 날 때는
이렇게 쓰면 됩니다..!
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
플러터 splash화면 시간 질문
FutureOr<String?> redirectLogic(BuildContext context,GoRouterState state){ final UserModelBase? user = ref.read(userMeProvider); //로그인 중 final logginIn = state.location == '/login'; //회원가입 페이지 이동중인지 final joinIn = state.location == '/login/join'; //유저 정보가 없는데 //로그인중이면 그대로 로그인 페이지에 두고 //만약 로그인중이 아니라면 로그인 페이지로 이동 if(user == null && !joinIn){ return logginIn ? null : '/login'; } //회원가입 페이지로 이동중이라면 if(user==null && joinIn){ return '/login/join'; } //user가 null이 아님 //UserModel //사용자 정보가 있는상태면 //로그인 중이거나 현재 위치가 SplashScreen이면 //홈으로 이동 if(user is UserModel){ return logginIn || state.location == '/splash' ? '/' : null; } //UserModelError if(user is UserModelError){ return logginIn ? null : '/login'; } return null; }} 위의 로직에서 splash화면을 인스타그램처럼 1초 지속되도록 하고싶은데 혹시 방법이 있을까요?
-
미해결Flutter 응용 - 공공 API를 활용한 앱 만들기 (MVVM 패턴)
3버전 flutter에서 RaisedButton이 안보일 때는ElevatedButton을 써보세요
이렇게 ElevatedButton을 이용해보세요그러면 이렇게 화면에 선생님 강의와 비슷하게 나옵니다!RaisedButton은 2.0 이후로 사용을 권장하지 않고 있다고 하네요!
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
중첩 map 쓰는 부분
안녕하세요 강사님.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이 출력되었기 때문입니다.
-
해결됨[플러터 상태관리] Bloc 마스터 코스 기초부터 응용까지!
8-1에서 build하는 app 별 상태가 다르게 나오는데 원인이 무엇일까요?
안녕하세요 강의 잘 보고 있습니다!제가 초기에 아이폰 에뮬로 하기 귀찮아서 mac app이랑 chrome app으로 강의를 따라하고 있었는데요... 약 30분까지의 스크롤 해결 전까지 진행한 상태에서 발견한 에러입니다.보니까 Mac App으로 하니 DioError: SockerException: Connection Failed가 되면서 아래 같이 에러가 발생합니다.chrome으로 하는 경우에는 데이터는 되는데 이미지를 못 읽는듯해요...그래도 아이폰 에뮬로 하니 잘 되긴 하던데... 이 차이는 앱별로 동작하는게 달라서 그런가요??혹시 동일하게 다 가능하도록 해결하는 방법도 있을까요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
프로바이더질문
처음 데이터를 가지고올때 if(state is! CursorPagination){ await this.paginate(); } 위의 코드를 실행하는데만약 데이터가 없다면final resp = await repository.paginate( paginationParams: paginationParams );여기서 캐스팅 오류가납니다.혹시 따로 해결방법이있을까요?? 너무 어렵네요
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
provider질문
void init(){ state is CursorPaginationLoading; }이런식으로 코드를 짜면 프로바이더 내용이 초기화 되는건가요?
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
children 속성과 관련하여 질문이 있습니다.
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 부분에 []를 지우니 오류가 사라지더군요. 왜 그런지 알 수 있을까요?
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
CrossAxisAlignment 질문
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가 최대라서 바로 횡축 정렬이 가능해지나요?
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
앱번들 빌드 에러좀 봐주세요.
유튜브 다트 강의, 인프런 플러터 강의, 그리고 코드팩토리의 플러터 프로그래밍 책까지 잘 보고 있습니다.양질의 컨텐츠와 친절한 답변에 매번 감사드립니다.현재 챗gpt api를 이용한 간단한 앱을 만들었고 이것을 빌드하려고 합니다.책 606쪽의 flutter build appbundle이라고 터미널에 치면 아래 에러가 납니다. mac@HanHoseokui-iMac kind_teacher_han % flutter build appbundle💪 Building with sound null safety 💪FAILURE: Build failed with an exception.* What went wrong:Execution failed for task ':app:mergeReleaseResources'.> Multiple task action failures occurred: > A failure occurred while executing com.android.build.gradle.internal.res.Aapt2CompileRunnable > Android resource compilation failed ERROR:/Users/mac/Documents/codefactory/kind_teacher_han/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: AAPT: error: file failed to compile. > A failure occurred while executing com.android.build.gradle.internal.res.Aapt2CompileRunnable > Android resource compilation failed ERROR:/Users/mac/Documents/codefactory/kind_teacher_han/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: AAPT: error: file failed to compile. > A failure occurred while executing com.android.build.gradle.internal.res.Aapt2CompileRunnable > Android resource compilation failed ERROR:/Users/mac/Documents/codefactory/kind_teacher_han/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: AAPT: error: file failed to compile.* 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.orgBUILD FAILED in 5sRunning Gradle task 'bundleRelease'... 6.2sGradle task bundleRelease failed with exit code 1 이미지 쪽에 에러가 있는 것 같아 보입니다. 저는 앱 아이콘 만들기 웹 사이트(https://www.appicon.co)에서 제가 만든 아이콘으로 안드로이드용 이미지를 만든 후 /Users/mac/Documents/codefactory/kind_teacher_han/android/app/src/main/res에 폴더 붙여넣기를 했었는데 이게 문제가 되었을까요? 옛날에 앱인벤터라는 교육용 블록코딩 앱 개발 플랫폼으로 했을 때는 앱 출시까지 그렇게 어렵지 않게 했었는데.. 한 달가량 헤메고 있으니 힘드네요ㅠㅠ 도와주세요!^^
-
미해결[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
상속받은 클래스의 named parameter 사용방법이 궁금합니다
상속받은 클래스의 named parameter 사용방법은 없는건가요?BoyGroud의 생성자에 required를 사용해 강의 속(36분) bts 객체의 파라미터를 name:'bts'로 넘겨주는 방법은 없을까요?
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
클래스 상속 질문있습니다.
부모 클래스를 상속할 때..class Idol { String name; int membersCount; Idol({ required this.name, required this.membersCount, }); void sayName() { print('저는 ${this.name}입니다.'); } void sayMembersCount() { print('${this.name}은/는 ${this.membersCount}명의 멤버로 구성되어 있습니다.'); } } 강의에서 설명해주신class GirlGroup extends Idol { GirlGroup( String name, int membersCount, ) : super( name: name, membersCount: membersCount, ); }이 코드 대신 명시적으로class BoyGroup extends Idol { BoyGroup({ required super.name, required super.membersCount, }); }이렇게 사용해도 인스턴스에서 명시적으로 선언하는 것 외에 다른 차이는 없는 건가요?(두 가지 모두 정상 출력확인했습니다.)
-
미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
GridView에 데이터가 표시가 안됩니다.
안녕하세요. 인스타그램 클론 강의 듣고, 혼자 토이플젝을 하나 하고 있는데 GridView에 데이터가 표시되지 않아 질문드립니다. 기능 #가치 라는 해시태그 버튼을 클릭하면 단어들중 #가치 라는 카테고리에 속하는 단어를 하단에 출력 #구현 사항단어를 여러 카테고리에 속하게 나누어 파이어베이스에 등록 완료해시태그 버튼 클릭했을때, 해당하는 단어들 list로 가지고 옴.#문제사항단어들을 list로 가지고와서 GridView에 출력하게 했으나 출력되지 않음. 첫번째 이미지는 더미데이터를 집어놓은거구요. 두번째 이미지가 현재 상황입니다. import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; import 'package:uddutsi/tab/home/home_model.dart'; import 'package:uddutsi/tab/search/search_model.dart'; import '../../model/category.dart'; import '../../model/word.dart'; class HomePage extends StatefulWidget { const HomePage({Key? key}) : super(key: key); @override State<HomePage> createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { final dics = const [ '단어1', '차갑다', '버르장머리없다','거지같다','착하다', '단어1', '차갑다', '버르장머리없다','거지같다','착하다', '단어1', '차갑다', '버르장머리없다','거지같다','착하다', '단어1', '차갑다', '버르장머리없다','거지같다','착하다', ]; @override Widget build(BuildContext context) { final model = HomeModel(); final searchModel = SearchModel(); List<Word> wordList = []; return Scaffold( appBar: AppBar( title: const Text('[test]'), ), body: Padding( padding: const EdgeInsets.all(8.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ const SizedBox(height: 10), StreamBuilder<QuerySnapshot<Category>>( stream: model.categoriesStream, builder: (context, snapshot) { if (snapshot.hasError) { return const Text('Something went wrong'); } if (snapshot.connectionState == ConnectionState.waiting) { return const Center(child: CircularProgressIndicator()); } List<Category> categories = snapshot.data!.docs.map((e) => e.data()).toList(); return Wrap( direction: Axis.horizontal, //나열 방향 alignment: WrapAlignment.start, //정렬방식 spacing: 5, //좌우간격 runSpacing: 5, //상하간격 children: <InkWell>[ for(var i = 0; i<categories.length; ++i) ...[ InkWell( child: Container( padding: const EdgeInsets.all(6), decoration: BoxDecoration( color: const Color(0xffdddddd), borderRadius: BorderRadius.circular(6), ), child: Text('#${categories[i].name}'), ), onTap: () async{ print('click ${categories[i].name}'); List<dynamic> _listData = await searchModel.getWordsByCategoryId(categories[i].id); setState(() { wordList.clear(); wordList = _listData.map((dynamic item) => Word.fromJson(item)).toList(); wordList.forEach((element) {print('${element.name}');}); }); }, ), ], ], ); } ), const SizedBox(height: 10), Expanded( child: GridView.builder( itemCount: wordList.length, gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 3, //3열을 만드는 속성 crossAxisSpacing: 2.0, mainAxisSpacing: 2.0, ), itemBuilder: (BuildContext context, int index){ final dic = wordList[index]; return GestureDetector( onTap: (){ print('click ${dic.name}'); }, child: Hero( tag: dic, child: Text(dic.name), ) ); }, ), ), ], ), ), ); } }setState 함수안에 데이터를 업데이트 한후, 출력을 해보면 wordList가 잘 출력되는것까지는 확인했는데 GridView에서는 출력이 안됩니다. 혹시 GridView가 아닌 다른 위젯으로 출력을 해야할까요? 검색을 하려해도 무슨 키워드로 검색을 해야할지 감이 안 잡혀서요. 답변 기다리겠습니다. ^^
-
해결됨처음하는 플러터(Flutter) 기초부터 실전까지 [풀스택 Part4] (쉽고 견고하게 단계별로 다양한 프로젝트까지)
dispose() 관련 질문 있습니다~
바로 만들어보기: 이미지 갤러리 화면 구성하기2강의 12:04~12:22, 해당 코드 기반 질문입니다! Q1. "이 클래스(MyHomePage)가 사라지면" 이라는 설명이 있는데, 앱 종료시 이외에 이 클래스가 사라지는 시점은 언제언제인가요?! Q2. 반대로, 위 클래스의 인스턴스(?)가 생성되는 시점은 홈 화면에 접속할 때마다 인가요?.?
-
해결됨[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
색상정보 입력 테스트 시 id 문제 문의 드립니다ㅜㅜ
[VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: SqliteException(1299): while executing statement, NOT NULL constraint failed: category_colors.id, constraint failed (code 1299)이란 에러가나는데 flutter pub run build_runner build로햇는데도 이런데 어떻게하면될까요?ㅠㅠ
-
해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
로그인버튼을 눌렀을때 refreshToken이 안뜹니다ㅠㅠ
안녕하세요! Dio로 Auth API 요청해보기 강의에서 11분50초쯤 알려주셧듯, 로그인버튼을 클릭했는데[VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: DioError [DioErrorType.other]: SocketException: Connection refused (OS Error: Connection refused, errno = 61), address = 127.0.0.1, port = 64549 이렇게 에러가뜨면서 refreshToken이 안뜨는데 시뮬레이터 IP문제일까요..?
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
자동완성 시 좌측에 같이 뜨는 심볼 의미
위 사진처럼 자동완성 박스가 뜨면, 왼쪽에 심볼의 의미가 궁금합니다.검색 해봤을때 C는 class, E는 enum 이라고 하는데 =의 의미는 무엇인가요??
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
안드로이드 스튜디오 자동정렬
Flutter Hello World 강의에서 강사님이 작성하시는것과 똑같이 괄호 안에서 엔터키를 누르면서 코드를 작성을 했는데 에뮬레이터를 실행하니 모든 코드에 한줄에 자동으로 정렬되는데 한줄에 코드가 정렬되있으니 보기가 너무 힘든데 자동정렬을 없앨 수 있는방법이 있을까요? 그리고 강의에서는 에뮬레이터를 켜놓고 hot restart를 눌러도 에뮬레이터 화면이 내려가지 않는데 저는 에뮬레이터를 켜놓고 안드로이드 스튜디오의 화면을 클릭하면 에뮬레이터가 뒤로가서 번거로운데 이건 어떻게 해결하죠????
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
nRequest Interceptor 작업하기 부분 storage 질문드립니다.
여기서 data.dart에 있는 storage를 사용하지 않고 새로 생성해서 사용하는 이유가 무엇인가요??class CustomIntercepter extends Interceptor { final FlutterSecureStorage storage; CustomIntercepter({required this.storage}); // 1) 요청을 보낼 때 @override void onRequest( RequestOptions options, RequestInterceptorHandler handler) async { print('[REQ] [${options.method}] ${options.uri}'); if (options.headers['accessToken'] == 'true') { options.headers.remove('accessToken'); final token = await storage.read(key: ACCESS_TOKEN_KEY); options.headers.addAll({'authorization': 'Bearer $token'}); } return super.onRequest(options, handler); } // 2) 응답을 받을 때 // 3) 에러가 났을 때 }