Commit d125b466 authored by valdi's avatar valdi

succes set ready, queue, and pick up

parent 3814b22d
import 'dart:async';
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:manager_queue/helper/config.dart';
import 'package:manager_queue/models/queue.dart';
import 'package:flutter/material.dart';
......@@ -17,7 +18,7 @@ class ApiQueue {
}
static Future<List<OrderQueue>> getQueue() async {
String apiUrl = "http://192.168.2.142:8000/api/getqueue";
String apiUrl = apiUrlQueue;
// print("Test");
List<OrderQueue> queues = [];
try {
......
......@@ -7,23 +7,21 @@ class ReadyBloc extends Cubit<List<OrderQueue>> {
Future<List<OrderQueue>> getData() async {
var apiQueue = await ApiQueue.getQueue();
return apiQueue;
return apiQueue.where((i) => (i.status == "Ready")).toList();
}
// List<OrderQueue> queues = [
// OrderQueue(id: "1", queue_number: '123', status: 'Ready'),
// OrderQueue(id: "2", queue_number: '1234', status: 'Ready'),
// OrderQueue(id: "3", queue_number: '12345', status: 'queue'),
// OrderQueue(id: "4", queue_number: '123456', status: 'queue'),
// OrderQueue(id: "5", queue_number: '12345633', status: 'Ready'),
// ];
// ReadyBloc() : super(Future.empty);
void queueList() {
getData().then((value) {
// print(value);
emit(value);
});
}
onPressed(OrderQueue thisQueue) {
var index = state.indexOf(thisQueue);
thisQueue.isSelected = !thisQueue.isSelected;
state[index] = thisQueue;
print('berubah');
emit(state);
}
}
import 'package:bloc/bloc.dart';
import 'package:flutter/widgets.dart';
import 'package:manager_queue/models/queue.dart';
class SelectedReadyBloc extends Cubit<List<OrderQueue>> {
SelectedReadyBloc() : super([]);
onPressed(OrderQueue thisQueue) {
if (state.contains(thisQueue)) {
state.remove(thisQueue);
} else {
state.add(thisQueue);
}
print(state);
emit(state);
}
}
......@@ -11,12 +11,12 @@ class QueueCubit extends Cubit<QueueState> {
Future<void> getData() async {
emit(QueueLoading());
Future.delayed(const Duration(milliseconds: 2000), () async {
// Future.delayed(const Duration(milliseconds: 2000), () async {
var apiQueue = await ApiQueue.getQueue();
var data = apiQueue.where((i) => (i.status == "In Queue")).toList();
emit(QueueLoaded(data));
});
// });
}
onPressed(List<OrderQueue> active, OrderQueue toUpdate) {
......
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:manager_queue/models/queue.dart';
import '../api.dart';
part 'ready_state.dart';
class ReadyCubit extends Cubit<ReadyState> {
ReadyCubit() : super(ReadyInitial());
Future<void> getData() async {
emit(ReadyLoading());
// Future.delayed(const Duration(milliseconds: 2000), () async {
var apiQueue = await ApiQueue.getQueue();
var data = apiQueue.where((i) => (i.status == "Ready")).toList();
emit(ReadyLoaded(data));
// });
}
onPressed(List<OrderQueue> active, OrderQueue toUpdate) {
emit(ReadyInitial());
var index = active.indexOf(toUpdate);
toUpdate.isSelectedReady = !toUpdate.isSelectedReady;
active[index] = toUpdate;
emit(ReadyUpdated(active));
}
}
part of 'ready_cubit.dart';
abstract class ReadyState extends Equatable {
const ReadyState();
@override
List<Object> get props => [];
}
class ReadyInitial extends ReadyState {}
class ReadyLoading extends ReadyState {}
class ReadyLoaded extends ReadyState {
final List<OrderQueue> readys;
ReadyLoaded(this.readys);
@override
List<Object> get props => [readys];
}
class ReadyUpdated extends ReadyState {
final List<OrderQueue> readys;
ReadyUpdated(this.readys);
@override
List<Object> get props => [readys];
}
import 'package:mqtt_client/mqtt_browser_client.dart';
const String apiUrlQueue = "http://192.168.2.142:8000/api/getqueue";
const String apiUrlUpdate = "http://192.168.2.142:8000/api/updatequeue";
const String mqttUrl = "ws://dev.ravku.com";
const String queueTopic = "queuetest/1";
const String queueMessage = "updateApi";
const int mqttPort = 1883;
final mqClient = MqttBrowserClient(mqttUrl, "");
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:manager_queue/bloc/queue_bloc.dart';
import 'package:manager_queue/bloc/ready_bloc.dart';
import 'package:manager_queue/cubit/queue_cubit.dart';
import 'package:manager_queue/cubit/ready_cubit.dart';
import 'package:manager_queue/helper/config.dart';
import 'package:manager_queue/main_page.dart';
import 'package:mqtt_client/mqtt_client.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'bloc/selected_queue_bloc.dart';
import 'bloc/selected_ready_bloc.dart';
void main() {
// var prefs = await SharedPreferences.getInstance();
runApp(MyApp());
}
Future<int> runMqTT(BuildContext context) async {
mqClient.logging(on: false);
mqClient.setProtocolV311();
mqClient.keepAlivePeriod = 86400;
mqClient.port = mqttPort;
mqClient.onDisconnected;
mqClient.onConnected;
mqClient.onSubscribed;
// mqClient.pongCallback = pong;
final connMess = MqttConnectMessage()
.withClientIdentifier('Mqtt_MyClientUniqueId')
.withWillTopic('willtopic') // If you set this you must set a will message
.withWillMessage('My Will message')
.startClean() // Non persistent session for testing
.withWillQos(MqttQos.atLeastOnce);
// print('EXAMPLE::Mosquitto client connecting....');
mqClient.connectionMessage = connMess;
try {
await mqClient.connect();
} on NoConnectionException catch (e) {
// Raised by the client when connection fails.
// print('EXAMPLE::client exception - $e');
mqClient.disconnect();
} on SocketException catch (e) {
// Raised by the socket layer
// print('EXAMPLE::socket exception - $e');
mqClient.disconnect();
}
if (mqClient.connectionStatus!.state == MqttConnectionState.connected) {
// print('EXAMPLE::Mosquitto client connected');
} else {
/// Use status here rather than state if you also want the broker return code.
// print(
// 'EXAMPLE::ERROR Mosquitto client connection failed - disconnecting, status is ${mqClient.connectionStatus}');
mqClient.disconnect();
exit(-1);
}
/// Ok, lets try a subscription
// print('EXAMPLE::Subscribing to the queuetest/1 topic');
var topic = queueTopic; // Not a wildcard topic
mqClient.subscribe(topic, MqttQos.atMostOnce);
/// The client has a change notifier object(see the Observable class) which we then listen to to get
/// notifications of published updates to each subscribed topic.
// mqClient.updates!.listen((List<MqttReceivedMessage<MqttMessage?>>? c) {
// final recMess = c![0].payload as MqttPublishMessage;
// final pt =
// MqttPublishPayload.bytesToStringAsString(recMess.payload.message);
// // if (c[0].topic == topic && pt == queueMessage) {
// // context.read<QueueBloc>().queueList();
// // // print("berhasil update API");
// // } else {
// // // print("tidak berhasil dapat message yang sesuai");
// // }
// print('Notifikasi masuk dari topic <${c[0].topic}>, isinya adalah: $pt ');
// print('');
// });
// print('EXAMPLE::Sleeping....');
// await MqttUtilities.asyncSleep(60);
// /// Finally, unsubscribe and exit gracefully
// print('EXAMPLE::Unsubscribing');
// mqClient.unsubscribe(topic);
/// Wait for the unsubscribe message from the broker if you wish.
// await MqttUtilities.asyncSleep(2);
// print('EXAMPLE::Disconnecting');
// mqClient.disconnect();
return 0;
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
runMqTT(context);
return MaterialApp(
initialRoute: '/',
routes: {
......@@ -22,6 +107,8 @@ class MyApp extends StatelessWidget {
BlocProvider(create: (_) => ReadyBloc()),
BlocProvider(create: (_) => SelectedQueueBloc()),
BlocProvider(create: (_) => QueueCubit()),
BlocProvider(create: (_) => SelectedReadyBloc()),
BlocProvider(create: (_) => ReadyCubit()),
], child: MainPage()),
},
debugShowCheckedModeBanner: false,
......
import 'dart:collection';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
......@@ -6,9 +7,12 @@ import 'package:flutter_bloc/flutter_bloc.dart';
// import 'package:manager_queue/api.dart';
import 'package:manager_queue/bloc/queue_bloc.dart';
import 'package:manager_queue/bloc/ready_bloc.dart';
import 'package:manager_queue/helper/config.dart';
import 'package:manager_queue/models/queue.dart';
import 'package:http/http.dart' as http;
import 'package:mqtt_client/mqtt_client.dart';
import 'cubit/queue_cubit.dart';
import 'cubit/ready_cubit.dart';
class MainPage extends StatefulWidget {
@override
......@@ -16,56 +20,88 @@ class MainPage extends StatefulWidget {
}
class _MainPageState extends State<MainPage> {
// var queue = ['1', '4', '5'];
List<dynamic> orderQueue = [];
List<dynamic> orderReady = [];
List<OrderQueue> queueSelected = [];
List<OrderQueue> readySelected = [];
List<OrderQueue> pickUp = [];
// List<dynamic> orderQueueList = [];
// @override
// void initState() {
// // orderQueueList = orderQueue.where((i) => (i.status == 'In Queue')).toList();
// // orderReady = orderQueue.where((i) => (i.status == 'Ready')).toList();
// // TODO: implement initState
// super.initState();
// }
List<String> queueSelected = [];
List<String> readySelected = [];
List<String> pickUp = [];
void setToReady(List<OrderQueue> queueSelected) {
void setToReady(List queueSelected) async {
var apiUrl = apiUrlUpdate;
for (var i in queueSelected) {
orderQueue.remove(i);
var apiResult = await http
.post(Uri.parse(apiUrl), body: {"id": i.toString(), "status": "1"});
var jsonObject = jsonDecode(apiResult.body)['status'];
// if (jsonObject == true) {
// context.read<QueueCubit>().getData();
// context.read<ReadyCubit>().getData();
// } else {
// print("tidak berhasil");
// }
}
orderReady.addAll(queueSelected);
context.read<QueueCubit>().getData();
context.read<ReadyCubit>().getData();
const pubTopic = queueTopic;
final builder = MqttClientPayloadBuilder();
builder.addString(queueMessage);
mqClient.publishMessage(pubTopic, MqttQos.exactlyOnce, builder.payload!);
}
void setToQueue(List<OrderQueue> readySelected) {
void setToQueue(List readySelected) async {
// print(readySelected);
var apiUrl = apiUrlUpdate;
for (var i in readySelected) {
orderReady.remove(i);
var apiResult = await http
.post(Uri.parse(apiUrl), body: {"id": i.toString(), "status": "0"});
var jsonObject = jsonDecode(apiResult.body)['status'];
// if (jsonObject == true) {
// context.read<ReadyCubit>().getData();
// context.read<QueueCubit>().getData();
// } else {
// print("tidak berhasil");
// }
}
orderQueue.addAll(readySelected);
context.read<ReadyCubit>().getData();
context.read<QueueCubit>().getData();
const pubTopic = queueTopic;
final builder = MqttClientPayloadBuilder();
builder.addString(queueMessage);
mqClient.publishMessage(pubTopic, MqttQos.exactlyOnce, builder.payload!);
}
void setToPickUp(List<OrderQueue> readySelected) {
// void setToPickUp(List<OrderQueue> readySelected) {
// for (var i in readySelected) {
// orderReady.remove(i);
// }
// pickUp.addAll(readySelected);
// }
void setToPickUp(List readySelected) async {
// print(readySelected);
var apiUrl = apiUrlUpdate;
for (var i in readySelected) {
orderReady.remove(i);
var apiResult = await http
.post(Uri.parse(apiUrl), body: {"id": i.toString(), "status": "2"});
var jsonObject = jsonDecode(apiResult.body)['status'];
// if (jsonObject == true) {
// context.read<ReadyCubit>().getData();
// context.read<QueueCubit>().getData();
// } else {
// print("tidak berhasil");
// }
}
pickUp.addAll(readySelected);
context.read<ReadyCubit>().getData();
const pubTopic = queueTopic;
final builder = MqttClientPayloadBuilder();
builder.addString(queueMessage);
mqClient.publishMessage(pubTopic, MqttQos.exactlyOnce, builder.payload!);
}
// void queueSelectItem(List<Queue> _queueselect) {
// }
@override
Widget build(BuildContext context) {
context.read<QueueCubit>().getData();
// context.read<ReadyBloc>().queueList();
print("Rebuild");
context.read<ReadyCubit>().getData();
return MaterialApp(
debugShowCheckedModeBanner: false,
......@@ -123,12 +159,6 @@ class _MainPageState extends State<MainPage> {
context
.read<QueueCubit>()
.onPressed(state.queues, thisQueue);
// print(context
// .read<SelectedQueueBloc>()
// .state
// .contains(thisQueue)
// ? 'ADA LOH'
// : 'GAK ADA LOH');
},
child: Card(
color: Colors.black38,
......@@ -138,12 +168,7 @@ class _MainPageState extends State<MainPage> {
),
child: Center(
child: Text(
thisQueue.isSelected
? "Pesanan " +
thisQueue.queue_number +
" ✅ "
: "Pesanan " +
thisQueue.queue_number,
"Pesanan " + thisQueue.queue_number,
style: TextStyle(fontSize: 20),
))),
),
......@@ -151,7 +176,6 @@ class _MainPageState extends State<MainPage> {
},
);
} else if (state is QueueUpdated) {
print('updated');
return GridView.builder(
itemCount: state.queues.length,
gridDelegate:
......@@ -162,6 +186,13 @@ class _MainPageState extends State<MainPage> {
childAspectRatio: 2),
itemBuilder: (BuildContext context, int index) {
var thisQueue = state.queues[index];
if (thisQueue.isSelected) {
if (!queueSelected.contains(thisQueue.id)) {
queueSelected.add(thisQueue.id);
}
} else {
queueSelected.remove(thisQueue.id);
}
return Material(
borderRadius: BorderRadius.circular(10),
child: InkWell(
......@@ -169,12 +200,6 @@ class _MainPageState extends State<MainPage> {
context
.read<QueueCubit>()
.onPressed(state.queues, thisQueue);
// print(context
// .read<SelectedQueueBloc>()
// .state
// .contains(thisQueue)
// ? 'ADA LOH'
// : 'GAK ADA LOH');
},
child: Card(
color: thisQueue.isSelected
......@@ -186,12 +211,7 @@ class _MainPageState extends State<MainPage> {
),
child: Center(
child: Text(
thisQueue.isSelected
? "Pesanan " +
thisQueue.queue_number +
" ✅ "
: "Pesanan " +
thisQueue.queue_number,
"Pesanan " + thisQueue.queue_number,
style: TextStyle(fontSize: 20),
))),
),
......@@ -205,27 +225,16 @@ class _MainPageState extends State<MainPage> {
),
),
),
Container(
InkWell(
onTap: () {
setToReady(queueSelected);
},
child: Container(
width: 1000,
height: 100,
color: Colors.lightBlue,
alignment: Alignment.center,
child: Material(
color: Colors.lightBlue,
child: InkWell(
onTap: () {
setState(() {
if (orderReady.contains(queueSelected)) {
queueSelected.remove(queueSelected);
} else {
orderReady.addAll(queueSelected);
}
// print(queueSelected.toString());
});
},
splashColor: Colors.amber,
child: GestureDetector(
onTap: () => setToReady(queueSelected),
child: Text(
"SET TO READY",
......@@ -235,7 +244,6 @@ class _MainPageState extends State<MainPage> {
),
),
),
),
],
),
),
......@@ -264,7 +272,28 @@ class _MainPageState extends State<MainPage> {
fontSize: 30, fontWeight: FontWeight.w700),
),
),
Container(
InkWell(
onTap: () {
print("clear");
showDialog(
context: context,
builder: (BuildContext context) => AlertDialog(
title: Text("Clear"),
content: Text("Are you sure to clear?"),
actions: <Widget>[
TextButton(
onPressed: () => Navigator.pop(context),
child: Text('Cancel'),
),
TextButton(
onPressed: () => Navigator.pop(context),
child: Text('OK'),
),
],
),
);
},
child: Container(
width: 400,
height: 100,
margin: EdgeInsets.all(20),
......@@ -281,6 +310,7 @@ class _MainPageState extends State<MainPage> {
fontSize: 30, fontWeight: FontWeight.w700),
),
),
),
],
),
),
......@@ -309,13 +339,17 @@ class _MainPageState extends State<MainPage> {
child: MediaQuery.removePadding(
context: context,
removeTop: true,
child: BlocBuilder<ReadyBloc, List<dynamic>>(
builder: (context, list) {
List<dynamic> orderReady = [];
orderReady =
list.where((i) => (i.status == "Ready")).toList();
child: BlocConsumer<ReadyCubit, ReadyState>(
listener: (context, state) {
print('listener');
print(state);
},
builder: (context, state) {
if (state is ReadyLoading) {
return CircularProgressIndicator();
} else if (state is ReadyLoaded) {
return GridView.builder(
itemCount: orderReady.length,
itemCount: state.readys.length,
gridDelegate:
const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
......@@ -323,67 +357,141 @@ class _MainPageState extends State<MainPage> {
mainAxisSpacing: 5,
childAspectRatio: 2),
itemBuilder: (BuildContext context, int index) {
var thisReady = orderReady[index];
var thisQueue = state.readys[index];
return Material(
borderRadius: BorderRadius.circular(10),
child: InkWell(
onTap: () {
setState(() {
if (readySelected.contains(thisReady)) {
readySelected.remove(thisReady);
} else {
readySelected.add(thisReady);
}
print(readySelected.toString());
});
context
.read<ReadyCubit>()
.onPressed(state.readys, thisQueue);
},
child: Card(
color: Colors.black38,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
borderRadius:
BorderRadius.circular(10),
),
child: Center(
child: Text(
readySelected.contains(thisReady)
? "Pesanan " +
thisReady.queue_number +
" ✅"
: "Pesanan " +
thisReady.queue_number,
"Pesanan " + thisQueue.queue_number,
style: TextStyle(fontSize: 20),
))),
),
);
},
);
} else if (state is ReadyUpdated) {
return GridView.builder(
itemCount: state.readys.length,
gridDelegate:
const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 10,
mainAxisSpacing: 5,
childAspectRatio: 2),
itemBuilder: (BuildContext context, int index) {
var thisQueue = state.readys[index];
if (thisQueue.isSelectedReady) {
if (!readySelected.contains(thisQueue.id)) {
readySelected.add(thisQueue.id);
}
} else {
readySelected.remove(thisQueue.id);
}
return Material(
borderRadius: BorderRadius.circular(10),
child: InkWell(
onTap: () {
context
.read<ReadyCubit>()
.onPressed(state.readys, thisQueue);
},
child: Card(
color: thisQueue.isSelectedReady
? Colors.blue
: Colors.black38,
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(10),
),
),
child: Center(
child: Text(
"Pesanan " + thisQueue.queue_number,
style: TextStyle(fontSize: 20),
))),
),
);
},
);
}),
} else {
return SizedBox();
}
},
),
// child: BlocBuilder<ReadyBloc, List<dynamic>>(
// builder: (context, list) {
// List<dynamic> orderReady = [];
// orderReady = list;
// return GridView.builder(
// itemCount: orderReady.length,
// gridDelegate:
// const SliverGridDelegateWithFixedCrossAxisCount(
// crossAxisCount: 2,
// crossAxisSpacing: 10,
// mainAxisSpacing: 5,
// childAspectRatio: 2),
// itemBuilder: (BuildContext context, int index) {
// var thisReady = orderReady[index];
// return Material(
// borderRadius: BorderRadius.circular(10),
// child: InkWell(
// onTap: () {
// setState(() {
// if (readySelected.contains(thisReady)) {
// readySelected.remove(thisReady);
// } else {
// readySelected.add(thisReady);
// }
// print(readySelected.toString());
// });
// },
// child: Card(
// color: Colors.black38,
// shape: RoundedRectangleBorder(
// borderRadius: BorderRadius.circular(10),
// ),
// child: Center(
// child: Text(
// readySelected.contains(thisReady)
// ? "Pesanan " + thisReady.id + " ✅"
// : "Pesanan " + thisReady.id,
// style: TextStyle(fontSize: 20),
// ),
// ),
// ),
// ),
// );
// },
// );
// }),
),
),
Row(
children: [
Flexible(
flex: 1,
child: InkWell(
onTap: () {
setToQueue(readySelected);
},
child: Container(
height: 100,
color: Colors.green,
alignment: Alignment.center,
child: InkWell(
onTap: () {
setState(() {
if (orderQueue.contains(readySelected)) {
readySelected.remove(readySelected);
} else {
orderQueue.addAll(readySelected);
}
// print(queueSelected.toString());
});
},
splashColor: Colors.amber,
child: GestureDetector(
onTap: () => setToQueue(readySelected),
child: Text(
"SET TO QUEUE",
......@@ -397,23 +505,15 @@ class _MainPageState extends State<MainPage> {
),
Flexible(
flex: 1,
child: InkWell(
onTap: () {
setToPickUp(readySelected);
},
child: Container(
height: 100,
color: Colors.black26,
alignment: Alignment.center,
child: InkWell(
onTap: () {
setState(() {
if (pickUp.contains(readySelected)) {
readySelected.remove(readySelected);
} else {
pickUp.addAll(readySelected);
}
// print(queueSelected.toString());
});
},
child: GestureDetector(
onTap: () => setToPickUp(readySelected),
child: Text(
"PICK UP",
......
......@@ -3,12 +3,14 @@ class OrderQueue {
final String queue_number;
final String status;
bool isSelected = false;
bool isSelectedReady = false;
OrderQueue(
{required this.id,
required this.queue_number,
required this.status,
required this.isSelected});
required this.isSelected,
required this.isSelectedReady});
factory OrderQueue.createOrderQueue(Map<String, dynamic> json) {
return OrderQueue(
......@@ -16,6 +18,7 @@ class OrderQueue {
queue_number: json['queue_number'].toString(),
status: json['status'].toString(),
isSelected: false,
isSelectedReady: false,
);
}
}
......@@ -50,6 +50,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.15.0"
crypto:
dependency: transitive
description:
name: crypto
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.1"
cupertino_icons:
dependency: "direct main"
description:
......@@ -64,6 +71,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.3"
event_bus:
dependency: transitive
description:
name: event_bus
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
fake_async:
dependency: transitive
description:
......@@ -71,6 +85,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
ffi:
dependency: transitive
description:
name: ffi
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.2"
file:
dependency: transitive
description:
name: file
url: "https://pub.dartlang.org"
source: hosted
version: "6.1.2"
flutter:
dependency: "direct main"
description: flutter
......@@ -95,6 +123,11 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
flutter_web_plugins:
dependency: transitive
description: flutter
source: sdk
version: "0.0.0"
http:
dependency: "direct main"
description:
......@@ -109,6 +142,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.0"
js:
dependency: transitive
description:
name: js
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.4"
lints:
dependency: transitive
description:
......@@ -137,6 +177,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.7.0"
mqtt_client:
dependency: "direct main"
description:
name: mqtt_client
url: "https://pub.dartlang.org"
source: hosted
version: "9.6.5"
multi_select_flutter:
dependency: "direct main"
description:
......@@ -158,6 +205,48 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.1"
path_provider_linux:
dependency: transitive
description:
name: path_provider_linux
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.5"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.3"
path_provider_windows:
dependency: transitive
description:
name: path_provider_windows
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.5"
platform:
dependency: transitive
description:
name: platform
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.0"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.2"
process:
dependency: transitive
description:
name: process
url: "https://pub.dartlang.org"
source: hosted
version: "4.2.4"
provider:
dependency: transitive
description:
......@@ -165,6 +254,62 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "6.0.2"
shared_preferences:
dependency: "direct main"
description:
name: shared_preferences
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.13"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.11"
shared_preferences_ios:
dependency: transitive
description:
name: shared_preferences_ios
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
shared_preferences_linux:
dependency: transitive
description:
name: shared_preferences_linux
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
shared_preferences_macos:
dependency: transitive
description:
name: shared_preferences_macos
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.3"
shared_preferences_platform_interface:
dependency: transitive
description:
name: shared_preferences_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
shared_preferences_web:
dependency: transitive
description:
name: shared_preferences_web
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.3"
shared_preferences_windows:
dependency: transitive
description:
name: shared_preferences_windows
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
sky_engine:
dependency: transitive
description: flutter
......@@ -219,6 +364,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
uuid:
dependency: "direct main"
description:
name: uuid
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.6"
vector_math:
dependency: transitive
description:
......@@ -226,6 +378,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1"
win32:
dependency: transitive
description:
name: win32
url: "https://pub.dartlang.org"
source: hosted
version: "2.4.1"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.0+1"
sdks:
dart: ">=2.16.1 <3.0.0"
flutter: ">=1.16.0"
flutter: ">=2.8.0"
......@@ -33,7 +33,10 @@ dependencies:
sdk: flutter
flutter_bloc: ^8.0.1
http: ^0.13.4
mqtt_client: ^9.6.5
multi_select_flutter: ^4.0.0
shared_preferences: ^2.0.13
uuid: ^3.0.6
dev_dependencies:
flutter_lints: ^1.0.0
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment