FlutterFlowで編集・削除機能があるbottom sheetを出してみる

ボタン押下時にBottomSheetを表示、Referenceの受け渡しの方法の備忘録

FlutterFlowをいじり始めて1週間くらいの初心者です。
インスタのようなSNSアプリを作っています。
今回はBottomSheetの表示〜ポストの編集画面への遷移、削除ボタンを押下後の振る舞いまでの実装について記事にします。

# 完成画像
![スクリーンショット 2024-01-24 19.47.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76914/886609b9-86db-f0db-e473-9a605feadb53.png)

ポストの詳細画面です。赤丸で囲ってる右上アイコンをタップすると、下から編集と削除があるBottomSheetを表示させます。
BottomSheetはコンポーネントという物で、表示ポストの情報をParameterとして渡す必要があります。
あらかじめFirestoreにポスト保存用のコレクション「contents」を作ってあります。


参考の公式ドキュメント↓
https://docs.flutterflow.io/actions/actions/widget-ui-interactions/bottom-sheet

### 1.表示するためのBottomSheetを作ります。
BottomSheet用のコンポーネントを追加します。

赤丸の1を選択後に2をクリック。
![はじめ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76914/9550594d-3dda-85fa-61a4-9812fe9e5947.jpeg)


NewComponent→BottomSheets の編集と削除があるフォーマットを今回は選びました。
![1−2.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76914/d60b77c2-7ee7-d10c-e184-eb2cff743f18.jpeg)


好きな名前をつけてCreateComponentします。
今回は「BottomSheet」という名前にしました。
![三番目.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76914/815d5247-20e6-f99a-7e30-fdaf0b5f245a.jpeg)


作った「BottomSheet」が表示されています。
![四番目.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76914/5ea468f0-4221-214b-5fd4-f349e31d9891.jpeg)





### 2.作成した「BottomSheet」にParameterを設定する
EditPostタップ → 編集画面
DeletePost → ポストを削除
という挙動にしたいためポスト情報を受け取とる必要があります。

作成したBottomSheetを選択してAddParameterをクリック
![２.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76914/e39a1707-4bb3-7c6b-9b70-358ac8351218.jpeg)


1. ParameterNameに好きな名前をつけます。今回は「contentsRef」としました。
2. TypeはDocumentReferenceを選ぶ。
3. CollectionTypeは受け渡したいコレクションを選ぶ。私は今回は「contents」です。

![２−４.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76914/0edcbf92-59d8-83b9-13c9-9c49131c08a8.jpeg)

ここまで設定できれば一旦BottomSheet側は終わりです。





### 3.ポスト詳細画面のアクションの設定
ボタンにアクションを登録します。

アイコンボタンを選択してAddActionをクリック。
![3−1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76914/b8056ba5-8021-0f5a-dfd3-449a6cbc95da.jpeg)



アクションの種類はOnTapです。
SelectActionで検索できます。検索結果にBottomSheetのShowが出ているのでクリック。
![3−1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76914/f24bf589-85c2-c923-3135-bc073255b1bd.jpeg)


SelectComponentに先ほど作った「BottomSheet」を選ぶ。
下の方にあるPassをクリック。
![3−2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76914/bfc1265a-de2f-6ca7-f287-57f22ada8a62.jpeg)


BottomSheetへ渡すparameterを設定します。
parameterは2で作った物です。
valueはContentsDocumentのReferenceです。
選んだらConfirmします。
![3−3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76914/6d37e41d-5d42-194e-09e0-68d7056059b1.jpeg)

ここまでで、ボタンタップでBottomSheetが表示されるはずです。





### 4.BottomSheetのアクションの設定
表示したBottomSheetで渡されたReferenceを有効にします。

bottomsheetの一番外側のcontainerを選ぶ。
Add Queryをクリック。
![4−1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76914/75a87459-0d8d-5614-f5e3-d8df5d536a51.jpeg)


QueryTypeはDocumentFromReferenceを選ぶ。
自分で作ったポストのコレクションを選ぶ。今回はcontents。
setVariableは2で設定したParameterを選ぶ。今回はcontentsRef。
設定できたらConfirmします。
![4−2.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76914/26174153-6af9-86b2-9d1e-935bda36401d.jpeg)

これで、編集と削除ボタンでポストの情報が使えるようにになりました。




### 5.編集ボタン押下〜編集画面へ遷移
事前に編集画面を追加しておく。今回私は、EditPostという名前です。
EditPost画面にもポスト情報を受け取るためのParameterを設定しておきます。

Editボタンを選び、AddAction→OnTap→NavigateToでEditPost画面を選ぶ。
![4−3.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76914/f2ea95d4-e007-1c3c-7601-0c4fcc6c16b5.jpeg)


画面下のparametersのPathをクリック。
ParameterをcontentsRefにする。(EditPost画面で設定したParameter)
ValueをcontentsRefにする。(BottomSheetで受け取ったParameter)
![スクリーンショット 2024-01-25 11.02.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76914/49637032-a51e-4f6c-6135-331ab4451dbe.png)

EditPost画面へ遷移後にBottomSheetを閉じるため、ActionFlowEditorを開き、NavigateBackを追加する。
これで編集ボタン押下でEditPost画面への遷移は完成です。





### 6.削除ボタン押下の処理
削除ボタンの振る舞いは下記のようにします。
* 削除ボタン押下
    * 削除を確認するアラートダイアログ表示
        * 削除OK → ポストを削除 → home画面へ戻る
        * 削除キャンセル → BttomSheetを閉じる


設定が多いのでActionFlowEditorを開きます。
Deleteボタンを選択してActionFlowEditorをクリックします。
検索でAlertDialogのConfirmDialogを選ぶ。
![6-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76914/c1eb56dc-0eb8-8809-28c6-2b55906e3538.jpeg)


＋ボタンをクリックし、AddConditionalをクリック。
![6−2.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76914/b2d6936e-8442-f967-0bfa-368f93f2ffc1.jpeg)



するとTUREとFALSEができるので
TURE側にOKボタンの処理を書いていきます。
1. BackendCallではFirestoreのポストを削除しています。
2. ShowSnackBarでは削除したことを画面へ表示させます。
3. NavigateToでポストがなくなったのでHomeへ遷移させます。
4. 最後にNavigateBackでTUREとFALSE共通のBottomSheetを閉じる処理です。

下が完成形です。
今回はBackendCallとShowSnackBarの説明だけします。
![スクリーンショット 2024-01-25 23.58.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76914/ba83ec8a-611e-2134-7fd8-3132d7e13625.png)


1. BackendCallの設定方法です。
AddActionして、Firestoreを検索しDeleteDocumentを選択。
![6−3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76914/12ee0bac-d069-1a19-56c8-36cc429ad26d.jpeg)
SelectReferencetoDeleteではcontentsDocumentのReferenceを選びConfirmする。
![スクリーンショット 2024-01-26 0.10.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76914/77dbc21f-1ac9-d81b-8ba0-f4eba51ccc35.png)


2. ShowSnackBarの設定方法です。
AddActionして、検索からShowSnackBarを選ぶ。
![スクリーンショット 2024-01-26 0.20.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76914/82a25972-f442-1422-53e7-a14585bfe9a4.png)

Valueに表示したい文言を入力します。
![スクリーンショット 2024-01-26 0.22.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76914/75e62730-0087-33f2-57ad-c6d3568e3385.png)


Homeへの遷移とNavigateBackの処理は割愛させていただきます。


今回はノーコードの説明だったため、画像の方がわかりやすいかなと思って画像を多用してしまいました。
いかがでしたでしょうか？