【Flutter】HomeWidgetで使っていい感じに作成してみた（Android版）

![スクリーンショット 2024-12-03 9.43.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/dd859b7b-7c7e-9874-1318-c76f17c988ee.png)


# はじめに
HomeWidgetってなんかあるといいですよね。作ってみたいとは思いつつ、難しそうだなとあまり触っていませんでした。ただ、今回チャレンジをしてみたところ、割とできちゃったので、ご共有しようと思います。


:::note info
注意
今回は、画像を入れるだけなため、シンプルな実装になります。動的な実装をする場合は、別途作業が必要になります⚒️
:::

# 実装するのに必要なPackages

https://pub.dev/packages/home_widget

```
 flutter pub add home_widget
```

```
dependencies:
  home_widget: ^0.7.0
```

# HomeWidgetで使用するファイルとフォルダについて

:::note warn
警告
画像などは、細かく調べていくと端末のサイズによって画像のサイズが必要っぽいので注意してください。僕の場合は、個人開発だからまあいいかと１種類だけの用意にしました🙇

また、あくまでも僕の認識なので、間違いがあるかもしれません。
:::


```
android/app/src/main/AndroidManifest.xml・・・接続に必要な記載
android/app/src/main/res/drawable/・・・プレビューやHomeWidgetに必要な画像
android/app/src/main/res/layout/・・・HomeWidgetの全体のレイアウトなど
android/app/src/main/res/xml/・・・HomeWidgetの中身（画像）の調整
```


# 実装していく

## 必要な画像を用意

![eat_widget.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/67c82a4f-e221-d34a-d7c2-fadfe9aa6509.png)



### layout/widget_eat_layout.xml

```xml:android/app/src/main/res/layout/widget_eat_layout.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFF">

    <ImageView
        android:id="@+id/food_image"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_centerInParent="true"
        android:importantForAccessibility="no"
        android:scaleType="centerCrop"
        android:src="@drawable/eat_widget"
        tools:targetApi="jelly_bean" />
</RelativeLayout>
```

### xml/app_widget_eat_provider.xml

```xml:android/app/src/main/res/xml/app_widget_eat_provider.xml
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:initialLayout="@layout/widget_eat_layout"
    android:minWidth="40dp"
    android:minHeight="40dp"
    android:previewImage="@drawable/eat_widget"
    android:resizeMode="none"
    android:updatePeriodMillis="0"
    android:widgetCategory="home_screen"
    tools:targetApi="jelly_bean_mr1" />
```

## AndroidManifest.xml

```xml: android/app/src/main/AndroidManifest.xml

<service
    android:name="es.antonborri.home_widget.HomeWidgetBackgroundService"
    android:exported="true"
    android:permission="android.permission.BIND_JOB_SERVICE" />
<receiver
    android:name="MyAppWidgetProvider2"
    android:exported="false">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
    android:name="android.appwidget.provider"
    android:resource="@xml/app_widget_eat_provider" />
</receiver>
```

# 完成図

実装してみた感じだと以下の通りになります。そのほかのHomeWidgetや中ぐらいの作り方については別記事で書くとかで共有できたらなと思っております。


<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/b5e68f13-c2b4-2f66-2ac2-40b329b03ed4.png">



こちらが作業していた内容です👇

https://github.com/iseruuuuu/food_gram_app/pull/432/commits/37c502d3daa461c659e531220d659d74d7913da3#diff-63272c98a6330850888e633b43ba4c9decee6431a115e0d2731564838eaa1d1d


# 最後に
MapLibreを使用したアプリを個人で開発しています･:*+.\(( °ω° ))/.:+

![Group 93.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/318bb611-4e87-6c02-6a2c-2c5bb93c392a.png)



https://apps.apple.com/jp/app/foodgram/id6474065183


- 「FoodGram」は、フードシェアアプリとなっており、あなたの好きなレストランの食事をぜひこのアプリで共有していただけると嬉しいです!!

<b>このアプリのセールスポイント
- このアプリだけのレストランマップをユーザー全員で作成できる⭐️
- 自分だけのフードアルバムを構築できる⭐️
- 世界中の人たちの投稿を自由に閲覧できる⭐️