Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Flutter製チャットアプリを支える技術 / Technologies that support a Flutter chat application

Flutter製チャットアプリを支える技術 / Technologies that support a Flutter chat application

# Flutter Meetup Osaka #2で発表した資料です。
https://flutter-jp.connpass.com/event/159013/

# Flutter製チャットアプリを支える技術 on Qiita
https://qiita.com/kwmt@github/items/2e81b46d62beb091d18b

# Flutter chat application on GitHub
https://github.com/kwmt/flutter-inconne

# Clean Architectureに関して
https://speakerdeck.com/yasi/flutter-development-as-usual

Yasutaka Kawamoto

February 28, 2020
Tweet

More Decks by Yasutaka Kawamoto

Other Decks in Programming

Transcript

  1. • Տຊ ହ޹(͔Θ΋ͱ ΍͔ͨ͢) • ॴଐɿגࣜձࣾ tech vein 
 AndroidɺiOSΞϓϦΤϯδχΞ

    • kwmt • @kwmt27 • Flutter Meetup Osaka #1(2018/06)͔Β
 FlutterΛ৮Γͩͨ͠ • ࣗݾ঺հ ʮॳग़ɿٕज़ධ࿦ࣾץʰιϑτ΢ΣΞσβΠϯ2019೥4݄߸ʱʯ
  2. • Google is able to guarantee a high quality camera

    performance • Automated CameraX test lab • Populated with devices from various manufactures • Test hundreds of devices • Various test types • Functional, integration, end-to-end use case, performance, etc. ݄͝ͱͷ͍͍Ͷ਺ ※2020/02/27ݱࡏ
  3. • Google is able to guarantee a high quality camera

    performance • Automated CameraX test lab • Populated with devices from various manufactures • Test hundreds of devices • Various test types • Functional, integration, end-to-end use case, performance, etc. ݄͝ͱͷ͍͍Ͷ਺ ※2020/02/27ݱࡏ
  4. • νϟοτΞϓϦͷػೳ • ձһొ࿥ɾϩάΠϯ • νϟοτϧʔϜʢҎԼɺϧʔϜʣ࡞੒Ͱ͖Δ • ϧʔϜͰνϟοτ(ςΩετɺը૾ͷૹ৴)͕Ͱ͖Δ • ϧʔϜҰཡΛݟΔ͜ͱ͕Ͱ͖Δ

    • طଘͷϧʔϜʹϢʔβʔ͕ࢀՃͰ͖Δ • ࣗ෼ͷϓϩϑΟʔϧΛݟΔ͜ͱ͕Ͱ͖Δ • ΞϓϦ಺՝ۚͰఆظߪಡͰ͖Δ • ͳͲ… • ։ൃऀͷͨΊͷػೳ • Analytics • Crashlytics • AdMob ͜ͷهࣄͰॻ͍ͨͷ͸
  5. ϦεφʔΛ࣮૷ TextFormField( controller: _textEditingController,
 … ), _textEditingController = TextEditingController(); _textEditingController.addListener(()

    { // TextFormFieldʹมߋ͕͋Ε͹ݺ͹ΕΔɻ setState(() { _isEmpty = _textEditingController.text.isEmpty; }); });
  6. ϝοηʔδϦετʹϦΞϧλΠϜʹ൓ө _firestore .collection(“rooms") .document(room.id) .collection("messages") .orderBy("created_at", descending: true) .snapshots() .listen((querySnapshot)

    { // σʔλ͕มߋ͞Εͨͱ͖ɺ͜͜ʹ௨஌͕͘Δɻ // querySnapShot.documentsͷ֤documentͷdataͰɺ // อଘͨ͠σʔλΛऔಘͰ͖Δɻ }
  7. ը૾Ξοϓϩʔυͷίʔυྫ var snapshot = await _storage .ref() .child('${timestamp}_${basename(file.path)}') .putFile( file,

    StorageMetadata( contentType: "image/jpeg", )) .onComplete; if (snapshot.error == null) { var url = await snapshot.ref.getDownloadURL(); // FirestoreʹurlΛૹ৴ }
  8. ը૾Ξοϓϩʔυͷίʔυྫ var snapshot = await _storage .ref() .child('${timestamp}_${basename(file.path)}') .putFile( file,

    StorageMetadata( contentType: "image/jpeg", )) .onComplete; if (snapshot.error == null) { var url = await snapshot.ref.getDownloadURL(); // FirestoreʹurlΛૹ৴ }