FlutterFlowを使用したスマホアプリでの画像一覧から詳細画面への遷移方法【Subcollectionのリストを使って】

# FlutterFlowを用いた画像一覧から詳細画面への遷移の実装方法
本記事では、FlutterFlowを使用してスマホアプリ内で画像一覧から特定の画像をタップした際に詳細画面を表示する機能の実装方法について説明します。特に、FirebaseのSubcollectionを利用せずにデータを扱う方法に焦点を当てています。この情報は、インターネット上ではあまり見かけないため、ここに詳しくまとめました。

# 概要
ユーザーがアプリ内の画像一覧から画像を選択すると、その画像に関連する詳細情報が表示される機能について解説します。データベースからSubcollectionのリスト形式でデータを取り込み、選択された画像に応じて詳細画面に遷移します。

FlutterFlowの使用経験は1ヶ月程度ですので、誤りがある場合は指摘をお願いします。

## 実例
### アプリケーションの事例
本アプリケーションでは、聖地巡礼の作品が一覧で表示されており、ユーザーが作品を選択すると、その作品の関連する場所が複数表示されます。以下は、その動作を示すGIFです。

![Videotogif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/6ed20927-0b26-211b-26a7-b5169a396120.gif)

## データベース構造
### データベースは次のような構造をイメージしています。

- 作品のメイン写真
     - 各作品の場所とその場所の写真
    - 各作品の場所とその場所の写真

# 実装方法
記事の本文では、具体的な実装手順やコードスニペットを提供し、読者がこの機能を自分のプロジェクトに組み込めるようにします。

## Pageを追加します。
適当なものを選びます。今回はList13を選びました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/da6b8162-da2f-ef1c-90ac-c9eaa89547bc.png)

扱いにくいので編集します。
List View以下をコピーします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/ed649736-7b07-5118-a52f-ec5410ac58a4.png)

Tabを消してListViewをペーストします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/e984931f-049f-5dbc-b3c7-d198f301acd9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/359b94ce-2de0-e457-07b2-03e87f5ae1a8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/25a1ad05-5672-0f6b-b647-84e973c53a73.png)

Locationページを追加しました。
GoogleMapを追加しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/f67eb844-a1bb-6d97-8490-f5a131a25972.png)


## データベース作成
productionテーブルを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/b62e95c3-a5f6-9de7-092a-fe66eba27929.png)

同様にlocationテーブルを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/a0711254-b785-8a91-b594-fa05ee052a42.png)

FlutterFlowはこうやって半自動でデータベースをつくれるのがいいですね。
課金するとAIを使ってデータベースを作成できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/dcd4065b-29e8-518e-2a35-cba76bd33f2b.png)

### Location

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/0d35bb76-b8e4-d3a5-a940-737e4e4a273f.png)
### Production

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/bf7a698b-e8ea-1544-a1a9-bba32c83c5d4.png)

### 仮のデータを入れます。
**manage Content**を押します。
仮のデータを入れていきましょう。
もし、「Could not create an account as firebase@flutterflow.io to your Firebase project. Make sure "Email Sign-In" is turned on for your Firebase project, and try again.」エラーが出た場合はこちらの記事をご覧下さい。

https://qiita.com/gidaikigyoubu/items/cee5622c4e5ccd5b9ddd

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/e3ad86a5-f7a5-144b-91b4-5fe0eb8b132f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/842a264e-6891-e82f-7339-f6e70138766a.png)

production で作ったカラムのidをコピーしておきましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/9b144236-96de-bcba-1dfd-4eddb6fb40e8.png)

次はLocationの仮のデータを入れましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/90e367d0-1f53-078d-7f6c-a3dc1df5016f.png)

先程のコピーしたidを**owner**にペーストしましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/752038ee-77e3-84db-eef4-6398e0c0baf2.png)

次は**Location**のidを**Production**にペーストします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/edd4c7b9-04e4-77af-2096-ae8a68ffb793.png)

## 遷移先での設定その①
遷移先で**Page Parameters**を押します。
（右上のプラスボタンです。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/9d8ae125-b0a1-98a8-8a65-033c3474287d.png)

「**Add Parameter**」ボタンを押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/59b6ade2-7656-0069-0eee-55000c916909.png)

以下の写真のように設定します。
（それぞれ名前「適当」、Typeは「**RecordReference**」、Collection Typeは「**Location**」選択します。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/03249b80-2cbf-6218-cc95-e5b96f143afa.png)

そのまま、ページ全体に**Add Query**を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/0c8add2e-2a7c-11b2-3c64-51dbf96cbaca.png)

## 遷移先での設定その②
以下の写真のように設定してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/3040f378-9bc8-f129-516b-29e1adb8ede4.png)

## 遷移元での設定その①
遷移元に移動し**List View**を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/8afdf247-a2ed-82b0-6b95-57dd5f8d0ae9.png)

**List View**で**Add Query**します。
（設定は先程とほぼ同じです。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/7fbe2e6d-7ca5-7d3f-ad1a-00f2609285eb.png)
以下のような確認画面が出ると思いますが、**Confirm**でOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/77e3abb0-2d2c-bd9d-c071-d183629d882f.png)

## 遷移元での設定その②
画面遷移の設定をします。
**List View**で繰り返し表示する**Contalner**を選択して

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/1a9bf20c-e860-3150-de6a-7da284cbf7df.png)

**Actions**タブを押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/ccb9066e-0bf3-df0a-688a-511a32a14dd7.png)

**Add Action**を押し
以下のように**Navigate To** を押し画面遷移先の「**Location**」を押して設定してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/48dfcfba-7e36-d7d0-7b04-849f2b9dc588.png)

次は**Pass**を設定します。
**Pass**を押してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/1ccbe568-bfa3-fce3-29d6-5a46ca5e4c9d.png)

すると以下のようになると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/c401f97e-01c0-988d-f1f4-34aa50d5ace2.png)

次は**Value**を設定します。
Valueを押し、Production Documentをおし、locations (List <location ref>)で設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/82141716-dfd4-1a3b-0d8b-355efdd6e537.png)

すると以下のようになるので

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/f9577d9b-f2e9-829b-3801-3c3fb55933f0.png)

List index OptionsをSpecific Indexを押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/680640a9-e309-2d84-70ad-f19b6a13f346.png)

次に「また」**Value**を押します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/8880874f-4c0e-0c30-e052-63e5e99151c2.png)

Production Documentの**Index In List**を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/f0b4618a-1dac-11fa-a8f2-f2d436c784cf.png)

以下のようになりましたか？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/82ca8e46-b7c6-b2d9-5458-3c3871bee666.png)

## 遷移先での設定その③
遷移先に戻りましてGoogle Mapの設定をします。
Google Mapを選択して
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/c01d56f3-4c31-b8bf-7ec7-76078d04b3b5.png)

Num Markers をMultipleにMarker TypeをDocumentに設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/5c19dee8-ac93-fb8f-4b17-dc9da78f7889.png)

Marker Documentsを設定します。
「Page Parameters」ではなく「locarion Documents」の「Documents（List<location>）」に設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/f224d638-2564-0c09-47f2-22b06e6f86b3.png)

以下の写真のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/40b245a6-0a25-57c1-b3b8-d50979f33779.png)

# テスト
クリックすると

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/b43446b2-df77-3a80-3e29-5bee1464c564.png)

「あれ？」
ってそうかInitial Location (lat, lng）をデフォルトだとブリッジタウンになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/dabc3ef7-ff33-2873-c8e5-485d2ec62bfd.png)

岐阜に移動するとちゃんと2つ設定されていますね！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662209/227189bb-b7a3-d2f9-c313-24cd0792df05.png)

今回はここまでです。最後までご覧いただきましてありがとうございます。