前提・実現したいこと
現在Google Drive APIを使ってデータのバックアップをFlutterで実装しています。
その際、APIとの通信中にUIを固めないようにflutter_isolateプラグインを使ってisolateを使おうとしているのですが、google_sign_inプラグインのGoogleSignInAccount型の引数(アカウント情報)をisolateに渡そうとすると「Illegal argument in isolate message : (object is a regular Dart Instance)"」というエラーが出てしまい渡すことができません。
isolate側でアカウント情報を取得することで対策しようとしましたが、今度は「concurrent-requests」というエラーが出るようになり断念しました。
どうにかしてisolate側へアカウント情報を渡したいのですが何か方法はありませんか?
ご教授よろしくお願いいたします。
該当のソースコード
Dart
1//isolateの呼び出し元 2 3final GoogleSignInAccount googleSignInAccount = await googleSignIn.signInSilently(); 4 5 if(googleSignInAccount != null){ 6 7 var port = ReceivePort(); 8 9 SendPortWithParams sendPortWithParams = SendPortWithParams(googleSignInAccount, port.sendPort); 10 11 final isolate = await FlutterIsolate.spawn( 12 backUpToGoogleDrive, 13 sendPortWithParams, 14 ); 15 16 port.listen((msg) { 17 if(msg == 'すべて完了'){ 18 isolate.kill(); 19 } 20 }); 21 22 }
Dart
1//引数クラス 2 3class SendPortWithParams { 4 GoogleSignInAccount googleSignInAccount; 5 SendPort sendPort; 6 SendPortWithParams(this.googleSignInAccount, this.sendPort); 7}
Dart
1//isolate 2 3void backUpToGoogleDrive(SendPortWithParams sendPortWithParams) async { 4 5 if(sendPortWithParams.googleSignInAccount != null){ 6 7 var client = GoogleHttpClient(await googleSignIn.currentUser.authHeaders); 8 var drive = ga.DriveApi(client); 9 10 11 //省略 12 13 14 port.send("すべて完了"); 15 } else { 16 port.send("すべて完了"); 17 } 18} 19 20 21//flutter: Illegal argument in isolate message : (object is a regular Dart Instance)
あなたの回答
tips
プレビュー