問題タブ [dart-isolates]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
flutter - Flutter - UI をブロックせずに未来を含む重いタスクを計算するにはどうすればよいですか?
インターネットから投稿をjsonとして取得するアプリを作成しています。ファクトリを使用して、フラッターで json を Post オブジェクトに解析します。Post オブジェクトには、タイトル、本文、および画像が含まれます。リストビュー ビルダーを使用して、これらの投稿をリストビューに表示します。大変な作業は、画像から 2 つの主要な色を計算して、投稿アイテムの背景グラデーションとして設定することです。これには、https ://pub.dartlang.org/packages/palette_generator を使用します。
必要な情報をすべて備えた完全な Post オブジェクトがあるため、json パーサー ファクトリで 2 つの支配的な色を計算します。また、この方法では、Post オブジェクトをレンダリングするときに色を計算する必要がありません。私は次のコードでこれを行います:
これを Post オブジェクトに追加し、レンダリングでこの未来を待ちます。
メイン UI では、すべての先物が解決されるまでロード インジケーターを表示します。このために、次のコードを使用します。
これは、新しい投稿を取得するときの遅延 UI を除いて問題なく動作します。少し読んだ後、Flutter で Isolates を使用できることがわかりました。そこで、ここで説明するように解析関数を変更しました: https://flutter.io/docs/cookbook/networking/background-parsing
これは問題なく動作し、アプリは遅延なく実行されています。欠点は、色が計算されないことです。何らかの理由で、compute() を使用すると、Future が結果になりません。
この状況で計算を使用することは可能ですか、それとも UI で遅延を発生させずに色を計算するより良い方法はありますか?
編集
Isolate を計算せずにプログラミングしようとしましたが、色の先物がまだロードされません。これは私が使用したコードです:
私はすべてのデータを受け取りますが、やはり先物は終了しません。
dart - Dart Isolate SendPort と ReceivePort を 100 回送信する逆もまた同様
私のmain
作品ですが、foo
メインにデータを送信したいと思います。から100 回の間foo
でデータを渡したいコードを次に示します。main
どうすればそれを達成できますか?
dart - アプリが閉じられていてもバックグラウンドでタスクを実行し、タスクによって生成された最新の結果を取得して、アプリを開いたときに表示する方法は?
Flutterで歩数計アプリを作りたいのでFlutter歩数計プラグインを使ってみたら問題なく動作しましたが、メインアプリを閉じていても毎回このプラグインを実行してユーザーの歩数を計算したいです。
Dart アイソレートを使用して、メイン スレッドから離れた別のスレッドで実行できるタスクを作成し、それらの間でポートを介して通信できることがわかりました。
出力はユーザーのステップ数になると思います。
しかし、私はそのエラーが発生します
flutter - Flutter Dart - Isolate で sqflite 関数を呼び出すとエラーが発生する
機能する sqlflite データベースがあり、単体テストが機能します。onTap メソッドで sqflite メソッドを呼び出したい。メイン UI スレッドで sqflite 関数を実行できないことを理解しています (Flutter は実行時にそれを教えてくれます)。そこで、Isolate を作成して sqflite 関数を呼び出すと、別のエラーが発生します。Isolate は、sqflite 関数を呼び出さない場合に機能し、bool を返すだけで機能します。コードと例外は次のとおりです-提案に感謝します:
UI のスニペット
UI から呼び出されるメソッド
コールバックを分離する
I/flutter (2073): 電子メール: 電子メール、パスワード: Passw0rd
E/flutter (2073): [エラー:flutter/runtime/dart_isolate.cc(805)] 未処理の例外:
E/flutter (2073): エラー: ネイティブ関数 'Window_sendPlatformMessage' (4 つの引数) が見つかりません
E/flutter (2073): #0 Window.sendPlatformMessage (dart:ui/window.dart:1089:9)
E/flutter (2073): #1 _DefaultBinaryMessenger._sendPlatformMessage (パッケージ:flutter/src/services/binary_messenger.dart:85:15)
E/flutter (2073): #2 _DefaultBinaryMessenger.send (パッケージ:flutter/src/services/binary_messenger.dart:129:12)
E/flutter (2073): #3 MethodChannel.invokeMethod (パッケージ:flutter/src/services/platform_channel.dart:309:51)
E/フラッター ( 2073):
E/flutter (2073): #4 invokeMethod (パッケージ:sqflite/src/sqflite_impl.dart:18:34)
E/フラッター ( 2073):
E/flutter (2073): #5 SqfliteDatabaseFactoryImpl.invokeMethod (パッケージ:sqflite/src/factory_impl.dart:33:7)
E/flutter (2073): #6 _SqfliteDatabaseFactoryImpl&Object&SqfliteDatabaseFactoryMixin.safeInvokeMethod. (パッケージ:sqflite/src/factory_mixin.dart:22:35)
E/flutter (2073): #7 wrapDatabaseException (package:sqflite/src/exception_impl.dart:7:34) E/flutter (2073): .
E/flutter (2073): #8 SqfliteDatabaseFactoryImpl.wrapDatabaseException (パッケージ:sqflite/src/factory_impl.dart:29:7)。
E/flutter (2073): #9 _SqfliteDatabaseFactoryImpl&Object&SqfliteDatabaseFactoryMixin.safeInvokeMethod (パッケージ:sqflite/src/factory_mixin.dart:22:7)。E/flutter (2073): #10 _SqfliteDatabaseFactoryImpl&Object&SqfliteDatabaseFactoryMixin.getDatabasesPath (パッケージ:sqflite/src/factory_mixin.dart:136:17)。E/フラッター (2073): E/フラッター (2073): #11 getDatabasesPath. (パッケージ:sqflite/sqflite.dart:166:54) E/flutter (2073): #12 UsersSqflite.init (パッケージ:himrepo/controller/users_database.dart:20:47). E/フラッター ( 2073): . E/flutter (2073): #13 _LoginPageState.searchForUser. (パッケージ:himrepo/ui/login.dart:268:24)。E/フラッター ( 2073): . E/flutter (2073): #14 _LoginPageState.callbackFunction(package:himrepo/ui/login.dart:166:28). E/フラッター ( 2073): . E/フラッター ( 2073): #15 _startIsolate.. (dart:isolate-patch/isolate_patch.dart:304:17). E/flutter (2073): #16 _RawReceivePortImpl._handleMessage(dart:isolate-patch/isolate_patch.dart:172:12)。