Code Monkey home page Code Monkey logo

flutter_liff_scheduler's Introduction

flutter_liff_scheduler

Flutter Web と LIFF を組み合わせてスケジュール共有アプリを作るサンプルプロジェクト。

architecture.drawio.png

開発環境

% fvm flutter --version
Flutter 3.3.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 4f9d92fbbd (2 weeks ago) • 2022-09-06 17:54:53 -0700
Engine • revision 3efdf03e73
Tools • Dart 2.18.0 • DevTools 2.15.0

ローカル環境での実行方法

FVM の導入

brew tap leoafarias/fvm
brew install fvm

FVM で所定のバージョンの Flutter SDK の環境を構築

fvm install

デバッグ実行

flutter run -d web-server --web-port 8080

ngrok のインストール

brew install ngrok

https://dashboard.ngrok.com/ にアクセスしサインアップした後に、認証を行う。

ngrok config add-authtoken <your-auth-token>

ngrok での一時公開(flutter runしているターミナルとは別ターミナルで実行する)

ngrok http 8080
  • ngrokを起動したターミナルで表示されている Forwardinghttps://<ランダム値>.ngrok.io のURLを LINE Developers コンソールから対象の LIFF が紐付いている LINE ログインチャネルのコールバックURLに指定する。
  • 上記の設定で ngrok が払い出した URL 経由で LINEログイン が許可される様になる。

flutter_liff_scheduler's People

Contributors

heyhey1028 avatar kosukesaigusa avatar shinichiarata avatar tokku5552 avatar tsukamoto1783 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

flutter_liff_scheduler's Issues

【Flutter】スケジュールの登録 API を叩けるようにする。

やること

  • 下記の GAS 側の実装の Issue の仕様の POST リクエストを行って、スケジュールを作成できるようにする。HTTP リクエストは http でも dio でも良いが、かんたんなハンズオンを意識してシンプルに実装すると良さそう
  • POST リクエストが済んだあとは 取得 API を叩いて、スケジュール一覧を取得し直す

API のリクエスト・レスポンスの仕様が書かれた Issue

#20

スケジュール登録機能

  • スケジュール登録機能
    • スケジュール追加画面から情報を入力し、追加ボタンを押すとスプレッドシートのレコードにスケジュールが登録される
    • 必要な画面
      • スケジュール追加画面 (top画面からFABをクリックしたら遷移) add_schedule_page.dart

スケジュール更新機能

  • スケジュール更新機能
    • スケジュール編集画面からスプレッドシートに登録したスケジュールを更新することが出来る
    • 優先度低

スケジュール削除機能

  • スケジュール削除機能
    • スケジュール編集画面からスプレッドシートに登録したスケジュールを削除することが出来る
    • 優先度低

【Flutter】liff側のベース実装

  • 荒田さんに対応頂いている部分

やること

  • UIが表示できる
    • トップ画面 (スケジュールをリスト表示)
    • 追加、更新、削除画面

未解決の事項

  • GASとの連携部分

Liffを起動する機能

OAMで自動応答メッセージを設定して、グループに追加したbotの応答メッセージからliffを起動できるようにする。

【Flutter】スケジュールの取得 API を叩いて UI に表示できるようにする。

やること

  • 下記の GAS 側の実装の Issue の仕様の GET リクエストを行って、レスポンスを受け取れるようにする。HTTP リクエストは http でも dio でも良いが、かんたんなハンズオンを意識してシンプルに実装すると良さそう
  • 下記の仕様の Schedule オブジェクトを定義する。freezed や json_serializable を使用しても良いし、かんたんなハンズオンを意識してそうしなくても良いかもしれない。fromJson, toJson を定義して、HTTP の GET の結果を List<Schedule> に方が付いて使えるようにする
  • とりあえず ListView.builderListTile で良いのでそれらを一覧できるようにする

API のリクエスト・レスポンスの仕様が書かれた Issue

#18

Firebase Hosting

  • Firebase Hosting
    • Firebase PJとリポジトリを紐づける
    • デプロイはGitHub Actionsに載せておく

【GAS】スケジュールの取得 API の作成

やること

  • HTTP の GET のエンドポイントを仮の個人のスプレッドシートに作成してデプロイ、URL を明らかにしてクライアントの実装を担当する人がわかるようにする
  • 下記の要件で GET API を実装する

仕様

クエリパラメータで roomId または groupId を送る。

GAS の API でそれらのどちらかを受け取って、それらの undefined ではない方が一致するスプレッドシート行を特定し、それらを下記の schedule オブジェクトのリストとして返す。

リクエスト

### roomId を送る場合
GET /path/to/get/api?roomId={roomId}

### groupId を送る場合
GET /path/to/get/api?roomId={roomId}

レスポンス

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

{
  "schedules": [
    {
     "scheduleId": "uuid または行番号?",
      "title": "スケジュールのタイトル",
      "createdAt": "2022-09-01 00:00:00",
      "dueDateTime": "2022-10-01 00:00:00",
      "isNotified": false
    },
    {
      // ... 省略
    }
  ]
}

スケジュール確認機能

  • スケジュール確認機能
    • スプレッドシートのレコードを読み、カレンダーウィジェットにスケジュールを表示する
    • 必要な画面
      • 恐らくtop画面になる。

Node.12終焉対応

おそらくGitHub Actionsのactions/checkout@v2がnode12使っているっぽいので、v3にmigrateする

【GAS】スケジュールの登録 API の作成

やること

  • HTTP の POST のエンドポイントを仮の個人のスプレッドシートに作成してデプロイ、URL を明らかにしてクライアントの実装を担当する人がわかるようにする
  • 下記の要件で POST API を実装する

仕様

クエリパラメータで roomId または groupId を送る。

GAS の API でそれらのどちらかを受け取って、それらの undefined ではない方が一致するスプレッドシート行を特定し、それらを下記の schedule オブジェクトのリストとして返す。

リクエスト

スケジュールのタイトルと締め切り日時をリクエストボディとして送ってもらう。

"type": "create" としているのは同じ GAS プロジェクトではひとつの POST のエンドポイントしか作れないので、スケジュールの更新や削除のメソッドも時間が許せば実装する可能性があるので、そのときに "type": "update" とか "type": "delete" とかで実装できるようにするため。

### スケジュールの登録
POST /path/to/post/api

{
  "type": "create",
  "schedule": {
    "title": "スケジュールのタイトル",
    "dueDateTime": "2022-10-01 00:00:00"
  }
}

レスポンス

作ったレスポンスが返ってくる。

HTTP/1.1 201 OK
Content-Type: application/json; charset=utf-8

{
  "schedule": {
   "scheduleId": "uuid または行番号?",
    "title": "スケジュールのタイトル",
    "createdAt": "2022-09-01 00:00:00",
    "dueDateTime": "2022-10-01 00:00:00",
    "isNotified": false
  }
}

【GAS】スケジュール通知機能

やること

  • スケジュール通知機能の実装
    • GASのイベントトリガー機能で指定した日時にbotが追加されたLINE グループにスケジュールを通知する
    • roomId or groupIdでpushMessageをつかってメッセージを送信する。
    • 一旦メッセージの文章や形式、チャネルシークレットの取得方法などはおまかせ

仕様

  • 現状でのレコードのイメージ
    スクリーンショット 2022-09-24 22 30 52

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.