質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

1299閲覧

Flutterで一度呼び出したAPIが再呼び出しされない

Imamuu.is

総合スコア13

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2021/08/17 14:12

Flutter webで自前のDjangoサーバーのAPIから情報を取得する処理を実装しようとしていて、一度目の読み込みは上手くいった。

ただ、同じAPIから最新の情報を取得しようとして再度APIを叩こうとしても再度APIの呼び出しがされていない。

ブラウザ側なのか、Flutter側なのかで、一度叩いたAPIの情報はキャッシュしてあって再呼出しないような仕組みになっていると思われるのですが、これの解消方法がわかる方がいれば教えてください。

Flutter
デバック環境:Chrome
サーバー:localhost / Django

Widgetの該当部分のコード

TextButton( onPressed: () async { data = joinedselfCall();//ここのAPIが呼び出されない selected = 'joined'; setState(() {}); }, //ボタンが押されたら、dataを更新して、futurebuilderを再構築 child: Text( '参加済み', ), )),

該当APIの呼び出しに関わる関数の定義部分

Future<dynamic> joinedselfCall() => ApiManager.instance.makeApiCall( callName: 'joined', apiDomain: mainDomain, apiEndpoint: 'api/v1/joinedself/', callType: ApiCallType.GET, headers: { 'token': jwt, }, params: {}, returnResponse: true, );

APIの共通処理部分(ここから先は自分で書いていないのが、少なくとも呼び出し上はちゃんと動作している)

Future<dynamic> makeApiCall( {String callName, String apiDomain, String apiEndpoint, ApiCallType callType, Map<String, dynamic> headers = const {}, Map<String, dynamic> params = const {}, bool returnResponse}) async { final callRecord = ApiCallRecord(callName, apiDomain, apiEndpoint, headers, params); // Modify for your specific needs if this differs from your API. if (_accessToken != null) { headers[HttpHeaders.authorizationHeader] = 'Token $_accessToken'; } // If we've already made this exact call before, return the cached result. if (_apiCache.containsKey(callRecord)) { return _apiCache[callRecord]; } var result; switch (callType) { case ApiCallType.GET: result = await getRequest( apiDomain, apiEndpoint, headers, params, returnResponse); break; case ApiCallType.POST: result = await postRequest( apiDomain, apiEndpoint, headers, params, returnResponse); break; } if (result != null) { _apiCache[callRecord] = result; } return result; } }
static Future<dynamic> getRequest( String apiDomain, String endpoint, Map<String, dynamic> headers, Map<String, dynamic> params, bool returnResponse) async { //httpsに変更 var uri; if (params.isNotEmpty) { uri = Uri.http(apiDomain, endpoint, toStringMap(params)); } if (params.isEmpty) { uri = Uri.http(apiDomain, endpoint); } print('sendrequest'); final response = await http.get(uri, headers: toStringMap(headers)); print('get!'); return returnResponse ? json.decode(response.body) : null; }

最終的なhttpの処理は以下のパッケージに依存
'package:http/http.dart'

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

よく見たら、apimanagerという関数内にキャッシュがあると呼び出さないようにする処理がありました。

投稿2021/08/18 03:10

Imamuu.is

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問