compute () di flutter tidak berpengaruh

Sep 19 2020

Saya coba gunakan computedi Flutter. Di sini saya mencoba melewatkan beberapa parameter di dalam Peta. Tetapi kode di fungsi saya myFunctiontidak berfungsi. Saya tidak mendapatkan kesalahan atau sesuatu yang lain. Kode saya sepertinya diabaikan. Apakah Anda menemukan kesalahan di sini?

Fungsi komputasi:

Map map = Map();
map['resultList'] = resultList;
map['_getImageFileFromAssets'] = _getImageFileFromAssets;
map["picturesData"] = picturesData;
map["albumID"] = albumID;

await compute(myFunction, map);

Memanggil fungsi berikut:

Future<bool> myFunction(map) async {
  var resultList = map["resultList"];
  var _getImageFileFromAssets = map["_getImageFileFromAssets"];
  var picturesData = map["picturesData"];
  var albumID = map["albumID"];

  print("Starten");

  for (var i = 0; i < resultList.length; i++) {
    print(i);
    File imageFile = await _getImageFileFromAssets(resultList[i]);

    final appDir = await syspath.getApplicationDocumentsDirectory();

    final fileName = path.basename(imageFile.path);

    final savedImage =
        await File(imageFile.path).copy('${appDir.path}/$fileName');

    // Creating thumbnails

    final thumb = image.decodeImage(await File(savedImage.path).readAsBytes());
    final thumbImage = image.copyResize(thumb, width: 500);

    new File('${appDir.path}/$fileName-thumb-500.jpg')
        .writeAsBytes(image.encodeJpg(thumbImage));

    final finalThumbImage = File('${appDir.path}/$fileName-thumb-500.jpg');

    picturesData.add(Picture(
        album: albumID,
        path: savedImage.path,
        thumbPath: finalThumbImage.path,
        timestamp: Timestamp.now()));
  }

  return true;
}

Jawaban

kazume Sep 19 2020 at 11:30

Oke, beberapa kode - saya taruh ini di dartpad.dev :

import 'package:flutter/foundation.dart';

void main() {
  Map map = Map();
  compute(myFunction, map).then((result) => print(result));
}

Future<bool> myFunction(Map map) async {
  print("Starten");
  // fake long process
  await Future.delayed(Duration(seconds: 5));
  return true;
}

dan dapatkan ini sebagai hasil konsol:

Starten
true

Juga: apakah ada alasan mengapa Anda membutuhkan parameter "map" dalam fungsi Anda dynamic? Jika tidak, saya akan mendeklarasikannya sebagai tipe Map(seperti yang saya lakukan sekarang).