Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
S
second_display
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Dio Maulana
second_display
Commits
04a97fbd
Commit
04a97fbd
authored
Mar 16, 2022
by
Dio Maulana
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
config from API and add Video
parent
cfeb0e2f
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
1247 additions
and
114 deletions
+1247
-114
file.json
assets/file.json
+622
-0
api.dart
lib/api/api.dart
+107
-23
config_display_blog.dart
lib/bloc/config_display_blog.dart
+18
-0
orders_bloc.dart
lib/bloc/orders_bloc.dart
+2
-8
config.dart
lib/helper/config.dart
+19
-3
main.dart
lib/main.dart
+5
-1
config_display.dart
lib/models/config_display.dart
+21
-0
order_detail.dart
lib/models/order_detail.dart
+12
-4
orders.dart
lib/models/orders.dart
+19
-8
carousel.dart
lib/ui/carousel.dart
+4
-3
main_page.dart
lib/ui/main_page.dart
+45
-19
orders.dart
lib/ui/orders.dart
+192
-42
splash.dart
lib/ui/splash.dart
+58
-0
video_promotion.dart
lib/ui/video_promotion.dart
+55
-0
pubspec.lock
pubspec.lock
+64
-1
pubspec.yaml
pubspec.yaml
+4
-2
No files found.
assets/file.json
0 → 100644
View file @
04a97fbd
{
"status"
:
"ok"
,
"code"
:
"OK"
,
"msg"
:
""
,
"data"
:
{
"order"
:
{
"id"
:
"a13004c9ba18459586212b7155d7348e"
,
"business_date"
:
"2022-03-15"
,
"bdy"
:
2022
,
"bdm"
:
3
,
"bdd"
:
15
,
"bdh"
:
11
,
"bdi"
:
0
,
"start_time"
:
"2022-03-15T04:00:46"
,
"sth"
:
11
,
"sti"
:
0
,
"transaction_time"
:
""
,
"duration"
:
19845
,
"counter"
:
""
,
"table_key"
:
"62559116f816440b94e46b10be08ad3e"
,
"table_name"
:
"I02"
,
"order_type"
:
0
,
"kind"
:
"Normal"
,
"table_section_id"
:
"68fb6b92-901d-4b49-bec0-3a0bbd2c3018"
,
"table_section_name"
:
"INDOOR"
,
"order_user_id"
:
"d31d7ad3-ba86-4ea3-9300-cb99c9e2ac3f"
,
"order_user_name"
:
"Kasir"
,
"cashier_user_id"
:
null
,
"cashier_user_name"
:
""
,
"base_total"
:
"232454.00"
,
"discount_amount"
:
"0.00"
,
"tax_base_undiscounted"
:
"232454.00"
,
"tax_base"
:
"232454.00"
,
"tax_amount"
:
"23246.00"
,
"tax_sales"
:
"23246.00"
,
"tax_percent"
:
"0.00"
,
"subtotal"
:
"232454.00"
,
"rounding"
:
"0.00"
,
"total"
:
"255700.00"
,
"pax"
:
1
,
"note"
:
""
,
"name"
:
""
,
"pbn"
:
""
,
"print_count"
:
0
,
"is_locked"
:
false
,
"flags"
:
""
,
"order_detail"
:
[
{
"id"
:
"be2b6f7615634af296e51315d9d92e58"
,
"ordering"
:
0
,
"brand_id"
:
"083dfff6-7489-40c8-af89-05c3122c8c29"
,
"brand_code"
:
"EXC"
,
"branch_id"
:
"b04f92ae-b389-469d-9afd-42e6ab3d8ffc"
,
"branch_code"
:
"PMA"
,
"business_date"
:
"2022-03-15"
,
"item_category_id"
:
"3922c774-07d8-499e-abc0-0f7e113f8aa1"
,
"item_category_name"
:
"FOOD - TEST KALAU NAMANYA PANJANG"
,
"item_subcategory_id"
:
"e5d5f314-482e-4b9d-b40c-4a7ec59fda5a"
,
"item_subcategory_name"
:
"FI - EXC COMPANIONS"
,
"item_id"
:
"d65be82e-262b-4ece-8e78-00e3ae83f2f2"
,
"parent_item_code"
:
""
,
"price_set"
:
{
"id"
:
"c0f1befaf9b64d7bbd1410d06f55055b"
,
"brand_name"
:
"Excelso"
,
"name"
:
"P-JAKARTA"
},
"promotion_id"
:
null
,
"promotion_code"
:
""
,
"user_id"
:
"d31d7ad3-ba86-4ea3-9300-cb99c9e2ac3f"
,
"user_name"
:
"Kasir"
,
"quantity"
:
"1.000"
,
"price"
:
"78000.00"
,
"original_price"
:
"78000.00"
,
"base_total"
:
"78000.00"
,
"original_total"
:
"78000.00"
,
"discount_total"
:
"0.00"
,
"subtotal"
:
"78000.00"
,
"discount"
:
null
,
"discount_value"
:
"0.00"
,
"discount_percent"
:
"0.00"
,
"discount_is_value"
:
false
,
"custom_discount_percent"
:
"0.00"
,
"custom_discount_value"
:
"0.00"
,
"discount_is_custom"
:
false
,
"tax_preset"
:
{
"id"
:
"0ad791ce5d2545d7a1face07dda510a6"
,
"brand"
:
"Excelso"
,
"name"
:
"PB1"
,
"code"
:
"PB1"
,
"bill_name"
:
"PB1"
,
"amount"
:
"10.00"
,
"rounding_type"
:
2
,
"is_service_taxable"
:
true
,
"is_charge1_taxable"
:
false
,
"is_charge2_taxable"
:
false
,
"is_charge3_taxable"
:
false
,
"is_inclusive"
:
false
,
"tax_mode"
:
1
,
"priority"
:
1
},
"tax_base_undiscounted"
:
"78000.00"
,
"tax_base"
:
"78000.00"
,
"tax_percent"
:
"10.00"
,
"tax_sales"
:
"7800.00"
,
"tax_service"
:
"0.00"
,
"tax_total"
:
"7800.00"
,
"service_percent"
:
"0.00"
,
"service_value"
:
"0.00"
,
"total"
:
"85800.00"
,
"rate"
:
"1.00"
,
"code"
:
"10JFD0301000061"
,
"name"
:
"Dory Sambal Sereh with Sautee Corn Peas & Butter Rice"
,
"original_name"
:
"Dory Sambal Sereh with Sautee Corn Peas & Butter Rice"
,
"alt_name"
:
""
,
"description"
:
""
,
"void_reason"
:
null
,
"mode"
:
0
,
"price_state"
:
0
,
"is_printed"
:
false
,
"is_print_local"
:
false
,
"printer"
:
null
,
"is_permanent"
:
false
,
"is_prevent_delete"
:
false
,
"build_number"
:
""
,
"order_id"
:
"a13004c9-ba18-4595-8621-2b7155d7348e"
,
"order_options"
:
""
,
"order_detail_options"
:
[],
"create_stamp"
:
"2022-03-15T08:53:48.957Z"
},
{
"id"
:
"465263f1b37047249e3f723458bfec15"
,
"ordering"
:
0
,
"brand_id"
:
"083dfff6-7489-40c8-af89-05c3122c8c29"
,
"brand_code"
:
"EXC"
,
"branch_id"
:
"b04f92ae-b389-469d-9afd-42e6ab3d8ffc"
,
"branch_code"
:
"PMA"
,
"business_date"
:
"2022-03-15"
,
"item_category_id"
:
"3922c774-07d8-499e-abc0-0f7e113f8aa1"
,
"item_category_name"
:
"FOOD - TEST KALAU NAMANYA PANJANG"
,
"item_subcategory_id"
:
"e5d5f314-482e-4b9d-b40c-4a7ec59fda5a"
,
"item_subcategory_name"
:
"FI - EXC COMPANIONS"
,
"item_id"
:
"55164787-9649-45e9-99ef-1d5d8579519f"
,
"parent_item_code"
:
""
,
"price_set"
:
{
"id"
:
"c0f1befaf9b64d7bbd1410d06f55055b"
,
"brand_name"
:
"Excelso"
,
"name"
:
"P-JAKARTA"
},
"promotion_id"
:
null
,
"promotion_code"
:
""
,
"user_id"
:
"d31d7ad3-ba86-4ea3-9300-cb99c9e2ac3f"
,
"user_name"
:
"Kasir"
,
"quantity"
:
"1.000"
,
"price"
:
"50000.00"
,
"original_price"
:
"50000.00"
,
"base_total"
:
"50000.00"
,
"original_total"
:
"50000.00"
,
"discount_total"
:
"0.00"
,
"subtotal"
:
"50000.00"
,
"discount"
:
null
,
"discount_value"
:
"0.00"
,
"discount_percent"
:
"0.00"
,
"discount_is_value"
:
false
,
"custom_discount_percent"
:
"0.00"
,
"custom_discount_value"
:
"0.00"
,
"discount_is_custom"
:
false
,
"tax_preset"
:
{
"id"
:
"0ad791ce5d2545d7a1face07dda510a6"
,
"brand"
:
"Excelso"
,
"name"
:
"PB1"
,
"code"
:
"PB1"
,
"bill_name"
:
"PB1"
,
"amount"
:
"10.00"
,
"rounding_type"
:
2
,
"is_service_taxable"
:
true
,
"is_charge1_taxable"
:
false
,
"is_charge2_taxable"
:
false
,
"is_charge3_taxable"
:
false
,
"is_inclusive"
:
false
,
"tax_mode"
:
1
,
"priority"
:
1
},
"tax_base_undiscounted"
:
"50000.00"
,
"tax_base"
:
"50000.00"
,
"tax_percent"
:
"10.00"
,
"tax_sales"
:
"5000.00"
,
"tax_service"
:
"0.00"
,
"tax_total"
:
"5000.00"
,
"service_percent"
:
"0.00"
,
"service_value"
:
"0.00"
,
"total"
:
"55000.00"
,
"rate"
:
"1.00"
,
"code"
:
"10JFD0301000052"
,
"name"
:
"BUND CHEESY GARLIC CHICKEN BUN+IC CAFE LATTE"
,
"original_name"
:
"BUND CHEESY GARLIC CHICKEN BUN+IC CAFE LATTE"
,
"alt_name"
:
""
,
"description"
:
""
,
"void_reason"
:
null
,
"mode"
:
0
,
"price_state"
:
0
,
"is_printed"
:
false
,
"is_print_local"
:
false
,
"printer"
:
null
,
"is_permanent"
:
false
,
"is_prevent_delete"
:
false
,
"build_number"
:
""
,
"order_id"
:
"a13004c9-ba18-4595-8621-2b7155d7348e"
,
"order_options"
:
""
,
"order_detail_options"
:
[],
"create_stamp"
:
"2022-03-15T08:46:25.372Z"
},
{
"id"
:
"f0f96e9b0ffe4534a5724ac1f32c4d06"
,
"ordering"
:
0
,
"brand_id"
:
"083dfff6-7489-40c8-af89-05c3122c8c29"
,
"brand_code"
:
"EXC"
,
"branch_id"
:
"b04f92ae-b389-469d-9afd-42e6ab3d8ffc"
,
"branch_code"
:
"PMA"
,
"business_date"
:
"2022-03-15"
,
"item_category_id"
:
"0953e847-2df6-4a47-b7a3-848b15c610c4"
,
"item_category_name"
:
"BEVERAGE"
,
"item_subcategory_id"
:
"93d2631f-eee7-4f37-b64f-f9eeff40a02b"
,
"item_subcategory_name"
:
"BI - EXC GOURMET COFFEE"
,
"item_id"
:
"320e4acd-8c47-440e-8ac0-dc0c4374b7fc"
,
"parent_item_code"
:
""
,
"price_set"
:
{
"id"
:
"c0f1befaf9b64d7bbd1410d06f55055b"
,
"brand_name"
:
"Excelso"
,
"name"
:
"P-JAKARTA"
},
"promotion_id"
:
null
,
"promotion_code"
:
""
,
"user_id"
:
"d31d7ad3-ba86-4ea3-9300-cb99c9e2ac3f"
,
"user_name"
:
"Kasir"
,
"quantity"
:
"2.000"
,
"price"
:
"3000.00"
,
"original_price"
:
"3000.00"
,
"base_total"
:
"6000.00"
,
"original_total"
:
"6000.00"
,
"discount_total"
:
"0.00"
,
"subtotal"
:
"6000.00"
,
"discount"
:
null
,
"discount_value"
:
"0.00"
,
"discount_percent"
:
"0.00"
,
"discount_is_value"
:
false
,
"custom_discount_percent"
:
"0.00"
,
"custom_discount_value"
:
"0.00"
,
"discount_is_custom"
:
false
,
"tax_preset"
:
{
"id"
:
"0ad791ce5d2545d7a1face07dda510a6"
,
"brand"
:
"Excelso"
,
"name"
:
"PB1"
,
"code"
:
"PB1"
,
"bill_name"
:
"PB1"
,
"amount"
:
"10.00"
,
"rounding_type"
:
2
,
"is_service_taxable"
:
true
,
"is_charge1_taxable"
:
false
,
"is_charge2_taxable"
:
false
,
"is_charge3_taxable"
:
false
,
"is_inclusive"
:
false
,
"tax_mode"
:
1
,
"priority"
:
1
},
"tax_base_undiscounted"
:
"6000.00"
,
"tax_base"
:
"6000.00"
,
"tax_percent"
:
"10.00"
,
"tax_sales"
:
"600.00"
,
"tax_service"
:
"0.00"
,
"tax_total"
:
"600.00"
,
"service_percent"
:
"0.00"
,
"service_value"
:
"0.00"
,
"total"
:
"6600.00"
,
"rate"
:
"1.00"
,
"code"
:
"11"
,
"name"
:
"A KOPI"
,
"original_name"
:
"A KOPI"
,
"alt_name"
:
""
,
"description"
:
""
,
"void_reason"
:
null
,
"mode"
:
0
,
"price_state"
:
0
,
"is_printed"
:
true
,
"is_print_local"
:
false
,
"printer"
:
null
,
"is_permanent"
:
false
,
"is_prevent_delete"
:
false
,
"build_number"
:
""
,
"order_id"
:
"a13004c9-ba18-4595-8621-2b7155d7348e"
,
"order_options"
:
"No Sugar; Extra Sugar"
,
"order_detail_options"
:
[
{
"id"
:
"5600c00375d449349954fd3702406d98"
,
"status"
:
2
,
"ordering"
:
0
,
"brand_code"
:
"EXC"
,
"branch_code"
:
"PMA"
,
"option_category"
:
{
"id"
:
"6f0ff66feec54fa4be9b54a0c87f8386"
,
"brand"
:
"Excelso"
,
"name"
:
"Coffee"
,
"ordering"
:
0
},
"option_category_name"
:
"Coffee"
,
"option"
:
{
"id"
:
"4efdef9ac085457fa65a4eb4e79e172b"
,
"brand"
:
"Excelso"
,
"option_category"
:
{
"id"
:
"6f0ff66feec54fa4be9b54a0c87f8386"
,
"brand"
:
"Excelso"
,
"name"
:
"Coffee"
,
"ordering"
:
0
},
"option_category_name"
:
"Coffee"
,
"code"
:
"NOSUGAR"
,
"name"
:
"No Sugar"
,
"alt_name"
:
""
,
"is_global"
:
false
,
"is_print_local"
:
false
,
"ordering"
:
0
,
"color"
:
"FFFFFF"
,
"text_color"
:
"000000"
},
"code"
:
"NOSUGAR"
,
"name"
:
"No Sugar"
,
"alt_name"
:
""
,
"quantity"
:
"1.00"
,
"is_print_local"
:
false
,
"build_number"
:
""
},
{
"id"
:
"9c44ce4f0d574b80977c43459024f1dc"
,
"status"
:
2
,
"ordering"
:
0
,
"brand_code"
:
"EXC"
,
"branch_code"
:
"PMA"
,
"option_category"
:
{
"id"
:
"6f0ff66feec54fa4be9b54a0c87f8386"
,
"brand"
:
"Excelso"
,
"name"
:
"Coffee"
,
"ordering"
:
0
},
"option_category_name"
:
"Coffee"
,
"option"
:
{
"id"
:
"5725ba5a315340d0aa5afc85d30cf8e6"
,
"brand"
:
"Excelso"
,
"option_category"
:
{
"id"
:
"6f0ff66feec54fa4be9b54a0c87f8386"
,
"brand"
:
"Excelso"
,
"name"
:
"Coffee"
,
"ordering"
:
0
},
"option_category_name"
:
"Coffee"
,
"code"
:
"EXTRASUGAR"
,
"name"
:
"Extra Sugar"
,
"alt_name"
:
""
,
"is_global"
:
false
,
"is_print_local"
:
false
,
"ordering"
:
0
,
"color"
:
"FFFFFF"
,
"text_color"
:
"000000"
},
"code"
:
"EXTRASUGAR"
,
"name"
:
"Extra Sugar"
,
"alt_name"
:
""
,
"quantity"
:
"1.00"
,
"is_print_local"
:
false
,
"build_number"
:
""
}
],
"create_stamp"
:
"2022-03-15T04:02:02.041Z"
},
{
"id"
:
"402fd272179a453c9fc3699ec21f8682"
,
"ordering"
:
0
,
"brand_id"
:
"083dfff6-7489-40c8-af89-05c3122c8c29"
,
"brand_code"
:
"EXC"
,
"branch_id"
:
"b04f92ae-b389-469d-9afd-42e6ab3d8ffc"
,
"branch_code"
:
"PMA"
,
"business_date"
:
"2022-03-15"
,
"item_category_id"
:
"0953e847-2df6-4a47-b7a3-848b15c610c4"
,
"item_category_name"
:
"BEVERAGE"
,
"item_subcategory_id"
:
"93d2631f-eee7-4f37-b64f-f9eeff40a02b"
,
"item_subcategory_name"
:
"BI - EXC GOURMET COFFEE"
,
"item_id"
:
"320e4acd-8c47-440e-8ac0-dc0c4374b7fc"
,
"parent_item_code"
:
""
,
"price_set"
:
{
"id"
:
"c0f1befaf9b64d7bbd1410d06f55055b"
,
"brand_name"
:
"Excelso"
,
"name"
:
"P-JAKARTA"
},
"promotion_id"
:
null
,
"promotion_code"
:
""
,
"user_id"
:
"d31d7ad3-ba86-4ea3-9300-cb99c9e2ac3f"
,
"user_name"
:
"Kasir"
,
"quantity"
:
"1.000"
,
"price"
:
"3000.00"
,
"original_price"
:
"3000.00"
,
"base_total"
:
"3000.00"
,
"original_total"
:
"3000.00"
,
"discount_total"
:
"0.00"
,
"subtotal"
:
"3000.00"
,
"discount"
:
null
,
"discount_value"
:
"0.00"
,
"discount_percent"
:
"0.00"
,
"discount_is_value"
:
false
,
"custom_discount_percent"
:
"0.00"
,
"custom_discount_value"
:
"0.00"
,
"discount_is_custom"
:
false
,
"tax_preset"
:
{
"id"
:
"0ad791ce5d2545d7a1face07dda510a6"
,
"brand"
:
"Excelso"
,
"name"
:
"PB1"
,
"code"
:
"PB1"
,
"bill_name"
:
"PB1"
,
"amount"
:
"10.00"
,
"rounding_type"
:
2
,
"is_service_taxable"
:
true
,
"is_charge1_taxable"
:
false
,
"is_charge2_taxable"
:
false
,
"is_charge3_taxable"
:
false
,
"is_inclusive"
:
false
,
"tax_mode"
:
1
,
"priority"
:
1
},
"tax_base_undiscounted"
:
"3000.00"
,
"tax_base"
:
"3000.00"
,
"tax_percent"
:
"10.00"
,
"tax_sales"
:
"300.00"
,
"tax_service"
:
"0.00"
,
"tax_total"
:
"300.00"
,
"service_percent"
:
"0.00"
,
"service_value"
:
"0.00"
,
"total"
:
"3300.00"
,
"rate"
:
"1.00"
,
"code"
:
"11"
,
"name"
:
"A KOPI"
,
"original_name"
:
"A KOPI"
,
"alt_name"
:
""
,
"description"
:
""
,
"void_reason"
:
null
,
"mode"
:
0
,
"price_state"
:
0
,
"is_printed"
:
true
,
"is_print_local"
:
false
,
"printer"
:
null
,
"is_permanent"
:
false
,
"is_prevent_delete"
:
false
,
"build_number"
:
""
,
"order_id"
:
"a13004c9-ba18-4595-8621-2b7155d7348e"
,
"order_options"
:
""
,
"order_detail_options"
:
[],
"create_stamp"
:
"2022-03-15T04:01:46.527Z"
},
{
"id"
:
"5563563e72b2456591af563bce2647b3"
,
"ordering"
:
0
,
"brand_id"
:
"083dfff6-7489-40c8-af89-05c3122c8c29"
,
"brand_code"
:
"EXC"
,
"branch_id"
:
"b04f92ae-b389-469d-9afd-42e6ab3d8ffc"
,
"branch_code"
:
"PMA"
,
"business_date"
:
"2022-03-15"
,
"item_category_id"
:
"0953e847-2df6-4a47-b7a3-848b15c610c4"
,
"item_category_name"
:
"BEVERAGE"
,
"item_subcategory_id"
:
"ce944289-6a9b-47f0-9300-70d9e218f261"
,
"item_subcategory_name"
:
"BII - EXC BLEND COFFEE"
,
"item_id"
:
"a94f3848-b9f8-49cf-8390-d767c11dd16a"
,
"parent_item_code"
:
""
,
"price_set"
:
{
"id"
:
"c0f1befaf9b64d7bbd1410d06f55055b"
,
"brand_name"
:
"Excelso"
,
"name"
:
"P-JAKARTA"
},
"promotion_id"
:
null
,
"promotion_code"
:
""
,
"user_id"
:
"d31d7ad3-ba86-4ea3-9300-cb99c9e2ac3f"
,
"user_name"
:
"Kasir"
,
"quantity"
:
"2.000"
,
"price"
:
"47727.00"
,
"original_price"
:
"47727.27"
,
"base_total"
:
"95454.00"
,
"original_total"
:
"95454.54"
,
"discount_total"
:
"0.00"
,
"subtotal"
:
"95454.00"
,
"discount"
:
null
,
"discount_value"
:
"0.00"
,
"discount_percent"
:
"0.00"
,
"discount_is_value"
:
false
,
"custom_discount_percent"
:
"0.00"
,
"custom_discount_value"
:
"0.00"
,
"discount_is_custom"
:
false
,
"tax_preset"
:
{
"id"
:
"0ad791ce5d2545d7a1face07dda510a6"
,
"brand"
:
"Excelso"
,
"name"
:
"PB1"
,
"code"
:
"PB1"
,
"bill_name"
:
"PB1"
,
"amount"
:
"10.00"
,
"rounding_type"
:
2
,
"is_service_taxable"
:
true
,
"is_charge1_taxable"
:
false
,
"is_charge2_taxable"
:
false
,
"is_charge3_taxable"
:
false
,
"is_inclusive"
:
false
,
"tax_mode"
:
1
,
"priority"
:
1
},
"tax_base_undiscounted"
:
"95454.00"
,
"tax_base"
:
"95454.00"
,
"tax_percent"
:
"10.00"
,
"tax_sales"
:
"9546.00"
,
"tax_service"
:
"0.00"
,
"tax_total"
:
"9546.00"
,
"service_percent"
:
"0.00"
,
"service_value"
:
"0.00"
,
"total"
:
"105000.00"
,
"rate"
:
"1.00"
,
"code"
:
"10JBV0201000037"
,
"name"
:
"CAPPUCCINO"
,
"original_name"
:
"CAPPUCCINO"
,
"alt_name"
:
""
,
"description"
:
""
,
"void_reason"
:
null
,
"mode"
:
0
,
"price_state"
:
0
,
"is_printed"
:
true
,
"is_print_local"
:
false
,
"printer"
:
null
,
"is_permanent"
:
false
,
"is_prevent_delete"
:
false
,
"build_number"
:
""
,
"order_id"
:
"a13004c9-ba18-4595-8621-2b7155d7348e"
,
"order_options"
:
"No Ice; No Sugar"
,
"order_detail_options"
:
[
{
"id"
:
"3a8adb2f5030417684b2194433890269"
,
"status"
:
2
,
"ordering"
:
0
,
"brand_code"
:
"EXC"
,
"branch_code"
:
"PMA"
,
"option_category"
:
{
"id"
:
"6f0ff66feec54fa4be9b54a0c87f8386"
,
"brand"
:
"Excelso"
,
"name"
:
"Coffee"
,
"ordering"
:
0
},
"option_category_name"
:
"Coffee"
,
"option"
:
{
"id"
:
"035c99d5065a4fe3b90b04e2789ff1da"
,
"brand"
:
"Excelso"
,
"option_category"
:
{
"id"
:
"6f0ff66feec54fa4be9b54a0c87f8386"
,
"brand"
:
"Excelso"
,
"name"
:
"Coffee"
,
"ordering"
:
0
},
"option_category_name"
:
"Coffee"
,
"code"
:
"NOICE"
,
"name"
:
"No Ice"
,
"alt_name"
:
""
,
"is_global"
:
false
,
"is_print_local"
:
false
,
"ordering"
:
0
,
"color"
:
"FFFFFF"
,
"text_color"
:
"000000"
},
"code"
:
"NOICE"
,
"name"
:
"No Ice"
,
"alt_name"
:
""
,
"quantity"
:
"1.00"
,
"is_print_local"
:
false
,
"build_number"
:
""
},
{
"id"
:
"f070c2b5aa33453fa3f8259ddabb9cb9"
,
"status"
:
2
,
"ordering"
:
0
,
"brand_code"
:
"EXC"
,
"branch_code"
:
"PMA"
,
"option_category"
:
{
"id"
:
"6f0ff66feec54fa4be9b54a0c87f8386"
,
"brand"
:
"Excelso"
,
"name"
:
"Coffee"
,
"ordering"
:
0
},
"option_category_name"
:
"Coffee"
,
"option"
:
{
"id"
:
"4efdef9ac085457fa65a4eb4e79e172b"
,
"brand"
:
"Excelso"
,
"option_category"
:
{
"id"
:
"6f0ff66feec54fa4be9b54a0c87f8386"
,
"brand"
:
"Excelso"
,
"name"
:
"Coffee"
,
"ordering"
:
0
},
"option_category_name"
:
"Coffee"
,
"code"
:
"NOSUGAR"
,
"name"
:
"No Sugar"
,
"alt_name"
:
""
,
"is_global"
:
false
,
"is_print_local"
:
false
,
"ordering"
:
0
,
"color"
:
"FFFFFF"
,
"text_color"
:
"000000"
},
"code"
:
"NOSUGAR"
,
"name"
:
"No Sugar"
,
"alt_name"
:
""
,
"quantity"
:
"1.00"
,
"is_print_local"
:
false
,
"build_number"
:
""
}
],
"create_stamp"
:
"2022-03-15T04:01:09.526Z"
}
],
"order_payment"
:
[],
"payment_paid"
:
0
,
"payment_owed"
:
"255700.00"
}
}
}
\ No newline at end of file
lib/api/api.dart
View file @
04a97fbd
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
[];
}
}
}
lib/bloc/config_display_blog.dart
0 → 100644
View file @
04a97fbd
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
);
});
}
}
lib/bloc/orders_bloc.dart
View file @
04a97fbd
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
();
...
...
lib/helper/config.dart
View file @
04a97fbd
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'
,
...
...
lib/main.dart
View file @
04a97fbd
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
(),
},
),
);
...
...
lib/models/config_display.dart
0 → 100644
View file @
04a97fbd
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'
]);
}
}
lib/models/order_detail.dart
View file @
04a97fbd
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
(),
);
name:
json
[
'name'
].
toString
(),
total:
json
[
'subtotal'
].
toString
(),
quantity:
json
[
'quantity'
].
toString
(),
optionOrder:
json
[
'order_options'
]);
}
}
lib/models/orders.dart
View file @
04a97fbd
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
,
required
this
.
total
,
required
this
.
discount_amount
,
required
this
.
orderCount
,
required
this
.
subtotal
,
required
this
.
tax
});
CustomerOrders
({
required
this
.
id
,
required
this
.
total
,
required
this
.
discount_amount
,
required
this
.
orderCount
,
required
this
.
subtotal
,
required
this
.
tax
,
required
this
.
pax
,
required
this
.
table_name
,
required
this
.
table_section_name
,
required
this
.
dateOrder
,
required
this
.
order_user_name
,
});
}
lib/ui/carousel.dart
View file @
04a97fbd
...
...
@@ -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
(
...
...
lib/ui/main_page.dart
View file @
04a97fbd
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
(
children:
[
Container
(
height:
MediaQuery
.
of
(
context
).
size
.
height
,
width:
MediaQuery
.
of
(
context
).
size
.
width
*
0.6
,
// color: Colors.red,
child:
CarouselIndicator
(),
),
Container
(
height:
MediaQuery
.
of
(
context
).
size
.
height
,
width:
MediaQuery
.
of
(
context
).
size
.
width
*
0.4
,
color:
colorBackgroundOrder
,
child:
OrderPage
(),
)
],
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:
[
(
configState
[
0
].
isVideo
==
1
)
?
Container
(
height:
MediaQuery
.
of
(
context
).
size
.
height
,
width:
MediaQuery
.
of
(
context
).
size
.
width
*
0.6
,
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:
backgroundColorOrder
,
child:
OrderPage
(
textColor:
textColor
),
)
],
);
},
)),
);
}
...
...
lib/ui/orders.dart
View file @
04a97fbd
...
...
@@ -2,13 +2,13 @@ import 'package:flutter/material.dart';
import
'package:flutter_bloc/flutter_bloc.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/order_detail.dart'
;
import
'package:second_display/models/orders.dart'
;
import
'package:intl/intl.dart'
;
class
OrderPage
extends
StatelessWidget
{
const
OrderPage
({
Key
?
key
})
:
super
(
key:
key
);
final
Color
textColor
;
const
OrderPage
({
Key
?
key
,
required
this
.
textColor
})
:
super
(
key:
key
);
@override
Widget
build
(
BuildContext
context
)
{
...
...
@@ -22,13 +22,25 @@ class OrderPage extends StatelessWidget {
var
discountAmountText
=
formatCurrency
().
format
(
discountAmount
);
var
subTotalAmountText
=
formatCurrency
().
format
(
subTotalAmount
);
var
taxAmountText
=
formatCurrency
().
format
(
taxAmount
);
String
?
timeOrder
;
if
(
list
.
dateOrder
!=
''
)
{
var
dateFormat
=
DateFormat
(
"yyyy-MM-ddTHH:mm:ss"
)
.
parse
(
list
.
dateOrder
,
true
)
.
toLocal
();
var
afterFormat
=
DateFormat
(
'dd MMM yyyy HH:mm:ss'
).
format
(
dateFormat
);
timeOrder
=
afterFormat
.
toString
();
}
else
{
timeOrder
=
''
;
}
return
Container
(
// color: Colors.black.withOpacity(0.8),
margin:
EdgeInsets
.
fromLTRB
(
MediaQuery
.
of
(
context
).
size
.
width
*
0.0
5
,
MediaQuery
.
of
(
context
).
size
.
height
*
0.0
5
,
MediaQuery
.
of
(
context
).
size
.
width
*
0.0
5
,
MediaQuery
.
of
(
context
).
size
.
height
*
0.0
5
),
MediaQuery
.
of
(
context
).
size
.
width
*
0.0
2
,
MediaQuery
.
of
(
context
).
size
.
height
*
0.0
2
,
MediaQuery
.
of
(
context
).
size
.
width
*
0.0
2
,
MediaQuery
.
of
(
context
).
size
.
height
*
0.0
2
),
child:
Column
(
children:
[
Container
(
...
...
@@ -37,15 +49,43 @@ class OrderPage extends StatelessWidget {
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
[
Text
(
list
.
order_user_name
,
style:
TextStyle
(
fontSize:
MediaQuery
.
of
(
context
).
size
.
height
*
0.05
,
color:
textColor
),
Column
(
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
[
Text
(
"Kasir"
,
style:
TextStyle
(
fontSize:
MediaQuery
.
of
(
context
).
size
.
height
*
0.04
,
color:
textColor
),
),
],
)
],
),
),
Container
(
// color: Colors.green,
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
[
Column
(
children:
[
topList
(
context
,
"Order ID: "
+
list
.
id
.
toUpperCase
(),
timeOrder
),
topList
(
context
,
list
.
table_section_name
,
"Tabel Section: "
+
list
.
table_name
),
],
)
],
),
),
Expanded
(
child:
Divider
(
color:
Colors
.
white
,
height:
MediaQuery
.
of
(
context
).
size
.
height
*
0.01
,
thickness:
MediaQuery
.
of
(
context
).
size
.
height
*
0.003
,
)),
Container
(
// color: Colors.blue,
height:
MediaQuery
.
of
(
context
).
size
.
height
*
0.5
,
...
...
@@ -54,6 +94,8 @@ class OrderPage extends StatelessWidget {
return
ListView
.
builder
(
itemCount:
detailOrder
.
length
,
itemBuilder:
(
context
,
i
)
{
var
optionStr
=
detailOrder
[
i
].
optionOrder
;
var
OrderOptionDetail
=
optionStr
.
split
(
';'
);
var
amountEachOrder
=
double
.
tryParse
(
detailOrder
[
i
].
total
)
??
0
;
var
amountEachOrderText
=
...
...
@@ -64,23 +106,56 @@ class OrderPage extends StatelessWidget {
Column
(
children:
[
Container
(
// color: Colors.white,
height:
MediaQuery
.
of
(
context
).
size
.
height
*
0.05
,
margin:
EdgeInsets
.
only
(
top:
MediaQuery
.
of
(
context
).
size
.
height
*
0.005
,
bottom:
MediaQuery
.
of
(
context
).
size
.
height
*
0
.005
),
0
),
child:
Row
(
children:
[
listOforder
(
context
,
Alignment
.
centerLeft
,
"1 "
+
detailOrder
[
i
].
name
),
listOforder
(
context
,
Alignment
.
centerLeft
,
double
.
tryParse
(
detailOrder
[
i
].
quantity
)
.
toString
()
+
" x "
+
detailOrder
[
i
].
name
),
listOforder
(
context
,
Alignment
.
centerRight
,
amountEachOrderText
)
],
),
)
),
for
(
int
i
=
0
;
i
<
OrderOptionDetail
.
length
;
i
++)
Container
(
height:
MediaQuery
.
of
(
context
).
size
.
height
*
0.02
,
margin:
EdgeInsets
.
only
(
top:
MediaQuery
.
of
(
context
).
size
.
height
*
0.001
,
bottom:
MediaQuery
.
of
(
context
).
size
.
height
*
0.001
),
child:
Row
(
children:
[
listOforderOption
(
context
,
Alignment
.
topLeft
,
OrderOptionDetail
[
i
].
trim
()),
listOforderOption
(
context
,
Alignment
.
centerRight
,
''
)
],
),
),
],
)
],
...
...
@@ -99,34 +174,46 @@ class OrderPage extends StatelessWidget {
SizedBox
(
height:
MediaQuery
.
of
(
context
).
size
.
height
*
0.01
),
Container
(
// color: Colors.green,
height:
MediaQuery
.
of
(
context
).
size
.
height
*
0.2
9
,
height:
MediaQuery
.
of
(
context
).
size
.
height
*
0.2
5
,
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
[
Column
(
children:
[
Text
(
"Total Rincian"
,
style:
TextStyle
(
color:
textColor
,
fontSize:
MediaQuery
.
of
(
context
).
size
.
height
*
0.046
),
),
SizedBox
(
height:
MediaQuery
.
of
(
context
).
size
.
height
*
0.005
),
listTotalRincian
(
context
,
list
.
orderCount
.
toString
()
+
" Item"
,
subTotalAmountText
+
",-"
),
listTotalRincian
(
context
,
"Diskon"
,
discountAmountText
+
",-"
),
listTotalRincian
(
context
,
"Pajak"
,
taxAmountText
+
",-"
),
SizedBox
(
height:
MediaQuery
.
of
(
context
).
size
.
height
*
0.02
),
listTotalRincian
(
context
,
"Total"
,
totalAmountText
+
",-"
),
],
BlocBuilder
<
OrderDetailBloc
,
List
<
CustomerOrdersDetail
>>(
builder:
(
context
,
itemTotal
)
{
late
int
totalQuantity
=
0
;
for
(
int
i
=
0
;
i
<
itemTotal
.
length
;
i
++)
{
var
quantity
=
double
.
tryParse
(
itemTotal
[
i
].
quantity
)
??
0
;
totalQuantity
=
totalQuantity
+
quantity
.
toInt
();
}
return
Column
(
children:
[
// Text(
// "Total Rincian",
// style: TextStyle(
// color: textColor,
// fontSize:
// MediaQuery.of(context).size.height * 0.03),
// ),
SizedBox
(
height:
MediaQuery
.
of
(
context
).
size
.
height
*
0.01
),
listTotalRincian
(
context
,
"Subtotal"
,
subTotalAmountText
+
",-"
),
listTotalRincian
(
context
,
"Diskon"
,
discountAmountText
+
",-"
),
listTotalRincian
(
context
,
"Pajak"
,
taxAmountText
+
",-"
),
listTotalRincian
(
context
,
"Total Item"
,
totalQuantity
.
toString
()),
SizedBox
(
height:
MediaQuery
.
of
(
context
).
size
.
height
*
0.02
),
listTotalRincian
(
context
,
"Total"
,
totalAmountText
+
",-"
),
],
);
},
)
],
),
...
...
@@ -138,12 +225,55 @@ class OrderPage extends StatelessWidget {
);
}
Container
topList
(
BuildContext
context
,
String
kiri
,
String
kanan
)
{
return
Container
(
// color: Colors.green,
margin:
EdgeInsets
.
only
(
top:
MediaQuery
.
of
(
context
).
size
.
height
*
0.0001
,
bottom:
MediaQuery
.
of
(
context
).
size
.
height
*
0.0001
),
child:
Row
(
children:
[
Container
(
// color: Colors.white,
height:
MediaQuery
.
of
(
context
).
size
.
height
*
0.02
,
width:
MediaQuery
.
of
(
context
).
size
.
width
*
0.13
,
child:
Align
(
alignment:
Alignment
.
centerLeft
,
child:
Text
(
kiri
,
style:
TextStyle
(
fontSize:
MediaQuery
.
of
(
context
).
size
.
height
*
0.015
,
color:
textColor
.
withOpacity
(
0.5
)),
),
),
),
Container
(
// color: Colors.white,
height:
MediaQuery
.
of
(
context
).
size
.
height
*
0.02
,
width:
MediaQuery
.
of
(
context
).
size
.
width
*
0.13
,
child:
Align
(
alignment:
Alignment
.
centerRight
,
child:
Text
(
kanan
,
style:
TextStyle
(
fontSize:
MediaQuery
.
of
(
context
).
size
.
height
*
0.015
,
color:
textColor
.
withOpacity
(
0.5
)),
),
),
),
],
),
);
}
NumberFormat
formatCurrency
()
=>
NumberFormat
.
currency
(
locale:
'id'
,
symbol:
'Rp '
,
decimalDigits:
0
);
Container
listTotalRincian
(
BuildContext
context
,
String
textKiri
,
String
textKanan
)
{
return
Container
(
// color: Colors.white,
height:
MediaQuery
.
of
(
context
).
size
.
height
*
0.03
,
margin:
EdgeInsets
.
only
(
top:
MediaQuery
.
of
(
context
).
size
.
height
*
0.0001
,
bottom:
MediaQuery
.
of
(
context
).
size
.
height
*
0.0001
),
...
...
@@ -159,17 +289,37 @@ class OrderPage extends StatelessWidget {
Container
listOforder
(
BuildContext
context
,
Alignment
align
,
String
text
)
{
return
Container
(
// color: Colors.white,
height:
MediaQuery
.
of
(
context
).
size
.
height
*
0.0
5
,
height:
MediaQuery
.
of
(
context
).
size
.
height
*
0.0
6
,
width:
MediaQuery
.
of
(
context
).
size
.
width
*
0.13
,
child:
Align
(
alignment:
align
,
child:
Text
(
text
,
overflow:
TextOverflow
.
ellipsis
,
maxLines:
2
,
style:
TextStyle
(
fontSize:
MediaQuery
.
of
(
context
).
size
.
height
*
0.02
5
,
fontSize:
MediaQuery
.
of
(
context
).
size
.
height
*
0.02
,
color:
textColor
),
),
),
);
}
Container
listOforderOption
(
BuildContext
context
,
Alignment
align
,
String
text
)
{
return
Container
(
// color: Colors.white,
height:
MediaQuery
.
of
(
context
).
size
.
height
*
0.05
,
width:
MediaQuery
.
of
(
context
).
size
.
width
*
0.13
,
child:
Align
(
alignment:
align
,
child:
Text
(
text
,
style:
TextStyle
(
fontSize:
MediaQuery
.
of
(
context
).
size
.
height
*
0.015
,
color:
textColor
.
withOpacity
(
0.7
)),
),
),
);
}
}
lib/ui/splash.dart
0 → 100644
View file @
04a97fbd
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
,
)
],
);
}
}
lib/ui/video_promotion.dart
0 → 100644
View file @
04a97fbd
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
,
),
),
)),
);
}
}
pubspec.lock
View file @
04a97fbd
...
...
@@ -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"
pubspec.yaml
View file @
04a97fbd
...
...
@@ -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.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment