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.