inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)

많이들 막히실거라 생각하고 채신문법 공유합니다.

376

슈퍼코더

작성한 질문수 1

3

Create_page.dart

import 'dart:io';

import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

class CreatePage extends StatefulWidget {
  final User user;

  CreatePage(this.user);

  @override
  _CreatePageState createState() => _CreatePageState();
}

class _CreatePageState extends State<CreatePage> {
  final textEditingController = TextEditingController();

  @override
  void dispose() {
    textEditingController.dispose();
    super.dispose();
  }

  File _image;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: _buildAppbar(),
      body: _buildBody(),
      floatingActionButton: FloatingActionButton(
        onPressed: _getImage,
        child: Icon(Icons.add_a_photo),
      ),
    );
  }

  Widget _buildAppbar() {
    return AppBar(
      actions: <Widget>[
        IconButton(
          icon: Icon(Icons.send),
          onPressed: (){
            final firebaseStorageRef = FirebaseStorage.instance
                .ref()
                .child('post')
                .child('${DateTime
                .now()
                .millisecondsSinceEpoch}.png');

            final task = firebaseStorageRef.putFile(
            _image, SettableMetadata(contentType: 'image/png')
            );

            task.then((TaskSnapshot snapshot){
              var downloadUrl=snapshot.ref.getDownloadURL();

              downloadUrl.then((uri){
                var doc = FirebaseFirestore.instance.collection('post').doc();
                doc.set({
                  'id': doc.id,
                  'photoUrl': uri.toString(),
                  'contents': textEditingController.text,
                  'email':widget.user.email,
                  'displayName':widget.user.displayName,
                  'userPhotoUrl':widget.user.photoURL
                });
              });
            }).then((value) => Navigator.pop(context));

          },
        )
      ],
    );
  }

  Widget _buildBody() {
    return SingleChildScrollView(
      child: Column(
        children: <Widget>[
          _image == null ? Text('No Image') : Image.file(_image),
          TextField(
            decoration: InputDecoration(hintText: '내용을 입력하세요'),
            controller: textEditingController,
          )
        ],
      ),
    );
  }

  final picker = ImagePicker();

  Future _getImage() async {
    final pickedFile = await picker.getImage(source: ImageSource.gallery);

    setState(() {
      if (pickedFile != null) {
        _image = File(pickedFile.path);
      } else {
        print('No image selected.');
      }
    });
  }

  //
  // Future<void> _getImage() async {
  //   File image = await ImagePicker.pickImage(
  //       source: ImageSource.gallery
  //   );
  //   setState(() {
  //     _image = image;
  //   });
  // }
}


=========/*pubspec.yaml*===========

  cupertino_icons: ^1.0.1
  image_picker: ^0.6.7+17
  flutter_signin_button: ^0.2.5

  google_sign_in: ^4.0.0

  firebase_auth: ^0.18.4+1
  firebase_core: ^0.5.3
  cloud_firestore: ^0.14.4
  firebase_storage: ^5.2.0



=====* 수정된 문법 *===

fireStore는 임포트 하는 방법은 같으나 
호출방법은 기존
FireStore에서 FirebaseFireStore로 변경되었습니다.


상단 final FirebaseUser user 
auth 사용법은
FirebaseUser user -> User user로 사용하시면 됩니다.

그 외에 document는 doc로 변경되었으며

이미지 피커같은 경우는 제 소스대로 사용하시면 됩니다.

Flutter android ios

답변 2

1

오준석

ios 튕기는 건 image_picker 밖에 없을 것 같은데요. 문서를 토대로 권한 설정도 추가해 주셔야 합니다.

공유 감사합니다.

0

슈퍼코더

혹여나 코드 필요하시면 
https://github.com/supercoder95/instagramCloneOne

보고 참고해주시면 되겠습니다.

ios는 제가 뭘 잘못건드렸는지 앱이 자꾸 팅기는데 공부좀 해서 찾아야할 것 같네요..

과거 ai없을때 듣고 다시 듣는 중인데

1

55

1

40번 수업이 완료가 되지 않아요.

0

62

1

최신버전 firebase_ui_auth 할때 EmailAuthProvider 오류 잡는 방법

0

158

1

애뮬레이터로 main.dart를 실행하면 컴퓨터가 멈춥니다.

0

330

2

혹시 재촬영 계획이 있으신가요?

0

249

1

애뮬레이터 Intel HAXM 다운로드가 안돼요

0

558

2

에뮬레이터 홈화면

0

259

1

종속성 충돌 질문

0

341

1

plugin 중에서 에러 발생시 발생한 코드 위치에 바로 에러 표시해주는 기능 있을까요?

0

426

1

firebase option 오류

0

374

2

alt+enter 가 맥북에서는 option enter로 알고 있는데 단축키가 먹히지 않습니다 ㅜㅜ

0

1460

11

파이어베이스 연결시 갑자기 다른 오류가 발생했어요 ㅠㅠ

0

409

1

Failed assertion: line 246 pos 15: 'items.length >= 2': is not true.

0

1319

1

Firebase로 이메일 로그인 기능 구현

0

355

1

GridView에 데이터가 표시가 안됩니다.

0

298

1

The Android Gradle plugin supports only Kotlin Gradle plugin version 1.5.20 and higher. 해결법을 모르겠습니다

0

6895

4

안드로이드 에뮬레이터 실행오류

1

1010

1

firebase 연동 중 오류 질문

0

468

1

05. AccountPage UI 작성강의 설명문의

0

371

1

firestore에서 List<String>을 받아오고 싶을 때

0

543

1

firebase 이메일 로그인 설정 관련 오류 문의의 건

0

1091

1

기본위젯

0

2731

1

firebase에 upload 에러가 발생했습니다

0

1277

3

디버그 서명 인증서 SHA-1가 구해지지 않습니다.

1

319

1