durable_queue_sqlite 0.1.0 copy "durable_queue_sqlite: ^0.1.0" to clipboard
durable_queue_sqlite: ^0.1.0 copied to clipboard

SQLite storage for durable_queue. Persists tasks across app restarts with indexed, transactional queries.

example/main.dart

// Tasks stored in SQLite survive the app being closed.
//
// Run with `dart run example/main.dart` from packages/durable_queue_sqlite.
import 'dart:io';

import 'package:durable_queue/durable_queue.dart';
import 'package:durable_queue_sqlite/durable_queue_sqlite.dart';

final class SendMessageTask extends DurableTask {
  SendMessageTask(this.text);

  final String text;

  @override
  String get type => 'send_message';

  @override
  Map<String, dynamic> toJson() => {'text': text};

  static SendMessageTask fromJson(Map<String, dynamic> json) =>
      SendMessageTask(json['text'] as String);
}

/// Builds the queue the same way on every launch.
DurableQueue buildQueue(SqliteQueueStorage storage) {
  return DurableQueue(storage: storage)..register<SendMessageTask>(
    type: 'send_message',
    decoder: SendMessageTask.fromJson,
    handler: (task, context) async => print('sent: ${task.text}'),
  );
}

Future<void> main() async {
  final directory = await Directory.systemTemp.createTemp('chat_queue_');
  final path = '${directory.path}/queue.db';

  // First launch: offline, so messages are only stored. Then the app closes.
  final firstStorage = SqliteQueueStorage.open(path);
  final first = buildQueue(firstStorage);
  await first.enqueue(SendMessageTask('Hello'));
  await first.enqueue(SendMessageTask('Are you there?'));
  print('stored ${(await first.getTasks()).length} messages, app closed');
  await first.close();
  await firstStorage.close();

  // Second launch: same file, new process in a real app.
  final storage = SqliteQueueStorage.open(path);
  final queue = buildQueue(storage);
  final done = queue.events
      .where((event) => event is TaskCompleted)
      .take(2)
      .drain<void>();
  await queue.start();
  await done;
  print(
    'pending after restart: '
    '${(await queue.getTasks(status: TaskStatus.pending)).length}',
  );
  await queue.close();
  await storage.close();
  await directory.delete(recursive: true);
}
0
likes
160
points
--
downloads

Documentation

API reference

Publisher

verified publisherboffincoders.com

Weekly Downloads

SQLite storage for durable_queue. Persists tasks across app restarts with indexed, transactional queries.

Repository (GitHub)
View/report issues
Contributing

Topics

#queue #sqlite #persistence #offline #retry

License

MIT (license)

Dependencies

durable_queue, sqlite3

More

Packages that depend on durable_queue_sqlite