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

Cross-application local coordination and durable shared data for sqlite_loom suites.

example/lib/main.dart

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:path/path.dart' as p;
import 'package:path_provider/path_provider.dart';
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
import 'package:sqlite_loom_suite/sqlite_loom_suite.dart';

import 'deployment.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  sqfliteFfiInit();
  final root = await getApplicationSupportDirectory();
  final path = p.join(root.path, 'example.publisher.shared', 'suite.sqlite3');
  final transport = DirectSuiteTransport(
    databaseFactory: databaseFactoryFfi,
    pathResolver: (_) => path,
  );
  final appA = await SuiteClient.open(
    SuiteConfiguration.desktop(
      suiteId: SuiteId('example.publisher.shared'),
      appId: SuiteAppId('example.publisher.app_a'),
      appName: 'Example App A',
      appVersion: '1.0.0',
      databasePath: path,
      deployment: exampleDeployment,
    ),
    transport: transport,
  );
  final written = await appA.values.write('preferences', 'accent', 'indigo');
  await appA.events.publish(
    type: 'preference.changed',
    payload: {'key': 'accent', 'revision': written.value?.revision},
  );
  final appB = await SuiteClient.open(
    SuiteConfiguration.desktop(
      suiteId: SuiteId('example.publisher.shared'),
      appId: SuiteAppId('example.publisher.app_b'),
      appName: 'Example App B',
      appVersion: '1.0.0',
      databasePath: path,
      deployment: exampleDeployment,
    ),
    transport: transport,
  );
  final sharedValue = await appB.values.read('preferences', 'accent');
  final events = await appB.events.read(appId: appB.configuration.appId);
  runApp(
    ExampleApp(
      appA: appA,
      appB: appB,
      message: 'App B read ${sharedValue?.value} and ${events.length} event(s)',
    ),
  );
}

final class ExampleApp extends StatefulWidget {
  const ExampleApp({
    required this.appA,
    required this.appB,
    required this.message,
    super.key,
  });
  final SuiteClient appA;
  final SuiteClient appB;
  final String message;

  @override
  State<ExampleApp> createState() => _ExampleAppState();
}

final class _ExampleAppState extends State<ExampleApp> {
  @override
  void dispose() {
    widget.appA.close();
    widget.appB.close();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) => MaterialApp(
    home: Scaffold(
      appBar: AppBar(title: const Text('SQLite Loom Suite')),
      body: FutureBuilder<SuiteDiagnostics>(
        future: widget.appB.diagnostics(),
        builder: (context, snapshot) => Center(
          child: Text(
            snapshot.hasData
                ? '${widget.message}\nSuite healthy: ${snapshot.data!.databaseHealthy}'
                : snapshot.hasError
                ? 'Error: ${snapshot.error}'
                : Platform.operatingSystem,
          ),
        ),
      ),
    ),
  );
}
0
likes
160
points
104
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Cross-application local coordination and durable shared data for sqlite_loom suites.

Repository (GitHub)
View/report issues
Contributing

Topics

#sqlite #database #ipc #persistence #coordination

License

MIT (license)

Dependencies

crypto, flutter, path, plugin_platform_interface, sqflite, sqflite_common, sqlite_loom

More

Packages that depend on sqlite_loom_suite

Packages that implement sqlite_loom_suite