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

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

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

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

Q&A

0回答

1365閲覧

DioパッケージのCancelTokenのcancel()を実行してもAPI通信が中断されない

massanmesu

総合スコア36

Flutter

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

0グッド

0クリップ

投稿2021/11/12 08:40

編集2021/11/12 22:28

前提・実現したいこと

2種類のAPI通信をFutureProvider.autoDisposeに書いています。

final getLibraryProvider = FutureProvider.autoDispose<List<ShowLibrary>>((ref) async { final _isbn = ref.watch(isbnProvider); // リクエストのクエリ用のデータ final _cancelToken = CancelToken(); // キャンセルトークン ref.onDispose(_cancelToken.cancel); // 破棄されたタイミングでキャンセル実行 final _repo = GetShowLibraryRepo(ref.read, _isbn, _cancelToken); // 処理が書いてあるレポジトリ await _repo.getLocation(); // リクエストのクエリ用のデータ await _repo.getLibFromPosition(); // 通信1 await _repo.getCompletedLoadHasBookData(); // 通信2 final _result = await _repo.getShowLibrary(); // レスポンスをモデル化 ref.maintainState = true; return _result; });

画面遷移したら実行され、popしたら処理を中断する、という動作を期待しています。
前の画面のTextButtononPressで画面遷移と同時に_isbnの値が更新され、それを検知し以降の処理を実行する狙いです。
一つのトークンで全ての処理が中断される、という認識です。

発生している問題

popしてもキャンセルされず処理が続いてしまいます。onDispose内の処理は実行されるのにキャンセルがされない状況です(print()で出力した文字列は確認できました)。

試したこと

・レポジトリではなくFutureProvider.autoDispose`内に直接処理を書いて実行→変化なし

・レポジトリにキャンセルされたかどうかを表すisCanceledというbool値を入れ、通信2に入る前にtrueならばnullを返す。⇨ キャンセルされたら必ずnullが入るのが個人的に嫌なのと、あえて複雑なやり方をしている気がするためやめました。

注意点

レポジトリ内のコードが大量にあるため混乱を招くと思い、書いておりません。
コメントいただければ追記いたします。

補足情報(FW/ツールのバージョンなど)

[✓] Flutter (Channel master, 2.6.0-12.0.pre.522, on macOS 11.6 20G165 darwin-x64, locale ja-JP) • Flutter version 2.6.0-12.0.pre.522 at /Users/username/flutter_dev/flutter • Upstream repository https://github.com/flutter/flutter.git • Framework revision 78689d347c (2 weeks ago), 2021-10-29 08:33:41 +0200 • Engine revision ddf4bd598e • Dart version 2.15.0 (build 2.15.0-262.0.dev) [✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0) • Android SDK at /Users/username/Library/Android/sdk • Platform android-31, build-tools 31.0.0 • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7281165) • All Android licenses accepted. [!] Xcode - develop for iOS and macOS (Xcode 12.5.1) • Xcode at /Applications/Xcode.app/Contents/Developer ! Flutter recommends a minimum Xcode version of 13.0.0. Download the latest version or update via the Mac App Store. • CocoaPods version 1.11.0 [✓] Chrome - develop for the web • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome [✓] Android Studio (version 2020.3) • Android Studio at /Applications/Android Studio.app/Contents • Flutter plugin can be installed from: ???? https://plugins.jetbrains.com/plugin/9212-flutter • Dart plugin can be installed from: ???? https://plugins.jetbrains.com/plugin/6351-dart • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7281165) [✓] VS Code (version 1.47.3) • VS Code at /Users/username/Applications/Visual Studio Code.app/Contents • Flutter extension can be installed from: ???? https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter [✓] Connected device (2 available) • iPhone (mobile) • c0b45b0c906fdd7df73cb4e5ba0171aa44c046fa • ios • iOS 14.8.1 18H107 • Chrome (web) • chrome • web-javascript • Google Chrome 95.0.4638.69 ! Doctor found issues in 1 category.

何か勘違いしている気がするのですが、それが何なのかがわかりません。
ご教授お願いします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問