現場で使える Flutter開発入門の4章を読んで不明点を調べた
の続編
現場で使える Flutter開発入門の5章の不明点を調べた
調べたことを備忘録で記載する
・Dartの構文
・dynamic
動的型付け
https://note.com/hatchoutschool/n/n767701b099b0
・async
awaitが呼ばれるまでは同期メソッドになる。
https://medium.com/@kawanojieee/dart-async-await-394846fb3d2c
・パラメタ付きの関数
void enableFlags({bool bold, bool hidden}) {...}
すると名前付きになる。
>関数を定義する際名前付きパラメタを指定するときはそれらを波括弧で囲んだ{param1, param2, …}を使う:
https://www.cresc.co.jp/tech/java/Google_Dart2/language/functions/functions.html
・Flutterの構文
・WidgetsBinding
呼ぶと低レイヤと通信できる
>Flutter Engineと通信できる様になると言うことが分かりました。
https://qiita.com/kurun_pan/items/04f34a47cc8cee0fe542
・ChangeNotifierとChangeNotifierProvider
Providerとの違い
>ChangeNotifierProvider:データの受け渡しだけでなくデータの更新も行いたい
https://www.flutter-study.dev/create-app/provider
・intl
日付の変換に使う
https://pub.dev/packages/intl
・Uint8List
画像データを扱うときに使用する。
https://www.rm48.net/post/flutter-dart-%E7%94%BB%E5%83%8F%E3%81%A8uint8list%E3%81%AE%E9%96%93%E3%81%AE%E5%A4%89%E6%8F%9B%E6%96%B9%E6%B3%95
・gaplessPlayback
画像の切り替わりで、古い画像を出すかどうか
https://api.flutter.dev/flutter/widgets/Image/gaplessPlayback.html
・shrinkWrap
可変長の場合trueにする。
https://zenn.dev/xxminamixx/articles/38d8695ee0a12a
・InkWell
ripple effect
https://qiita.com/mkosuke/items/e506256515179d0f421b
・ClipRRect
丸角
https://bukiyo-papa.com/cliprrect/
・Provider.ofのlisten
>値の変更に応じた処理(表示更新など)が起こらなくなりますが、そういった処理が不要な箇所(受け取ったモデルのメソッドを使うだけ等)では false にすることで無駄を避けられます。
https://qiita.com/kabochapo/items/a90d8438243c27e2f6d9
・StatefulBuilder
画面の変更を伴うBuilderはこれを使う
https://note.com/hatchoutschool/n/nda33cfa5f2d4
・DecoratedBox
装飾する。
https://api.flutter.dev/flutter/widgets/DecoratedBox-class.html
・TextFormField
テキストフィールド
https://api.flutter.dev/flutter/material/TextFormField-class.html
・TextInputType.multiline
テキストを複数行入力できる。
https://qiita.com/superman9387/items/15757a2c40b7776138b1
・InputDecoration
テキストフィールドを装飾する。
https://api.flutter.dev/flutter/material/InputDecoration-class.html
・VoidCallback
() => print('ボタンが押されました'),
https://qiita.com/toda-axiaworks/items/1ef00343ce3c032c6400
・getImageはdeprecated
#deprecated final _pickedFile = await _picker.getImage( source: ImageSource.gallery, maxWidth: 600, maxHeight: 800); #これが新しい書き方 final _pcikedFile2 = await _picker.pickImage(source: ImageSource.gallery, maxWidth: 600, maxHeight: 800)
・SimpleDialogOption
SimpleDialogの表示内容
https://coglayblog.com/2020/09/03/flutter_simpledialog/
・Firebase系
・StreamBuilder
データが流れてくる
https://qiita.com/sgmryk/items/5b21f05f6ed2cc84e8a9
・AsyncSnapshot
>一番上のこの部分で先程snapshotsで取得したデータをsnapshotに代入しています。
https://qiita.com/koizumiim/items/26bbad2f365ff3f186ef
・FirebaseStorage
FirebaseStorage.instance
https://firebase.flutter.dev/docs/storage/usage/
・エラーの対応
・Automatically assigning platform
[!] Automatically assigning platform iOS
with version 9.0
on target Runner
because no platform was specified. Please specify a platform for this target in your Podfile. See https://guides.cocoapods.org/syntax/podfile.html#platform
.
>その場合はiosディレクトリにあるPodfileの2行目「#platform : ios, ‘9.0’」をアンコメントして「platform : ios, ‘10.0’」とversionを上げて再度iOS Simulatorを実行させます。
https://flutternyumon.com/configuring-firebase-for-ios-app/
・warning: The iOS Simulator deployment target
warning: The iOS Simulator deployment target ‘IPHONEOS_DEPLOYMENT_TARGET’ is set to 8.0, but the range of supported deployment target versions is 9.0 to
>config.build_settings[‘IPHONEOS_DEPLOYMENT_TARGET’] = ‘9.0’
https://qiita.com/temoki/items/46ad22940e819a132435
・’Error.throwWithStackTrace’
flutter upgradeする。
../../../flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore_platform_interface-5.5.0/lib/src/method_channel/method_channel_firestore.dart:112:15: Error: Member not found: ‘Error.throwWithStackTrace’.
https://stackoverflow.com/questions/71251830/why-is-riverpod-failing-even-to-initialize-in-project-method-not-found-error
・minSDKの更新
元のデータは以下に書いてある。
packages/flutter_tools/gradle/flutter.gradle
今風の書き方だと
localProperties.getProperty(‘flutter.minSdkVersion’).toInteger()
して、実際はlocal.propertiesに以下を書く。
flutter.minSdkVersion=21
・[core/no-app] No Firebase App
[core/no-app] No Firebase App ‘[DEFAULT]’ has been created – call Firebase.initializeApp()
以下を実施
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
・flutter StorageException has occurred
ルールを直す。とりあえず全部trueにした。
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if true; } } }