使用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(),
),
);
}