66,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
google 계정 signOut이 제대로 되지 않습니다.
질문들을 읽어보니까 아래 내용이 없어서 그렇다고 하셨는데, 저는 아래와 같이 했는데도 진행이 안되네요.. _handleSignIn().then((user) { Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => TabPage(user)));
- 미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
18분 38초에서 login_page에서
print 부분에서 Navogator로 코드가 바뀌는데 영상에서는 생략된듯 합니다.아래와 같이 수정하시면 될 것 같습니다.SignInButton( Buttons.Google, onPressed: () { _handleSignIn().then((user) { Navigator.pushReplacement(context, MaterialPageRoute(builder: (context)=> TabPage(user))); });
- Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
bottom navigation 을 프로그램을 통해 이동하고자 합니다.
삭제된 글입니다
- 해결됨Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
정말 도움되는 강의입니다.. 그런데 firebase iOS 설정 중
Android Manifest 에서 가져온 패키지명으로는 iOS 번들아이디 입력이 안되는데 어떤 오류가 있는건가요?
- 미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
xcode를 실행한 후에 어떤 메뉴를 클릭해야 하나요?
영상에서 xcode 실행 후 스텝이 안 나와 있네요.. plist 를 다운받고 아무 것도 못하고 있는데 간단히 설명해 주실 수 있을까요? 감사합니다.
- 미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
예제 코드 제공
좋은 강의 잘 보고 있습니다. 혹시 예제 코드를 공개하실 계획은 없으신가요? IDE의 자동완성이 좋긴하지만 dart라는 언어의 장벽도 있고, flutter도 새로운 프레임워크라서 다른 분들도 코드작성에 불편함이 있으실텐데요. 인스타그램 앱이라도 코드가 공개되었으면 합니다.
- 미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
오류
카메라 버튼을 누르면 아무것도 안뜨네요ㅠㅠ Unhandled Exception: MissingPluginException(No implementation found for method pickImage on channel plugins.flutter.io/image_picker)
- 미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
구글 서비스 제이슨 파일 문제
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection) 오류가 납니다. 스텍플로우를 찾아보면 4.2.0의 고질적인 문제인것 같은데 어떻게 해결하셨나요?
- 해결됨Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
구글 로그인 에러가 납니다.
강사님의 타이핑 치시는대로랑 https://pub.dev/packages/firebase_auth#-readme-tab- 공식 라이브러리 대로 둘 다 해봤는데 아래와 같이 오류가 납니다. E/flutter (20218): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 12500: , null) E/flutter (20218): #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:564:7) E/flutter (20218): #1 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:302:33) E/flutter (20218): <asynchronous suspension> E/flutter (20218): #2 GoogleSignIn._callMethod (package:google_sign_in/google_sign_in.dart:226:58) E/flutter (20218): <asynchronous suspension> E/flutter (20218): #3 GoogleSignIn._addMethodCall (package:google_sign_in/google_sign_in.dart:268:20) E/flutter (20218): #4 GoogleSignIn.signIn (package:google_sign_in/google_sign_in.dart:339:48) E/flutter (20218): #5 LoginPage._handleSignIn (package:instagram_clone/login_page.dart:43:64) E/flutter (20218): <asynchronous suspension> E/flutter (20218): #6 LoginPage.build.<anonymous closure> (package:instagram_clone/login_page.dart:28:19) E/flutter (20218): #7 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:511:14) E/flutter (20218): #8 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:566:30) E/flutter (20218): #9 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:166:24) E/flutter (20218): #10 TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:240:9) E/flutter (20218): #11 TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:177:9) E/flutter (20218): #12 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:436:9) E/flutter (20218): #13 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:73:12) E/flutter (20218): #14 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:11) E/flutter (20218): #15 _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:221:19) E/flutter (20218): #16 _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:199:22) E/flutter (20218): #17 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:156:7) E/flutter (20218): #18 _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:102:7) E/flutter (20218): #19 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:86:7) E/flutter (20218): #20 _rootRunUnary (dart:async/zone.dart:1136:13) E/flutter (20218): #21 _CustomZone.runUnary (dart:async/zone.dart:1029:19) E/flutter (20218): #22 _CustomZone.runUnaryGuarded (dart:async/zone.dart:931:7) E/flutter (20218): #23 _invoke1 (dart:ui/hooks.dart:233:10) E/flutter (20218): #24 _dispatchPointerDataPacket (dart:ui/hooks.dart:154:5) E/flutter (20218): 구글링 해봐도 뾰족한 수가 없어서 질문으로 남깁니다.
- 미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
버튼 클릭시 무응답일 경우
onPressed: () => _changeMessage() ), 반드시 함수표시 해줄것..
- 미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
SignOut을 누르면 다시 로그인 페이지로 진행이 되지 ㅇ낳습니다.
SignOut을 누르면 로그인 페이지로 포워딩 되지 않습니다.될때가 있고 안될때가 있어요.강의에 보여주신 것처럼 될 때가 있고 되지 않을 때가 있습니다.
- 미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
Google 계정 SignOut이제대로 안되는 것 같습니다.
account_page.dart에서 onPressed안에 강좌대로 FirebaseAuth.instance.signOut();과 _googleSignIn.signOut();를 추가하였는데 강좌처럼 root_page.dart로 돌아가서 StreamBuilder를 거치지 않습니다. Route route = MaterialPageRoute(builder: (context) => RootPage());Navigator.pushReplacement(context, route); 이 두줄을 추가해서 강제로 root_page.dart로 가게 해놨는데 찜찜하네요.. 뭐가 문제인 걸까요 root_page.dartclass RootPage extends StatelessWidget {@overrideWidget build(BuildContext context) {return StreamBuilder(stream: FirebaseAuth.instance.onAuthStateChanged,builder: (BuildContext context, AsyncSnapshot snapshot) {if (snapshot.hasData) {return TabPage(snapshot.data);} else {return LoginPage();}},);}}account_page.dartWidget _buildAppBar() {return AppBar(actions: [IconButton(icon: Icon(Icons.exit_to_app),onPressed: () {FirebaseAuth.instance.signOut();_googleSignIn.signOut();},)]);}
- 미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
에러가 나서 진행이 안됩니다 ㅠㅠ
안녕하세요? Flutter 강의 잘 듣고 있습니다.프로그래밍을 접한지 얼마 안된 사람인데요...보고 따라하는 중에 한 곳에서 정체되어 더 이상 진행이 안 됩니다.고민하다가 쪽지를 드립니다.firebase google 로그인 연동하는 단계에서 오류가 났습니다.일단 실행하면 LoginPage가 에뮬레이터에 뜨고 logcat에는2019-03-02 22:04:54.161 5054-5082/com.blome.binstagramflutter E/FA: Failed to load metadata: Metadata bundle is null2019-03-02 22:04:54.164 5054-5082/com.blome.binstagramflutter E/FA: Failed to load metadata: Metadata bundle is null2019-03-02 22:04:54.199 5054-5082/com.blome.binstagramflutter E/FA: Failed to load metadata: Metadata bundle is null2019-03-02 22:04:54.200 5054-5082/com.blome.binstagramflutter E/FA: Failed to load metadata: Metadata bundle is null2019-03-02 22:04:54.209 5054-5082/com.blome.binstagramflutter E/FA: App is missing ACCESS_NETWORK_STATE permission2019-03-02 22:04:54.210 5054-5082/com.blome.binstagramflutter E/FA: Failed to load metadata: Metadata bundle is null2019-03-02 22:04:54.214 5054-5082/com.blome.binstagramflutter E/FA: AppMeasurementReceiver not registered/enabled2019-03-02 22:04:54.220 5054-5082/com.blome.binstagramflutter E/FA: AppMeasurementService not registered/enabled2019-03-02 22:04:54.220 5054-5082/com.blome.binstagramflutter E/FA: Uploading is not possible. App measurement disabled2019-03-02 22:04:54.226 5054-5082/com.blome.binstagramflutter E/FA: Failed to load metadata: Metadata bundle is null2019-03-02 22:04:54.230 5054-5082/com.blome.binstagramflutter E/FA: Failed to load metadata: Metadata bundle is null2019-03-02 22:04:54.250 5054-5082/com.blome.binstagramflutter E/FA: Task exception on worker thread: java.lang.IllegalStateException: A required meta-data tag in your app's AndroidManifest.xml does not exist. You must have the following declaration within the element: <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />: com.google.android.gms.measurement.internal.zzfx.zzs(Unknown Source:593)이런 에러 메시지가 뜨네요.구글로그인 버튼을 누르면 앱이 종료되고2019-03-02 22:09:24.125 5054-5054/com.blome.binstagramflutter E/MethodChannel#plugins.flutter.io/google_sign_in: Failed to handle method calljava.lang.IllegalStateException: A required meta-data tag in your app's AndroidManifest.xml does not exist. You must have the following declaration within the element: <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />at com.google.android.gms.common.GooglePlayServicesUtilLight.isGooglePlayServicesAvailable(Unknown Source:17)at com.google.android.gms.common.GoogleApiAvailabilityLight.isGooglePlayServicesAvailable(Unknown Source:5)at com.google.android.gms.common.GoogleApiAvailability.isGooglePlayServicesAvailable(Unknown Source:94)at com.google.android.gms.auth.api.signin.GoogleSignInClient.zze(Unknown Source:9)at com.google.android.gms.auth.api.signin.GoogleSignInClient.getSignInIntent(Unknown Source:18)at io.flutter.plugins.googlesignin.GoogleSignInPlugin$Delegate.signIn(GoogleSignInPlugin.java:291)at io.flutter.plugins.googlesignin.GoogleSignInPlugin.onMethodCall(GoogleSignInPlugin.java:77)at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:200)at io.flutter.view.FlutterNativeView.handlePlatformMessage(FlutterNativeView.java:163)at android.os.MessageQueue.nativePollOnce(Native Method)at android.os.MessageQueue.next(MessageQueue.java:326)at android.os.Looper.loop(Looper.java:160)at android.app.ActivityThread.main(ActivityThread.java:6669)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)2019-03-02 22:09:24.149 5054-5240/com.blome.binstagramflutter E/AndroidRuntime: FATAL EXCEPTION: GoogleApiHandlerProcess: com.blome.binstagramflutter, PID: 5054java.lang.IllegalStateException: A required meta-data tag in your app's AndroidManifest.xml does not exist. You must have the following declaration within the element: <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />at com.google.android.gms.common.GooglePlayServicesUtilLight.isGooglePlayServicesAvailable(Unknown Source:17)at com.google.android.gms.common.GoogleApiAvailabilityLight.isGooglePlayServicesAvailable(Unknown Source:5)at com.google.android.gms.common.GoogleApiAvailability.isGooglePlayServicesAvailable(Unknown Source:94)at com.google.android.gms.common.internal.GoogleApiAvailabilityCache.getClientAvailability(Unknown Source:23)at com.google.android.gms.common.api.internal.GoogleApiManager$zaa.connect(Unknown Source:216)at com.google.android.gms.common.api.internal.GoogleApiManager.zab(Unknown Source:47)at com.google.android.gms.common.api.internal.GoogleApiManager.handleMessage(Unknown Source:173)at android.os.Handler.dispatchMessage(Handler.java:102)at android.os.Looper.loop(Looper.java:193)at android.os.HandlerThread.run(HandlerThread.java:65)--------- beginning of system2019-03-02 22:09:24.160 5054-5072/com.blome.binstagramflutter E/flutter: [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception:NoSuchMethodError: The getter 'authentication' was called on null.Receiver: nullTried calling: authentication0 Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:50:5)#1 LoginPage._handleSignIn (package:binstagram_flutter/login_page.dart:52:62)<asynchronous suspension>#2 LoginPage.build.<anonymous closure> (package:binstagram_flutter/login_page.dart:26:17)#3 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14)#4 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:562:30)#5 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)#6 TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)#7 TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:175:7)#8 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:315:9)#9 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:73:12)#10 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:11)#11 _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:180:19)#12 _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:158:22)#13 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:138:7)#14 _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:101:7)#15 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:85:7)#16 _invoke1 (dart:ui/hooks.dart:168:13)#17 _dispatchPointerDataPacket (dart:ui/hooks.dart:122:5)이렇게 뜹니다..--------------------------------------------- -----------------------------------------------------apply plugin: 'com.android.application'apply plugin: 'kotlin-android'apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"apply plugin: 'com.google.gms.google-services'android {compileSdkVersion 28sourceSets { main.java.srcDirs += 'src/main/kotlin'}lintOptions { disable 'InvalidPackage'}defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.blome.binstagramflutter" minSdkVersion 21 targetSdkVersion 28 multiDexEnabled true versionCode flutterVersionCode.toInteger() versionName flutterVersionName testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}buildTypes { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. signingConfig signingConfigs.debug }}}flutter {source '../..'}dependencies {implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"testImplementation 'junit:junit:4.12'androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'implementation 'com.google.firebase:firebase-core:16.0.7'}--------------------------------------------- --------------------------------------------------buildscript {ext.kotlin_version = '1.3.21'repositories {google()jcenter()}dependencies { classpath 'com.android.tools.build:gradle:3.3.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.gms:google-services:4.2.0'}}allprojects {repositories {google()jcenter()}}rootProject.buildDir = '../build'subprojects {project.buildDir = "${rootProject.buildDir}/${project.name}"}subprojects {project.evaluationDependsOn(':app')}task clean(type: Delete) {delete rootProject.buildDir}----------------------------------------- ----------------------------------------------org.gradle.jvmargs=-Xmx1536Mandroid.useAndroidX=trueandroid.enableJetifier=true----------------------------------------------- < 매니페스트 > ---------------------------------------------------<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.blome.binstagramflutter"><!-- The INTERNET permission is required for development. Specifically, flutter needs it to communicate with the running application to allow setting breakpoints, to provide hot reload, etc.--><uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><!-- io.flutter.app.FlutterApplication is an android.app.Application that calls FlutterMain.startInitialization(this); in its onCreate method. In most cases you can leave this as-is, but you if you want to provide additional functionality it is fine to subclass or reimplement FlutterApplication and put your custom class here. --><application android:name="io.flutter.app.FlutterApplication" android:label="binstagram_flutter" android:icon="@mipmap/ic_launcher"> <activity android:name=".MainActivity" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> <!-- This keeps the window background of the activity showing until Flutter renders its first frame. It can be removed if there is no splash screen (such as the default splash screen defined in @style/LaunchTheme). --> <meta-data android:name="io.flutter.app.android.SplashScreenUntilFirstFrame" android:value="true" /> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity></application>뭐가 잘못된걸까요?
- 미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
이미지목록
플러터 프로젝트 어느곳에 이미지들을 넣어놔야 에뮬레이터 앨범에서 인식하나요
- 미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
안드로이드 호환
웹은 보통 인터넷 익스플로러 10까지는 호환을 맞춰야한다하는 기준이 있는데안드로이드 sdk 버전도 보통 몇까지는 맞춰야한다하는 기준이 있나요?
- 미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
플러터 중급강의 계획
1) 혹시 플러터 중급강의도 오픈할 예정이신가요? 오픈할 예정이시라면 언제쯤 강의를 볼 수 있을가요?2) 플러터 중급강의를 진행하시면 꼭 다룰거다하는 핵심 내용을 알 수 있을가요3) 초급강의를 다 듣고 나서는 플러터 공식문서만을 보면서 실무에 사용해야할가요? 아니면 추천해주시는 좋은 참고자료나 강의가 있을가요
- 미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
영상이 잘못된거 같습니다.
StatelessWidget 영상인데 StatefulWidget 영상이 나오네요
- 미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
레이아웃 에디터는 지원하지 않나요?
1.android 의 경우는 layout editor 를 지원하는데 플러터는 그러한 것이 없나요? xml 같은 언어로 UI 를 그리면서 오는 장점이 UI와 비즈니스로직의 분리라고 생각되는데요 그러면 Flutter 는 코드로 뷰를 그리는 한가지 방법만 존재한다면 복잡한 UI와 비즈니스 로직의 경우 어떻게 분리해서 처리하시나요? 제안하는 아키텍처가 있는지 궁금합니다. 기존에 안드로이드, 아이폰 네이티브 앱 개발에 있어서 MVC 구조가 UI 와 비즈니스 로직이 혼재되어 유지보수가 어렵다는 문제가 있었습니다... 그 전처를 플러터도 다시 밟는 것인지 궁금하네요