Flutter队列API请求稍后执行

我正在实现一个应处理脱机模式的应用程序。当我检查互联网连接并且未连接时,我应该将API请求添加到队列中,以便在互联网连接再次恢复时执行。

我该怎么做?

我试图将类名和方法名添加到队列中,但是无法动态地从类中调用方法。

我正在使用Dio包来处理API请求。

chenxcl12345 回答:Flutter队列API请求稍后执行

如果您从请求中删除了await,则可以将其另存为Future<dynamic>作为示例

Future<dynamic> response = Dio().get("http://www.google.com");

现在您可以将其保存在List<Future<dynamic>> myList = List()中,并在需要时将其保存

await myList[0]

myList[0].then()

,

我是这样实现的。我知道现在回答这个问题为时已晚,但将来仍然有用。

FailedOrderQueue.dart

import 'dart:convert';

import 'package:get_storage/get_storage.dart';
import 'package:select_driver_app/Models/Order.dart';

class FailedOrdersQueue {
  GetStorage box = new GetStorage();
  List items = [];

  bool get hasItems {
    return items.isNotEmpty;
  }

  bool get isEmpty {
    return items.length == 0;
  }

  FailedOrdersQueue() {
    // removeAll();
    items = _loadQueue();
  }

  List _loadQueue() {
    return box.read('queue') ?? [];
  }

  bool exists(int orderId) {
    if (items.isEmpty) {
      return false;
    }
    try {
      dynamic object = items.firstWhere(
        (element) => element['order_id'] == orderId,);

      return object == null ? false : true;
    } catch (e) {
      return false;
    }
  }

  removeAll() {
    items = [];
    _commit();
  }

  add(Order order,int currentTripId) {
    if (!exists(order.id)) {
      items.add({
        'order_id': order.id,'trip_id': currentTripId,'credit_note': jsonEncode(order.creditNoteList),'delivery_img_path': order.image,'sign_img_path': order.signature
      });

      _commit();
    }
  }

  _commit() {
    box.write('queue',items);
  }

  remove(Order order) {
    items.removeWhere(
      (element) => element['order_id'] == order.id,);
    _commit();
  }

  removeById(int id) {
    items.removeWhere(
      (element) => element['order_id'] == id,);
    _commit();
  }
}

main.dart 或在控制器中(Getx)

FailedOrdersQueue failedOrderQueue = new FailedOrdersQueue();

failedOrderQueue.add(order,currentTripId!);
failedOrderQueue.remove(order);

failedOrderQueue.items.forEach((rawOrderInfo) {
   //process the queue
});

这种方式将数据保存在Get storage中,如果不想持久化数据,可以删除。

本文链接:https://www.f2er.com/1376579.html

大家都在问