Commit 04a97fbd authored by Dio Maulana's avatar Dio Maulana

config from API and add Video

parent cfeb0e2f
This diff is collapsed.
import 'dart:convert';
import 'package:second_display/helper/config.dart';
import 'package:second_display/models/config_display.dart';
import 'package:second_display/models/order_detail.dart';
import 'package:second_display/models/orders.dart';
import 'package:http/http.dart' as http;
import 'package:flutter/services.dart' as bundel_root;
class Api {
static Future<CustomerOrders> getOrders() async {
String apiUrl = getOrdersUrl;
CustomerOrders customerOrdersList = CustomerOrders(
order_user_name: "",
total: "0.0",
discount_amount: "0.0",
orderCount: 0,
subtotal: "0.0",
tax: "0");
/// url get data dari midware getby id, need session
// String apiUrl = getOrdersUrl;
/// url get data dari midware getorder, no need session
String apiUrl = getJsonUrl;
CustomerOrders customerOrdersList = modelCustomerOrder;
try {
Map data = {
"session_key": "d289c7d6dfc04690b4149b93c91aef8a",
"user_id": "d31d7ad3ba864ea39300cb99c9e2ac3f",
"ignore_lock": "",
"order_id": "a13004c9ba18459586212b7155d7348e"
};
/// load data dari json local
// String datas = await bundel_root.rootBundle.loadString('file.json');
// var jsonObject = jsonDecode(datas);
/// load data dari json local
/// load data dari api midware getby id
// Map data = {
// "session_key": "d289c7d6dfc04690b4149b93c91aef8a",
// "user_id": "d31d7ad3ba864ea39300cb99c9e2ac3f",
// "ignore_lock": "",
// "order_id": "a13004c9ba18459586212b7155d7348e"
// };
// var bodi = jsonEncode(data);
// var apiresults = await http.post(Uri.parse(apiUrl), body: bodi);
// var jsonObject = jsonDecode(apiresults.body);
/// load data dari api midware getby id
/// load data dari midwar file json
Map data = {};
var bodi = jsonEncode(data);
var apiresults = await http.post(Uri.parse(apiUrl), body: bodi);
var jsonObject = jsonDecode(apiresults.body);
/// load data dari midwar file json
List<dynamic> orderDetailCount = (jsonObject
as Map<dynamic, dynamic>)['data']['order']['order_detail'];
var jsonMap = jsonObject['data']['order'];
String orderuserName = jsonMap['order_user_name'];
String orderuserName = jsonMap['id'].substring(0, 5);
String total = jsonMap['total'];
String discountAmount = jsonMap['discount_amount'];
int orderCounts = orderDetailCount.length;
String subtotal = jsonMap['subtotal'];
String tax = jsonMap['tax_amount'];
customerOrdersList.order_user_name = orderuserName;
String pax = jsonMap['pax'].toString();
String tableName = jsonMap['table_name'];
String tableSecName = jsonMap['table_section_name'];
String dateOrder = jsonMap['start_time'];
String orderusername = jsonMap['order_user_name'];
customerOrdersList.id = orderuserName;
customerOrdersList.total = total;
customerOrdersList.discount_amount = discountAmount;
customerOrdersList.orderCount = orderCounts;
customerOrdersList.subtotal = subtotal;
customerOrdersList.tax = tax;
customerOrdersList.pax = pax;
customerOrdersList.table_name = tableName;
customerOrdersList.table_section_name = tableSecName;
customerOrdersList.dateOrder = dateOrder;
customerOrdersList.order_user_name = orderusername;
return customerOrdersList;
} catch (e) {
......@@ -49,24 +80,55 @@ class Api {
}
static Future<List<CustomerOrdersDetail>> getOrderDetail() async {
String apiUrl = getOrdersUrl;
// String apiUrl = getOrdersUrl;
String apiUrl = getJsonUrl;
try {
List<CustomerOrdersDetail> listOrderDetail = [];
Map data = {
"session_key": "d289c7d6dfc04690b4149b93c91aef8a",
"user_id": "d31d7ad3ba864ea39300cb99c9e2ac3f",
"ignore_lock": "",
"order_id": "a13004c9ba18459586212b7155d7348e"
};
/// load data dari json local
// String datas = await bundel_root.rootBundle.loadString('file.json');
// var jsonObject = jsonDecode(datas);
/// load data dari json local
/// load data dari api midware getby id
// Map data = {
// "session_key": "d289c7d6dfc04690b4149b93c91aef8a",
// "user_id": "d31d7ad3ba864ea39300cb99c9e2ac3f",
// "ignore_lock": "",
// "order_id": "a13004c9ba18459586212b7155d7348e"
// };
// var bodi = jsonEncode(data);
// var apiresults = await http.post(Uri.parse(apiUrl), body: bodi);
// var jsonObject = jsonDecode(apiresults.body);
/// load data dari api midware getby id
/// load data dari midwar file json
Map data = {};
var bodi = jsonEncode(data);
var apiresults = await http.post(Uri.parse(apiUrl), body: bodi);
var jsonObject = jsonDecode(apiresults.body);
/// load data dari midwar file json
List<dynamic> listDetail = (jsonObject as Map<dynamic, dynamic>)['data']
['order']['order_detail'];
for (int i = 0; i < listDetail.length; i++) {
listOrderDetail
.add(CustomerOrdersDetail.createOrderDetail(listDetail[i]));
// List<dynamic> optionOrderDetail =
// (jsonObject as Map<dynamic, dynamic>)['data']['order']
// ['order_detail'][i]['order_detail_options'];
// print(optionOrderDetail.length);
// if (optionOrderDetail.isNotEmpty) {
// for (int j = 0; j < optionOrderDetail.length; j++) {
// listOrderDetail.add(
// CustomerOrdersDetail(optionName: optionOrderDetail[j]['name']));
// }
// }
}
return listOrderDetail;
} catch (e) {
......@@ -74,4 +136,26 @@ class Api {
return [];
}
}
static Future<List<ConfigDisplay>> getConfigDisplay() async {
String apiUrl = apiUrlConfig;
List<ConfigDisplay> configList = [];
try {
Map data = {};
var bodi = jsonEncode(data);
var apiresults = await http.post(Uri.parse(apiUrl), body: bodi);
var jsonObject = jsonDecode(apiresults.body);
List<dynamic> listConfig = (jsonObject as Map<dynamic, dynamic>)['data'];
for (int i = 0; i < listConfig.length; i++) {
configList.add(ConfigDisplay.createConfig(listConfig[i]));
}
return configList;
} catch (e) {
return [];
}
}
}
import 'package:second_display/api/api.dart';
import 'package:second_display/models/config_display.dart';
import 'package:bloc/bloc.dart';
class ConfigDisplayBloc extends Cubit<List<ConfigDisplay>> {
ConfigDisplayBloc() : super([]);
Future<List<ConfigDisplay>> getData() async {
var orderDetail = await Api.getConfigDisplay();
return orderDetail;
}
void getConfigDisplay() {
getData().then((value) {
emit(value);
});
}
}
import 'package:second_display/api/api.dart';
import 'package:second_display/helper/config.dart';
import 'package:second_display/models/orders.dart';
import 'package:bloc/bloc.dart';
class OrdersBloc extends Cubit<CustomerOrders> {
OrdersBloc()
: super(CustomerOrders(
order_user_name: "",
total: "",
discount_amount: "",
orderCount: 0,
subtotal: "",
tax: "0"));
OrdersBloc() : super(modelCustomerOrder);
Future<CustomerOrders> getData() async {
return await Api.getOrders();
......
import 'package:flutter/material.dart';
import 'package:second_display/models/orders.dart';
final Color textColor = Colors.white;
final Color colorBackgroundOrder = Colors.black.withOpacity(0.8);
final Color colorBackgroundCarousel = Colors.black;
// final Color textColor = Colors.white;
// final Color colorBackgroundOrder = Colors.black.withOpacity(0.8);
final String getOrdersUrl = "http://192.168.2.142:8001/midware/order/get_by_id";
final String apiUrlConfig =
"http://192.168.2.142:8001/queue/config_second_display";
final String getJsonUrl =
"http://192.168.2.142:8001/midware/order/get_for_second_display";
late CustomerOrders modelCustomerOrder = CustomerOrders(
id: "",
total: "",
discount_amount: "",
orderCount: 0,
subtotal: "",
tax: "0",
pax: "0",
table_name: "",
table_section_name: "",
dateOrder: "",
order_user_name: "");
final List<String> imgList = [
'https://images.unsplash.com/photo-1520342868574-5fa3804e551c?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=6ff92caffcdd63681a35134a6770ed3b&auto=format&fit=crop&w=1951&q=80',
......
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:second_display/bloc/config_display_blog.dart';
import 'package:second_display/bloc/order_detail.dart';
import 'package:second_display/bloc/orders_bloc.dart';
import 'package:second_display/ui/main_page.dart';
import 'package:second_display/ui/splash.dart';
import 'package:url_strategy/url_strategy.dart';
void main() async {
......@@ -21,12 +23,14 @@ class MyApp extends StatelessWidget {
providers: [
BlocProvider(create: (_) => OrdersBloc()),
BlocProvider(create: (_) => OrderDetailBloc()),
BlocProvider(create: (_) => ConfigDisplayBloc())
],
child: MaterialApp(
debugShowCheckedModeBanner: false,
initialRoute: '/',
routes: {
'/': (context) => const MainPage(),
'/': (context) => Splash(),
'/main': (context) => MainPage(),
},
),
);
......
class ConfigDisplay {
final String backgroundColorCarouselVideo;
final String textColor;
final String backgroundColorOrder;
final int isVideo;
ConfigDisplay(
{required this.backgroundColorCarouselVideo,
required this.textColor,
required this.backgroundColorOrder,
required this.isVideo});
factory ConfigDisplay.createConfig(Map<String, dynamic> json) {
return ConfigDisplay(
backgroundColorCarouselVideo:
json['background_color_carousel_video'].toString(),
textColor: json['text_color'].toString(),
backgroundColorOrder: json['background_color_order'],
isVideo: json['is_video']);
}
}
class CustomerOrdersDetail {
late String name;
late String total;
late String quantity;
late String optionOrder;
CustomerOrdersDetail({required this.name, required this.total});
CustomerOrdersDetail({
this.name = "",
this.total = "",
this.quantity = "",
this.optionOrder = "",
});
factory CustomerOrdersDetail.createOrderDetail(Map<String, dynamic> json) {
return CustomerOrdersDetail(
name: json['name'].toString(),
total: json['subtotal'].toString(),
);
quantity: json['quantity'].toString(),
optionOrder: json['order_options']);
}
}
class CustomerOrders {
late String order_user_name;
late String id;
late String total;
late String discount_amount;
late int orderCount;
late String subtotal;
late String tax;
late String pax;
late String table_name;
late String table_section_name;
late String dateOrder;
late String order_user_name;
CustomerOrders(
{required this.order_user_name,
CustomerOrders({
required this.id,
required this.total,
required this.discount_amount,
required this.orderCount,
required this.subtotal,
required this.tax});
required this.tax,
required this.pax,
required this.table_name,
required this.table_section_name,
required this.dateOrder,
required this.order_user_name,
});
}
......@@ -3,8 +3,9 @@ import 'package:flutter/material.dart';
import 'package:second_display/helper/config.dart';
class CarouselIndicator extends StatefulWidget {
const CarouselIndicator({Key? key}) : super(key: key);
final Color backgroundColor;
const CarouselIndicator({Key? key, required this.backgroundColor})
: super(key: key);
@override
State<CarouselIndicator> createState() => _CarouselIndicatorState();
}
......@@ -58,7 +59,7 @@ class _CarouselIndicatorState extends State<CarouselIndicator> {
Widget build(BuildContext context) {
return Scaffold(
body: Container(
color: colorBackgroundCarousel,
color: widget.backgroundColor,
child: Column(children: [
Expanded(
child: CarouselSlider(
......
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:second_display/bloc/config_display_blog.dart';
import 'package:second_display/bloc/order_detail.dart';
import 'package:second_display/bloc/orders_bloc.dart';
import 'package:second_display/helper/config.dart';
import 'package:second_display/models/config_display.dart';
import 'package:second_display/ui/carousel.dart';
import 'package:second_display/ui/orders.dart';
import 'package:second_display/ui/video_promotion.dart';
// ignore: must_be_immutable
class MainPage extends StatelessWidget {
const MainPage({Key? key}) : super(key: key);
MainPage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
context.read<OrdersBloc>().getOrderList();
context.read<OrderDetailBloc>().getOrderDetailList();
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Row(
home: Scaffold(body: BlocBuilder<ConfigDisplayBloc, List<ConfigDisplay>>(
builder: (context, configState) {
int valueIntBackgroundColorCarouselVideo =
int.parse(configState[0].backgroundColorCarouselVideo, radix: 16);
final Color colorBackgroundCarouselandVideo =
Color(valueIntBackgroundColorCarouselVideo);
int valueIntTextColor =
int.parse(configState[0].textColor, radix: 16);
final Color textColor = Color(valueIntTextColor);
int valueIntBackgroundColorOrder =
int.parse(configState[0].backgroundColorOrder, radix: 16);
final Color backgroundColorOrder =
Color(valueIntBackgroundColorOrder);
return Row(
children: [
Container(
(configState[0].isVideo == 1)
? Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width * 0.6,
// color: Colors.red,
child: CarouselIndicator(),
color: colorBackgroundCarouselandVideo,
child: VideoPromotion(),
)
: Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width * 0.6,
child: CarouselIndicator(
backgroundColor: colorBackgroundCarouselandVideo),
),
Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width * 0.4,
color: colorBackgroundOrder,
child: OrderPage(),
color: backgroundColorOrder,
child: OrderPage(textColor: textColor),
)
],
);
},
)),
);
}
......
This diff is collapsed.
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:loading_animations/loading_animations.dart';
import 'package:second_display/bloc/config_display_blog.dart';
import 'package:second_display/ui/main_page.dart';
class Splash extends StatefulWidget {
const Splash({Key? key}) : super(key: key);
@override
State<Splash> createState() => _SplashState();
}
class _SplashState extends State<Splash> {
// bool isLoaded = false;
// Future<List<ConfigApl>> config({url = ""}) async {
// // String? base_urlapi = prefs.getString('base_url');
// List<ConfigApl> apiConfigs = [];
// try {
// var apiConfig = await Api.getConfig(url: url);
// apiConfigs = apiConfig;
// return apiConfigs;
// } catch (e) {
// return apiConfigs;
// }
// }
@override
void initState() {
Future.delayed(const Duration(seconds: 2), () {
Navigator.push(context, MaterialPageRoute(builder: (_) => MainPage()));
});
super.initState();
}
@override
Widget build(BuildContext context) {
context.read<ConfigDisplayBloc>().getConfigDisplay();
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
"Please wait",
style: TextStyle(
fontSize: MediaQuery.of(context).size.height * 0.03,
fontWeight: FontWeight.w500,
color: Colors.black,
decoration: TextDecoration.none),
),
LoadingBumpingLine.circle(
size: MediaQuery.of(context).size.height * 0.1,
backgroundColor: Colors.black,
)
],
);
}
}
import 'package:flutter/material.dart';
import 'package:loading_animations/loading_animations.dart';
import 'package:video_player/video_player.dart';
class VideoPromotion extends StatefulWidget {
const VideoPromotion({Key? key}) : super(key: key);
@override
State<VideoPromotion> createState() => _VideoPromotionState();
}
class _VideoPromotionState extends State<VideoPromotion> {
VideoPlayerController? _controller;
@override
void initState() {
_controller = VideoPlayerController.network(
'https://media.istockphoto.com/videos/man-in-formal-suit-dancing-and-throwing-money-video-id892877794')
..setLooping(true)
..initialize().then((_) {
// Ensure the first frame is shown after the video is initialized, even before the play button has been pressed.
setState(() {});
});
_controller!.setVolume(0);
_controller!.play();
super.initState();
}
@override
Widget build(BuildContext context) {
return Center(
child: Container(
// color: Colors.green,
margin: EdgeInsets.fromLTRB(
MediaQuery.of(context).size.width * 0.05,
MediaQuery.of(context).size.height * 0.1,
MediaQuery.of(context).size.width * 0.05,
MediaQuery.of(context).size.height * 0.1),
child: _controller!.value.isInitialized
? AspectRatio(
aspectRatio: _controller!.value.aspectRatio,
child: VideoPlayer(_controller!),
)
: Center(
child: Container(
child: LoadingBumpingLine.circle(
size: MediaQuery.of(context).size.height * 0.1,
backgroundColor: Colors.black,
),
),
)),
);
}
}
......@@ -57,6 +57,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.15.0"
csslib:
dependency: transitive
description:
name: csslib
url: "https://pub.dartlang.org"
source: hosted
version: "0.17.1"
cupertino_icons:
dependency: "direct main"
description:
......@@ -100,6 +107,13 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
html:
dependency: transitive
description:
name: html
url: "https://pub.dartlang.org"
source: hosted
version: "0.15.0"
http:
dependency: "direct main"
description:
......@@ -135,6 +149,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.1"
loading_animations:
dependency: "direct main"
description:
name: loading_animations
url: "https://pub.dartlang.org"
source: hosted
version: "2.2.0"
matcher:
dependency: transitive
description:
......@@ -170,6 +191,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.2"
provider:
dependency: transitive
description:
......@@ -245,6 +273,41 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1"
video_player:
dependency: "direct main"
description:
name: video_player
url: "https://pub.dartlang.org"
source: hosted
version: "2.3.0"
video_player_android:
dependency: transitive
description:
name: video_player_android
url: "https://pub.dartlang.org"
source: hosted
version: "2.3.1"
video_player_avfoundation:
dependency: transitive
description:
name: video_player_avfoundation
url: "https://pub.dartlang.org"
source: hosted
version: "2.3.1"
video_player_platform_interface:
dependency: transitive
description:
name: video_player_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "5.1.0"
video_player_web:
dependency: transitive
description:
name: video_player_web
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.7"
sdks:
dart: ">=2.16.1 <3.0.0"
flutter: ">=1.20.0"
flutter: ">=2.8.0"
......@@ -34,7 +34,9 @@ dependencies:
flutter_bloc: ^8.0.1
http: ^0.13.4
intl: ^0.17.0
loading_animations: ^2.2.0
url_strategy: ^0.2.0
video_player: ^2.3.0
dev_dependencies:
flutter_lints: ^1.0.0
......@@ -51,8 +53,8 @@ flutter:
# the material Icons class.
uses-material-design: true
# To add assets to your application, add an assets section, like this:
# assets:
# - images/a_dot_burr.jpeg
assets:
- assets/file.json
# - images/a_dot_ham.jpeg
# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware.
......
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