使用json patching高效地同步firestore文档,同时将状态更新与文档更新解耦。

特点

将文档流更新与状态更新解耦。本质上,当你将数据推送到一个量子单元时,它会立即通过你正在监听的流将其推送出去,并最终将其推回到实际文档中。它还会从firestore流接收更改,并将其推送到你正在监听的流中。

用法

import 'package:flutter/material.dart';
import 'package:quantum/quantum.dart';

class MyQuantumWidget extends StatefulWidget {
  const MyQuantumWidget({Key? key}) : super(key: key);

  @override
  State<MyQuantumWidget> createState() => _MyQuantumWidgetState();
}

class _MyQuantumWidgetState extends State<MyQuantumWidget> {
  late QuantumUnit<SerializableJsonObject> _unit;

  @override
  void initState() {
    _unit = QuantumUnit(
        document: FirebaseFirestore.instance.doc("the_document"),
        deserializer: (json) => SerializableJsonObject.fromJson(json),
        serializer: (o) => o.toJson());
    super.initState();
  }

  @override
  void dispose() {
    _unit.close();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) => StreamBuilder<SerializableJsonObject>(
    stream: _unit.stream(),
    builder: (context, snap) => snap.hasData
        ? Center(
      child: Column(
        mainAxisSize: MainAxisSize.min,
        children: [
          Text("The number is ${snap.data!.number}"),
          TextButton(
            onPressed: () => _unit.pushWith((value) {
              value.number++;
            }),
            child: const Text("Increment"),
          ),
        ],
      ),
    )
        : const Center(
      child: CircularProgressIndicator(),
    ),
  );
}

GitHub

查看 Github