I am unable to upload images in background in IOS using WorkManager in Flutter

101 Views Asked by At

I am unable to upload images in background in IOS using WorkManager in Flutter. First It is taking approx 40-50 minutes to execute also it crash on http.post method

This is my Code

Workmanager().registerOneOffTask("task-identifier", Workmanager.iOSBackgroundTask,constraints: Constraints(
                  // connected or metered mark the task as requiring internet
                  networkType: NetworkType.connected,
                  // require external power
                  requiresCharging: false,
                ),);


Workmanager().executeTask((task, inputData) async {
    const AndroidNotificationDetails androidPlatformChannelSpecifics =
    AndroidNotificationDetails(
        'onsight',
        'onsight_channel',
        channelDescription: 'Onsight Firebase Channel',
        importance: Importance.max,
        priority: Priority.high,
        autoCancel: false,
        showProgress: true,
        ticker: 'ticker',
        icon: 'ic_stat_new_icon_notif',
        color: ColourConstants.primary);
    const IOSNotificationDetails iosNotificationDetails = IOSNotificationDetails(presentAlert: true, presentBadge: true,presentSound: true);
    NotificationDetails details = NotificationDetails(android: androidPlatformChannelSpecifics, iOS: iosNotificationDetails);
    Future.delayed(Duration(seconds: 5),(){
      flutterLocalNotificationsPlugin.show(01, "Work Manager One", "Task Runninig", details);//simpleTask will be emitted here.

    });


    print("FailedJobPhotoMethodCalled");
    AppInternetManager appInternetManager = AppInternetManager();
    var a = await appInternetManager.getSettingsTable() as List;
    int b = 0;

    if(a.isNotEmpty) {
      print("Task in progress " + a[0]["TaskInProgress"].toString());
      print("Task in progress");
      b = a[0]["TaskInProgress"] ?? 0;
    }
    b = b+1;
    await appInternetManager.updateTaskProgress(val: b);
    var aa = await appInternetManager.getSettingsTable();
    print("Task in progress" + aa[0]["TaskInProgress"].toString());
    print("Failed Job services Database started Failed Job");
    sp =  await Preference.getInstance();
     var token = sp!.getString(Preference.ACCESS_TOKEN).toString();


    await showNotificationUploading();
      await runApiFromDatabaseJobPhotos(token);


    ImageManager imageManager = ImageManager();
    List<ImageModel>imageList = await imageManager.getImageList();
    print("Image List length" + imageList.length.toString());
    if(imageList.isEmpty) {
      return Future.value(true);
    }else{
      // print("register one more task");
      // Workmanager().registerOneOffTask("task-identifier", Workmanager.iOSBackgroundTask,constraints: Constraints(
      //   // connected or metered mark the task as requiring internet
      //   networkType: NetworkType.not_required,
      //   // require external power
      //   requiresCharging: false,
      // ),);
      return Future.value(false);
    }
  });



Future<void> runApiFromDatabaseJobPhotos(token)async{
  DateTime datee1 = DateTime.now();
  print("DateTime Execution is ${datee1.hour} : ${datee1.minute}");
  print("code here");
  ImageManager imageManager = ImageManager();
  List<ImageModel>imageList = await imageManager.getImageList();
  print("Image List length" + imageList.length.toString());

  if(imageList.isNotEmpty) {
    ImageModel model = imageList.first;
    JobCategoriesResponse responseModel = JobCategoriesResponse();
    responseModel.id = model.categoryId??"";
    responseModel.name = model.categoryName??"";
    responseModel.listPhotos = [];
    responseModel.listPhotos?.add(model);
    var jobNumber = model.jobNumber.toString();
    List<Email> listEmail = await EmailManager().getEmailRecord(jobNumber);
    print(listEmail.length);
    var connectivityResult = await (Connectivity().checkConnectivity());
    print(connectivityResult);
    if (connectivityResult == ConnectivityResult.wifi) {
      print("-->  Uploading Through Wifi !!  <--");
      WebService webService = WebService();
      var response = await webService.submitImagesFromDatabase(responseModel, jobNumber, listEmail, token);
      if(response!=null){
        if(response.toString().contains("error")){
          bool isNetActive = await ConnectionStatus.getInstance().checkConnection();
          if(!isNetActive){
            Timer.periodic(const Duration(seconds: 10), (timer) async {
              bool isNetActive = await ConnectionStatus.getInstance().checkConnection();
              if(isNetActive){
                timer.cancel();
                await runApiFromDatabaseJobPhotos(token);
              }
            });
          }

        }
      }
    }
    
}
**AppDelegate.swift**
     WorkmanagerPlugin.registerTask(withIdentifier: "task-identifier")
      UIApplication.shared.setMinimumBackgroundFetchInterval(TimeInterval(60*15))
      // Make other plugins available during a background fetch
          WorkmanagerPlugin.setPluginRegistrantCallback { registry in
              GeneratedPluginRegistrant.register(with: registry)
          }

Here I am uploading images one by one in background from LocalDB Sqflight with Rest APIs. I also used Flutter Background service but it also not working in iOS. In Android it works perfectly.

0

There are 0 best solutions below