Skip to content

Commit

Permalink
add real time update Orders
Browse files Browse the repository at this point in the history
  • Loading branch information
a4ifka committed Apr 13, 2024
1 parent f0dd2e5 commit 5e51dc4
Show file tree
Hide file tree
Showing 8 changed files with 240 additions and 77 deletions.
34 changes: 17 additions & 17 deletions lib/feature/data/datasources/order_remote_data_source.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:iiko_delivery/feature/data/models/order_model.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
import 'package:supabase_flutter/supabase_flutter.dart';

abstract class OrderRemoteDataSource {
Future<List<OrderModel>> getUserOrders({bool? isDelivered});
Expand Down Expand Up @@ -31,22 +31,22 @@ class OrderRemoteDataSourceImpl implements OrderRemoteDataSource {
.order('order_date', ascending: true);
}

supabaseClient
.channel('public:Orders')
.onPostgresChanges(
event: PostgresChangeEvent.all,
schema: 'public',
table: 'Orders',
callback: (payload) {
// Map<String, dynamic> payloadMap = payload.
// getUserOrders(isDelivered: isDelivered);
// print('change --> ${payload.newRecord}');
// print('length --> ${data.length}');
// print('isDelivered --> $isDelivered');
// data.add(payload.newRecord);
getUserOrders(isDelivered: isDelivered);
})
.subscribe();
// supabaseClient
// .channel('public:Orders')
// .onPostgresChanges(
// event: PostgresChangeEvent.all,
// schema: 'public',
// table: 'Orders',
// callback: (payload) {
// // Map<String, dynamic> payloadMap = payload.
// // getUserOrders(isDelivered: isDelivered);
// // print('change --> ${payload.newRecord}');
// // print('length --> ${data.length}');
// // print('isDelivered --> $isDelivered');
// // data.add(payload.newRecord);

// })
// .subscribe();

return data.map((order) => OrderModel.fromJson(order)).toList();
}
Expand Down
52 changes: 23 additions & 29 deletions lib/feature/presentation/pages/order_detail_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import 'package:iiko_delivery/feature/presentation/bloc/location_cubit/location_
import 'package:iiko_delivery/feature/presentation/bloc/set_delivered_cubit/set_delivered_cubit.dart';
import 'package:iiko_delivery/feature/presentation/bloc/set_delivered_cubit/set_delivered_state.dart';
import 'package:iiko_delivery/feature/presentation/widgets/item_list_widget.dart';
import 'package:swipeable_button_view/swipeable_button_view.dart';
import 'package:url_launcher/url_launcher.dart';

class OrderDetailPage extends StatefulWidget {
Expand All @@ -19,6 +20,7 @@ class OrderDetailPage extends StatefulWidget {
}

class _OrderDetailPageState extends State<OrderDetailPage> {
bool isFinished = false;
@override
Widget build(BuildContext context) {
final order = ModalRoute.of(context)!.settings.arguments as OrderEntity;
Expand Down Expand Up @@ -157,34 +159,6 @@ class _OrderDetailPageState extends State<OrderDetailPage> {
'Состав заказа',
style: TextStyle(color: Colors.black, fontSize: 30),
),
Align(
alignment: Alignment.bottomCenter,
child: SizedBox(
width: double.infinity,
child: ElevatedButton(
style: ElevatedButton.styleFrom(
minimumSize: const Size.fromHeight(60),
foregroundColor: const Color(0xFF78C4A4),
backgroundColor: const Color(0xFF78C4A4),
surfaceTintColor: const Color(0xFF78C4A4),
),
onPressed: () => context
.read<SetDeliveredCubit>()
.setOrderIsDelivered(orderId, true),
child: const Text(
'Доставлено',
style: TextStyle(
color: Colors.white,
fontSize: 18,
fontFamily: 'Nunito',
fontWeight: FontWeight.w600,
height: 0.07,
letterSpacing: 0.09,
),
),
),
),
),
BlocBuilder<ItemCubit, ItemState>(
builder: (context, state) {
if (state is GetOrderItemsSuccessState) {
Expand All @@ -205,13 +179,33 @@ class _OrderDetailPageState extends State<OrderDetailPage> {
}
},
),
Align(
alignment: Alignment.bottomCenter,
child: SwipeableButtonView(
buttonText: "Доставлен",
buttonWidget: Container(
child: const Icon(
Icons.arrow_forward_ios_rounded,
color: Colors.grey,
),
),
activeColor: const Color(0xFF78C4A4),
isFinished: isFinished,
onWaitingProcess: () {
Future.delayed(Duration(seconds: 2), () {
context
.read<SetDeliveredCubit>()
.setOrderIsDelivered(orderId, true);
});
},
onFinish: () async {}),
),
BlocListener<SetDeliveredCubit, SetDeliveredState>(
listener: (context, state) {
if (state is SetDeliveredLoaded) {
print('orderId $orderId, \n isdelivered true');
Navigator.pop(context);
Navigator.pushNamed(context, "/orders");

} else if (state is SetDeliveredError) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
Expand Down
22 changes: 18 additions & 4 deletions lib/feature/presentation/pages/order_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import 'package:iiko_delivery/feature/presentation/bloc/order_cubit/order_cubit.
import 'package:iiko_delivery/feature/presentation/bloc/order_cubit/order_state.dart';
import 'package:iiko_delivery/feature/presentation/widgets/order_list_item.dart';
import 'package:iiko_delivery/feature/presentation/widgets/segment_order.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
import 'package:url_launcher/url_launcher.dart';

// ignore: must_be_immutable
Expand All @@ -23,13 +24,27 @@ class HomePage extends StatefulWidget {
class _HomePageState extends State<HomePage> {
int? groupValue = 0;
late bool isDelivered = false;
final today = DateTime.now();



@override
Widget build(BuildContext context) {
final today = DateTime.now();
context.read<OrderCubit>().getUserOrders(isDelivered, today);
context.read<DailySalaryCubit>().getDailySalary(today);
context.read<OrdersCostCubit>().getOrdersCost(isDelivered);
var listen = Supabase.instance.client
.channel('public:Orders')
.onPostgresChanges(
event: PostgresChangeEvent.all,
schema: 'public',
table: 'Orders',
callback: (payload) {
context.read<OrderCubit>().getUserOrders(isDelivered, today);
print('callback');
})
.subscribe();
print('listen changes --> $listen');
return Scaffold(
appBar: AppBar(
centerTitle: true,
Expand Down Expand Up @@ -86,8 +101,7 @@ class _HomePageState extends State<HomePage> {
BlocBuilder<DailySalaryCubit, DailySalaryState>(
builder: (context, state) {
if (state is DailySalarySuccess) {
return Text(
"${state.salary.toStringAsFixed(2)} ₽",
return Text("${state.salary.toStringAsFixed(2)} ₽",
style: const TextStyle(
color: Colors.black,
fontSize: 20,
Expand Down Expand Up @@ -188,7 +202,7 @@ class _HomePageState extends State<HomePage> {
minimumSize: const Size.fromHeight(60),
foregroundColor: const Color(0xFF78C4A4),
backgroundColor: const Color(0xFF78C4A4),
surfaceTintColor:const Color(0xFF78C4A4),
surfaceTintColor: const Color(0xFF78C4A4),
),
onPressed: () async {
String telephoneNumber = '+2347012345678';
Expand Down
6 changes: 5 additions & 1 deletion lib/feature/presentation/pages/statistics_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,11 @@ class _StatisticaPageState extends State<StatisticaPage> {
),
),
leading: IconButton(
onPressed: () {}, icon: const Icon(Icons.exit_to_app_outlined)),
onPressed: () {
Navigator.pop(context);
Navigator.pushNamed(context, "/orders");
},
icon: const Icon(Icons.exit_to_app_outlined)),
backgroundColor: const Color(0xFFFAF7F5),
),
body: Column(
Expand Down
Loading

0 comments on commit 5e51dc4

Please sign in to comment.