前提・実現したいこと
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
したら処理を中断する、という動作を期待しています。
前の画面のTextButton
のonPress
で画面遷移と同時に_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.
何か勘違いしている気がするのですが、それが何なのかがわかりません。
ご教授お願いします。
あなたの回答
tips
プレビュー