This commit is contained in:
Sven committed 2024-02-03 10:19:38 +01:00
1 parent 8e5462bc91
commit e7409ac26b
13 files changed
+467 -88

No files matched your search

+2 -3
View File
@@ -1,4 +1,3 @@
import 'dart:convert';
import 'package:expandable/expandable.dart';
import 'package:flutter/material.dart';
@@ -135,7 +134,7 @@ class _AssignedJobsPageState extends State<AssignedJobsPage> {
"Weitere Infos....",
style: TextStyle(fontSize: 15, color: Colors.black, fontWeight: FontWeight.bold),
)),
collapsed: SizedBox(),
collapsed: const SizedBox(),
expanded: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
@@ -149,7 +148,7 @@ class _AssignedJobsPageState extends State<AssignedJobsPage> {
width: 0.5,
),
),
child: Text('asd asd asd asd asd asd asd asd asd asd asd asd asd asd asd '),
child: const Text('asd asd asd asd asd asd asd asd asd asd asd asd asd asd asd '),
),
],
),
+1 -1
View File
@@ -72,7 +72,7 @@ class MainPage extends ContentViewWidget {
rightButtonVisible: true,
rightButtonImage: Util.fetchFutureIcon(const Icon(Icons.info_outline, size: 20.0, color: Colors.white)),
rightButtonOnPressed: () async {
showInfosPopup(context);
showInfosPopup(context, await MyApp.isarInstance.status.where().findFirst());
});
}
}
+2 -2
View File
@@ -33,7 +33,7 @@ class MessagesPage extends ContentViewWidget {
rightButtonVisible: true,
rightButtonImage: Util.fetchFutureIcon(const Icon(Icons.info_outline, size: 20.0, color: Colors.white)),
rightButtonOnPressed: () async {
showInfosPopup(context);
showInfosPopup(context, await MyApp.isarInstance.status.where().findFirst());
});
}
}
@@ -123,7 +123,7 @@ class _MessagesPageState extends State<MessagesPage> {
_messages.add(types.TextMessage(
author: message.from == _sid ? _user : _central,
createdAt: DateTime.now().millisecondsSinceEpoch,
id: Uuid().v4().toString(),
id: const Uuid().v4().toString(),
text: text,
));
+4 -9
View File
@@ -132,15 +132,10 @@ class _MainState extends State<Main> {
return ColoredSafeArea(
key: GlobalKey(),
child: WillPopScope(
onWillPop: () async {
if (contentStack.isNotEmpty) {
_popContentView();
return false;
} else {
return true;
}
child: PopScope(
canPop: contentStack.isNotEmpty,
onPopInvoked: (didPop) => {
_popContentView()
},
child: Scaffold(
appBar: PreferredSize(
+4
View File
@@ -22,6 +22,10 @@ class Status {
late int vhtId;
@JsonKey(name: 'loc_zip')
late String locZip;
@JsonKey(name: 'server_version')
late String serverVersion;
@JsonKey(name: 'server_instance')
late String serverInstance;
Status();
+373 -11
View File
@@ -37,18 +37,28 @@ const StatusSchema = CollectionSchema(
name: r'locZip',
type: IsarType.string,
),
r'sid': PropertySchema(
r'serverInstance': PropertySchema(
id: 4,
name: r'serverInstance',
type: IsarType.string,
),
r'serverVersion': PropertySchema(
id: 5,
name: r'serverVersion',
type: IsarType.string,
),
r'sid': PropertySchema(
id: 6,
name: r'sid',
type: IsarType.string,
),
r'usrId': PropertySchema(
id: 5,
id: 7,
name: r'usrId',
type: IsarType.long,
),
r'vhtId': PropertySchema(
id: 6,
id: 8,
name: r'vhtId',
type: IsarType.long,
)
@@ -74,6 +84,8 @@ int _statusEstimateSize(
) {
var bytesCount = offsets.last;
bytesCount += 3 + object.locZip.length * 3;
bytesCount += 3 + object.serverInstance.length * 3;
bytesCount += 3 + object.serverVersion.length * 3;
bytesCount += 3 + object.sid.length * 3;
return bytesCount;
}
@@ -88,9 +100,11 @@ void _statusSerialize(
writer.writeLong(offsets[1], object.custId);
writer.writeLong(offsets[2], object.hqId);
writer.writeString(offsets[3], object.locZip);
writer.writeString(offsets[4], object.sid);
writer.writeLong(offsets[5], object.usrId);
writer.writeLong(offsets[6], object.vhtId);
writer.writeString(offsets[4], object.serverInstance);
writer.writeString(offsets[5], object.serverVersion);
writer.writeString(offsets[6], object.sid);
writer.writeLong(offsets[7], object.usrId);
writer.writeLong(offsets[8], object.vhtId);
}
Status _statusDeserialize(
@@ -104,9 +118,11 @@ Status _statusDeserialize(
object.custId = reader.readLong(offsets[1]);
object.hqId = reader.readLong(offsets[2]);
object.locZip = reader.readString(offsets[3]);
object.sid = reader.readString(offsets[4]);
object.usrId = reader.readLong(offsets[5]);
object.vhtId = reader.readLong(offsets[6]);
object.serverInstance = reader.readString(offsets[4]);
object.serverVersion = reader.readString(offsets[5]);
object.sid = reader.readString(offsets[6]);
object.usrId = reader.readLong(offsets[7]);
object.vhtId = reader.readLong(offsets[8]);
return object;
}
@@ -128,8 +144,12 @@ P _statusDeserializeProp<P>(
case 4:
return (reader.readString(offset)) as P;
case 5:
return (reader.readLong(offset)) as P;
return (reader.readString(offset)) as P;
case 6:
return (reader.readString(offset)) as P;
case 7:
return (reader.readLong(offset)) as P;
case 8:
return (reader.readLong(offset)) as P;
default:
throw IsarError('Unknown property with id $propertyId');
@@ -560,6 +580,268 @@ extension StatusQueryFilter on QueryBuilder<Status, Status, QFilterCondition> {
});
}
QueryBuilder<Status, Status, QAfterFilterCondition> serverInstanceEqualTo(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'serverInstance',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Status, Status, QAfterFilterCondition> serverInstanceGreaterThan(
String value, {
bool include = false,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.greaterThan(
include: include,
property: r'serverInstance',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Status, Status, QAfterFilterCondition> serverInstanceLessThan(
String value, {
bool include = false,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.lessThan(
include: include,
property: r'serverInstance',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Status, Status, QAfterFilterCondition> serverInstanceBetween(
String lower,
String upper, {
bool includeLower = true,
bool includeUpper = true,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.between(
property: r'serverInstance',
lower: lower,
includeLower: includeLower,
upper: upper,
includeUpper: includeUpper,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Status, Status, QAfterFilterCondition> serverInstanceStartsWith(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.startsWith(
property: r'serverInstance',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Status, Status, QAfterFilterCondition> serverInstanceEndsWith(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.endsWith(
property: r'serverInstance',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Status, Status, QAfterFilterCondition> serverInstanceContains(
String value,
{bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.contains(
property: r'serverInstance',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Status, Status, QAfterFilterCondition> serverInstanceMatches(
String pattern,
{bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.matches(
property: r'serverInstance',
wildcard: pattern,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Status, Status, QAfterFilterCondition> serverInstanceIsEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'serverInstance',
value: '',
));
});
}
QueryBuilder<Status, Status, QAfterFilterCondition>
serverInstanceIsNotEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.greaterThan(
property: r'serverInstance',
value: '',
));
});
}
QueryBuilder<Status, Status, QAfterFilterCondition> serverVersionEqualTo(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'serverVersion',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Status, Status, QAfterFilterCondition> serverVersionGreaterThan(
String value, {
bool include = false,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.greaterThan(
include: include,
property: r'serverVersion',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Status, Status, QAfterFilterCondition> serverVersionLessThan(
String value, {
bool include = false,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.lessThan(
include: include,
property: r'serverVersion',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Status, Status, QAfterFilterCondition> serverVersionBetween(
String lower,
String upper, {
bool includeLower = true,
bool includeUpper = true,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.between(
property: r'serverVersion',
lower: lower,
includeLower: includeLower,
upper: upper,
includeUpper: includeUpper,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Status, Status, QAfterFilterCondition> serverVersionStartsWith(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.startsWith(
property: r'serverVersion',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Status, Status, QAfterFilterCondition> serverVersionEndsWith(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.endsWith(
property: r'serverVersion',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Status, Status, QAfterFilterCondition> serverVersionContains(
String value,
{bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.contains(
property: r'serverVersion',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Status, Status, QAfterFilterCondition> serverVersionMatches(
String pattern,
{bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.matches(
property: r'serverVersion',
wildcard: pattern,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<Status, Status, QAfterFilterCondition> serverVersionIsEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'serverVersion',
value: '',
));
});
}
QueryBuilder<Status, Status, QAfterFilterCondition>
serverVersionIsNotEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.greaterThan(
property: r'serverVersion',
value: '',
));
});
}
QueryBuilder<Status, Status, QAfterFilterCondition> sidEqualTo(
String value, {
bool caseSensitive = true,
@@ -846,6 +1128,30 @@ extension StatusQuerySortBy on QueryBuilder<Status, Status, QSortBy> {
});
}
QueryBuilder<Status, Status, QAfterSortBy> sortByServerInstance() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'serverInstance', Sort.asc);
});
}
QueryBuilder<Status, Status, QAfterSortBy> sortByServerInstanceDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'serverInstance', Sort.desc);
});
}
QueryBuilder<Status, Status, QAfterSortBy> sortByServerVersion() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'serverVersion', Sort.asc);
});
}
QueryBuilder<Status, Status, QAfterSortBy> sortByServerVersionDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'serverVersion', Sort.desc);
});
}
QueryBuilder<Status, Status, QAfterSortBy> sortBySid() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'sid', Sort.asc);
@@ -944,6 +1250,30 @@ extension StatusQuerySortThenBy on QueryBuilder<Status, Status, QSortThenBy> {
});
}
QueryBuilder<Status, Status, QAfterSortBy> thenByServerInstance() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'serverInstance', Sort.asc);
});
}
QueryBuilder<Status, Status, QAfterSortBy> thenByServerInstanceDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'serverInstance', Sort.desc);
});
}
QueryBuilder<Status, Status, QAfterSortBy> thenByServerVersion() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'serverVersion', Sort.asc);
});
}
QueryBuilder<Status, Status, QAfterSortBy> thenByServerVersionDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'serverVersion', Sort.desc);
});
}
QueryBuilder<Status, Status, QAfterSortBy> thenBySid() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(r'sid', Sort.asc);
@@ -1007,6 +1337,22 @@ extension StatusQueryWhereDistinct on QueryBuilder<Status, Status, QDistinct> {
});
}
QueryBuilder<Status, Status, QDistinct> distinctByServerInstance(
{bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'serverInstance',
caseSensitive: caseSensitive);
});
}
QueryBuilder<Status, Status, QDistinct> distinctByServerVersion(
{bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addDistinctBy(r'serverVersion',
caseSensitive: caseSensitive);
});
}
QueryBuilder<Status, Status, QDistinct> distinctBySid(
{bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
@@ -1058,6 +1404,18 @@ extension StatusQueryProperty on QueryBuilder<Status, Status, QQueryProperty> {
});
}
QueryBuilder<Status, String, QQueryOperations> serverInstanceProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'serverInstance');
});
}
QueryBuilder<Status, String, QQueryOperations> serverVersionProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'serverVersion');
});
}
QueryBuilder<Status, String, QQueryOperations> sidProperty() {
return QueryBuilder.apply(this, (query) {
return query.addPropertyName(r'sid');
@@ -1088,7 +1446,9 @@ Status _$StatusFromJson(Map<String, dynamic> json) => Status()
..crId = json['cr_id'] as int
..sid = json['sid'] as String
..vhtId = json['vht_id'] as int
..locZip = json['loc_zip'] as String;
..locZip = json['loc_zip'] as String
..serverVersion = json['server_version'] as String
..serverInstance = json['server_instance'] as String;
Map<String, dynamic> _$StatusToJson(Status instance) => <String, dynamic>{
'cust_id': instance.custId,
@@ -1098,4 +1458,6 @@ Map<String, dynamic> _$StatusToJson(Status instance) => <String, dynamic>{
'sid': instance.sid,
'vht_id': instance.vhtId,
'loc_zip': instance.locZip,
'server_version': instance.serverVersion,
'server_instance': instance.serverInstance,
};
+49 -49
View File
@@ -10,55 +10,55 @@ import 'package:stadtbote/tools/constants.dart';
import 'package:stadtbote/tools/mqtt_core.dart';
import 'package:stadtbote/tools/util.dart';
import 'package:badges/badges.dart' as badges;
import 'package:uuid/uuid.dart';
void showAcceptJobsPopup(BuildContext context) async {
var entries = await _createListEntries();
await _createListEntries().then((value) => {
showPopupWindow(
context,
//childSize:Size(240, MediaQuery.of(context).size.width * 0.8),
gravity: KumiPopupGravity.center,
//curve: Curves.elasticOut,
bgColor: Colors.grey.withOpacity(0.5),
clickOutDismiss: true,
clickBackDismiss: true,
customAnimation: false,
customPop: false,
customPage: false,
// targetRenderBox: (btnKey.currentContext.findRenderObject() as RenderBox),
//needSafeDisplay: true,
underStatusBar: false,
underAppBar: false,
//offsetX: -180,
//offsetY: 50,
duration: const Duration(milliseconds: 200),
onShowStart: (pop) {},
onShowFinish: (pop) {},
onDismissStart: (pop) {},
onDismissFinish: (pop) {},
onClickOut: (pop) {},
onClickBack: (pop) {},
childFun: (pop) {
_createListEntries();
showPopupWindow(
context,
//childSize:Size(240, MediaQuery.of(context).size.width * 0.8),
gravity: KumiPopupGravity.center,
//curve: Curves.elasticOut,
bgColor: Colors.grey.withOpacity(0.5),
clickOutDismiss: true,
clickBackDismiss: true,
customAnimation: false,
customPop: false,
customPage: false,
// targetRenderBox: (btnKey.currentContext.findRenderObject() as RenderBox),
//needSafeDisplay: true,
underStatusBar: false,
underAppBar: false,
//offsetX: -180,
//offsetY: 50,
duration: const Duration(milliseconds: 200),
onShowStart: (pop) {},
onShowFinish: (pop) {},
onDismissStart: (pop) {},
onDismissFinish: (pop) {},
onClickOut: (pop) {},
onClickBack: (pop) {},
childFun: (pop) {
_createListEntries();
return SizedBox(
key: GlobalKey(),
height: MediaQuery.of(context).size.height * 0.85,
width: MediaQuery.of(context).size.width * 0.85,
child: Container(
height: 100,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: Colors.white,
border: Border.all(
color: Colors.grey,
width: 0.5,
),
),
child: SingleChildScrollView(child: Column(children: entries)),
));
},
return SizedBox(
key: GlobalKey(),
height: MediaQuery.of(context).size.height * 0.85,
width: MediaQuery.of(context).size.width * 0.85,
child: Container(
height: 100,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: Colors.white,
border: Border.all(
color: Colors.grey,
width: 0.5,
),
),
child: SingleChildScrollView(child: Column(children: value)),
));
},
)
}
);
}
@@ -121,7 +121,7 @@ Future<List<Widget>> _createListEntries() async {
"Weitere Infos....",
style: TextStyle(fontSize: 15, color: Colors.black, fontWeight: FontWeight.bold),
)),
collapsed: SizedBox(),
collapsed: const SizedBox(),
expanded: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
@@ -135,7 +135,7 @@ Future<List<Widget>> _createListEntries() async {
width: 0.5,
),
),
child: Text('asd asd asd asd asd asd asd asd asd asd asd asd asd asd asd '),
child: const Text('asd asd asd asd asd asd asd asd asd asd asd asd asd asd asd '),
),
],
),
@@ -144,7 +144,7 @@ Future<List<Widget>> _createListEntries() async {
const SizedBox(height: 20),
Row(children: [
Expanded(
child: getDefaultButton(!job.global ? 'Ablehnen' : 'Ignorieren', () => { _sendAnswer(job, !job.global ? 2: 3)}),
child: getDefaultButton(!job.global ? 'Ablehnen' : 'Ignorieren', () => {_sendAnswer(job, !job.global ? 2 : 3)}),
),
const SizedBox(width: 20),
Expanded(
+30 -7
View File
@@ -1,7 +1,26 @@
import 'package:flutter/material.dart';
import 'package:kumi_popup_window/kumi_popup_window.dart';
import 'package:stadtbote/model/status.dart';
import 'package:stadtbote/tools/util.dart';
void showInfosPopup(BuildContext context, Status? status) {
var text = "Versionsnummer: a203\n";
text += "Verbindungsstatus: Unbekannt\n";
text += "GPS-Status: Unbekannt\n";
text += "\n";
text += "User Status:\n";
if (status != null) {
text += "cr_id: ${status.crId}\n";
text += "cust_id: ${status.custId}\n";
text += "sid: ${status.sid}\n";
text += "vht_id: ${status.vhtId}\n";
text += "server_version: ${status.serverVersion}\n";
text += "server_instance: ${status.serverInstance}\n";
text += "Version GPS: Unbekannt";
} else {
text += "Keine Informationen gefunden";
}
void showInfosPopup(BuildContext context) {
showPopupWindow(
context,
//childSize:Size(240, MediaQuery.of(context).size.width * 0.8),
@@ -29,23 +48,27 @@ void showInfosPopup(BuildContext context) {
childFun: (pop) {
return SizedBox(
key: GlobalKey(),
height: MediaQuery.of(context).size.height * 0.6,
height: 350,
width: MediaQuery.of(context).size.width * 0.8,
child: Container(
height: 100,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: Colors.red,
color: Colors.white,
border: Border.all(
color: Colors.grey,
width: 0.5,
width: 1,
),
),
child: const Padding(
padding: EdgeInsets.all(12.0),
child: Padding(
padding: const EdgeInsets.all(12.0),
child: Column(
children: [
Text('Dies sind die Infos\nBla')
Expanded(child: Text(text, textAlign: TextAlign.left)),
getDefaultButton(
'OK',
() => {Navigator.pop(context)},
),
],
),
),
@@ -107,7 +107,7 @@ KumiPopupWindow showScanBarcodesPopup(BuildContext context, TaskInfo taskInfo, F
getDefaultButton('Hinzufügen', buttonHeight: 50, () => {
scanBarcode()
}),
SizedBox(height: 10),
const SizedBox(height: 10),
getDefaultButton('Übernehmen', buttonHeight: 50, () => {
onFinished(scannedBarcodes)
})
@@ -1,6 +1,4 @@
import 'package:isar/isar.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:stadtbote/tools/util.dart';
part 'job_del_message.g.dart';
@@ -1,6 +1,4 @@
import 'package:isar/isar.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:stadtbote/tools/util.dart';
part 'sync_jobs_message.g.dart';
@@ -1,4 +1,3 @@
import 'package:stadtbote/model/job.dart';
class JobDeletedMessage {
final int jobId;
+1
View File
@@ -20,6 +20,7 @@ import 'package:stadtbote/tools/messages/job_deleted_message.dart';
import 'package:stadtbote/tools/messages/job_received_message.dart';
import 'package:stadtbote/tools/messages/message_message.dart';
import 'package:stadtbote/tools/messages/session_info_update.dart';
// ignore: depend_on_referenced_packages
import 'package:typed_data/typed_buffers.dart';
import 'package:http/http.dart' as http;
import 'package:uuid/uuid.dart';