Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
B
Byodv2
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
Byodv2
Commits
c2f92bb8
Commit
c2f92bb8
authored
Oct 07, 2022
by
Dio Maulana
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
webview delivery address and redesign variant modal
parent
208bf8af
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
1053 additions
and
235 deletions
+1053
-235
config.json
assets/config.json
+1
-1
api.dart
lib/api/api.dart
+46
-0
address_user_bloc.dart
lib/bloc/address_user_bloc.dart
+26
-0
helper.dart
lib/helper/helper.dart
+3
-0
button_dialog.dart
lib/helper/widget/button_dialog.dart
+16
-11
style.dart
lib/helper/widget/style.dart
+40
-0
main.dart
lib/main.dart
+9
-2
address_user.dart
lib/models/address_user.dart
+37
-0
bottom_sheet_menu_new.dart
lib/ui/home/bottom_sheet_menu_new.dart
+14
-19
bottom_sheet_variant_new.dart
lib/ui/home/bottom_sheet_variant_new.dart
+179
-0
menu_list_utama.dart
lib/ui/home/menu_list_utama.dart
+12
-3
view_bill_new.dart
lib/ui/viewbill/view_bill_new.dart
+417
-119
app_bar_webview.dart
lib/ui/webview/app_bar_webview.dart
+36
-7
webview.dart
lib/ui/webview/webview.dart
+192
-63
pubspec.lock
pubspec.lock
+23
-9
pubspec.yaml
pubspec.yaml
+2
-1
No files found.
assets/config.json
View file @
c2f92bb8
{
{
"base_url"
:
"https://
7f25
-125-165-111-49.ap.ngrok.io/"
,
"base_url"
:
"https://
6b3f
-125-165-111-49.ap.ngrok.io/"
,
"title"
:
"Ravintola Dev BYOD"
,
"title"
:
"Ravintola Dev BYOD"
,
"isResponsive"
:
true
,
"isResponsive"
:
true
,
"debug"
:
true
"debug"
:
true
...
...
lib/api/api.dart
View file @
c2f92bb8
...
@@ -6,6 +6,7 @@ import 'package:byod/bloc/view_bill.dart';
...
@@ -6,6 +6,7 @@ import 'package:byod/bloc/view_bill.dart';
import
'package:byod/helper/helper.dart'
;
import
'package:byod/helper/helper.dart'
;
import
'package:byod/helper/logger.dart'
;
import
'package:byod/helper/logger.dart'
;
import
'package:byod/helper/prefs.dart'
;
import
'package:byod/helper/prefs.dart'
;
import
'package:byod/models/address_user.dart'
;
import
'package:byod/models/bill.dart'
;
import
'package:byod/models/bill.dart'
;
import
'package:byod/models/bill_detail.dart'
;
import
'package:byod/models/bill_detail.dart'
;
import
'package:byod/models/feedback_option.dart'
;
import
'package:byod/models/feedback_option.dart'
;
...
@@ -42,6 +43,7 @@ import '../models/variants.dart';
...
@@ -42,6 +43,7 @@ import '../models/variants.dart';
// }
// }
// }
// }
const
String
endPoint
=
'romi/api/v2/byod/'
;
const
String
endPoint
=
'romi/api/v2/byod/'
;
const
String
endPointRdm
=
'rdm/api/'
;
class
Api
{
class
Api
{
static
Future
<
dynamic
>
getBranch
(
String
branchCode
,
String
brandCode
,
static
Future
<
dynamic
>
getBranch
(
String
branchCode
,
String
brandCode
,
...
@@ -2009,4 +2011,48 @@ class Api {
...
@@ -2009,4 +2011,48 @@ class Api {
return
false
;
return
false
;
}
}
}
}
static
Future
<
Address
>
getAddress
()
async
{
String
baseUrl
=
getBaseUrl
();
String
apiUrl
=
"
$baseUrl${endPointRdm}
get_address/"
;
String
sessionId
=
getSessionId
();
Address
defaultResult
=
Address
(
id:
''
,
label:
''
,
address:
''
,
locationDetail:
''
,
lat:
''
,
long:
''
,
recepientName:
''
,
recepientPhone:
''
,
notes:
''
,
);
try
{
Map
data
=
{
"session_id"
:
sessionId
,
};
var
bodies
=
jsonEncode
(
data
);
var
jsonObject
=
await
httpPost
(
apiUrl
,
bodies
,
'getAddress'
);
if
(
jsonObject
!=
false
)
{
if
(
jsonObject
[
'status'
].
toString
().
toLowerCase
()
==
'ok'
)
{
Map
<
String
,
dynamic
>
data
=
jsonObject
[
'data'
];
return
Address
.
json
(
data
);
}
return
defaultResult
;
}
else
{
return
defaultResult
;
}
}
catch
(
e
)
{
if
(
debug
)
{
logd
(
'API CLASS ON API.DART, FUNGSI: getAddress, URL :
$apiUrl
'
,
'ERROR CONNECT TO SERVER, ERROR CATCH :
$e
'
);
}
return
defaultResult
;
}
}
}
}
lib/bloc/address_user_bloc.dart
0 → 100644
View file @
c2f92bb8
import
'package:byod/models/address_user.dart'
;
import
'package:flutter_bloc/flutter_bloc.dart'
;
import
'../api/api.dart'
;
class
AddressUser
extends
Cubit
<
Address
>
{
AddressUser
()
:
super
(
Address
(
id:
''
,
label:
''
,
address:
''
,
locationDetail:
''
,
lat:
''
,
long:
''
,
recepientName:
''
,
recepientPhone:
''
,
notes:
''
,
),
);
void
getAddressUser
()
async
{
var
result
=
await
Api
.
getAddress
();
emit
(
result
);
}
}
lib/helper/helper.dart
View file @
c2f92bb8
...
@@ -619,6 +619,9 @@ const double maxHeightScreens = 600;
...
@@ -619,6 +619,9 @@ const double maxHeightScreens = 600;
const
String
searchIcon
=
'
\
uf002'
;
const
String
searchIcon
=
'
\
uf002'
;
const
double
searchIconSize
=
0.03
;
const
double
searchIconSize
=
0.03
;
const
String
saveIcon
=
'
\
uf0c7'
;
const
double
saveIconSize
=
17
;
const
String
infoCircle
=
'
\
uf05a'
;
const
String
infoCircle
=
'
\
uf05a'
;
const
double
infoCircleSize
=
0.015
;
const
double
infoCircleSize
=
0.015
;
...
...
lib/helper/widget/button_dialog.dart
View file @
c2f92bb8
...
@@ -17,6 +17,7 @@ Future<dynamic> buttonDialogGlobal(
...
@@ -17,6 +17,7 @@ Future<dynamic> buttonDialogGlobal(
Color
okButtonColor
=
Colors
.
indigo
,
Color
okButtonColor
=
Colors
.
indigo
,
Color
cancelButtonColor
=
Colors
.
transparent
,
Color
cancelButtonColor
=
Colors
.
transparent
,
Color
textCancelColor
=
textColorBlack
,
Color
textCancelColor
=
textColorBlack
,
bool
isOkeButtonShow
=
true
,
})
{
})
{
return
showDialog
(
return
showDialog
(
context:
context
,
context:
context
,
...
@@ -39,20 +40,24 @@ Future<dynamic> buttonDialogGlobal(
...
@@ -39,20 +40,24 @@ Future<dynamic> buttonDialogGlobal(
child:
defaultText
(
child:
defaultText
(
context
,
context
,
description
,
description
,
style:
textStyleNormalFont
(
context
),
style:
textStyleDialog
(),
),
),
const
SizedBox
(
height:
10
),
GestureDetector
(
onTap:
()
{
ontapOk
();
},
child:
ButtonComponent
(
buttonColor:
okButtonColor
,
teksButton:
textOnOk
,
),
),
),
),
const
SizedBox
(
height:
10
),
const
SizedBox
(
height:
10
),
(
isOkeButtonShow
)
?
GestureDetector
(
onTap:
()
{
ontapOk
();
},
child:
ButtonComponent
(
buttonColor:
okButtonColor
,
teksButton:
textOnOk
,
),
)
:
const
SizedBox
(),
(
isOkeButtonShow
)
?
const
SizedBox
(
height:
10
)
:
const
SizedBox
(),
GestureDetector
(
GestureDetector
(
onTap:
()
{
onTap:
()
{
ontapCancel
();
ontapCancel
();
...
...
lib/helper/widget/style.dart
View file @
c2f92bb8
...
@@ -46,6 +46,21 @@ TextStyle emojiStyle({
...
@@ -46,6 +46,21 @@ TextStyle emojiStyle({
);
);
}
}
TextStyle
textStyleDialog
(
{
font
=
14
,
Color
color
=
textColorBlack
,
FontWeight
fontWeight
=
FontWeight
.
w400
,
FontStyle
?
fontStyle
,
})
{
return
TextStyle
(
fontFamily:
(
fontFamily
==
''
)
?
null
:
fontFamily
,
fontSize:
font
,
fontWeight:
fontWeight
,
color:
color
,
fontStyle:
fontStyle
,
);
}
TextStyle
historyOrderStyle
(
{
TextStyle
historyOrderStyle
(
{
font
=
12
,
font
=
12
,
Color
color
=
textColorBlack
,
Color
color
=
textColorBlack
,
...
@@ -296,6 +311,18 @@ TextStyle addButton({
...
@@ -296,6 +311,18 @@ TextStyle addButton({
);
);
}
}
TextStyle
addressStyle
(
{
font
=
14
,
Color
color
=
textColorBlack
,
})
{
return
TextStyle
(
fontFamily:
'OpenSans'
,
fontSize:
font
,
fontWeight:
FontWeight
.
w400
,
color:
color
,
);
}
TextStyle
rincianPembayaran
(
{
TextStyle
rincianPembayaran
(
{
font
=
12
,
font
=
12
,
Color
color
=
textColorBlack
,
Color
color
=
textColorBlack
,
...
@@ -347,6 +374,19 @@ TextStyle textAmountButtonBottomCart({
...
@@ -347,6 +374,19 @@ TextStyle textAmountButtonBottomCart({
);
);
}
}
TextStyle
textStyleVariantModal
(
{
font
=
12
,
Color
color
=
textColorBlack
,
FontWeight
fontWeight
=
FontWeight
.
w300
,
})
{
return
TextStyle
(
fontFamily:
(
fontFamily
==
''
)
?
null
:
fontFamily
,
fontSize:
font
,
fontWeight:
fontWeight
,
color:
color
,
);
}
TextStyle
textCountItem
(
{
TextStyle
textCountItem
(
{
font
=
20
,
font
=
20
,
Color
color
=
textInButton
,
Color
color
=
textInButton
,
...
...
lib/main.dart
View file @
c2f92bb8
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
import
'dart:convert'
;
import
'dart:convert'
;
import
'package:byod/bloc/address_user_bloc.dart'
;
import
'package:byod/bloc/category_selection.dart'
;
import
'package:byod/bloc/category_selection.dart'
;
import
'package:byod/bloc/check_voucher.dart'
;
import
'package:byod/bloc/check_voucher.dart'
;
import
'package:byod/bloc/member_info.dart'
;
import
'package:byod/bloc/member_info.dart'
;
...
@@ -16,6 +17,7 @@ import 'package:flutter_easyloading/flutter_easyloading.dart';
...
@@ -16,6 +17,7 @@ import 'package:flutter_easyloading/flutter_easyloading.dart';
import
'package:shared_preferences/shared_preferences.dart'
;
import
'package:shared_preferences/shared_preferences.dart'
;
import
'package:url_strategy/url_strategy.dart'
;
import
'package:url_strategy/url_strategy.dart'
;
import
'package:web_browser_detect/web_browser_detect.dart'
;
import
'package:web_browser_detect/web_browser_detect.dart'
;
import
'package:webview_flutter/webview_flutter.dart'
;
import
'bloc/branch_exist.dart'
;
import
'bloc/branch_exist.dart'
;
import
'bloc/branch_list.dart'
;
import
'bloc/branch_list.dart'
;
...
@@ -34,7 +36,7 @@ import 'bloc/view_bill.dart';
...
@@ -34,7 +36,7 @@ import 'bloc/view_bill.dart';
import
'package:flutter/services.dart'
as
bundle_root
;
import
'package:flutter/services.dart'
as
bundle_root
;
import
'bloc/voucher_list.dart'
;
import
'bloc/voucher_list.dart'
;
import
'ui/
confirm_order/confirm_order
.dart'
;
import
'ui/
webview/webview
.dart'
;
late
SharedPreferences
prefs
;
late
SharedPreferences
prefs
;
bool
isExcelso
=
false
;
bool
isExcelso
=
false
;
...
@@ -192,6 +194,7 @@ class _MyAppState extends State<MyApp> {
...
@@ -192,6 +194,7 @@ class _MyAppState extends State<MyApp> {
BlocProvider
(
create:
(
_
)
=>
SearchHistory
()),
BlocProvider
(
create:
(
_
)
=>
SearchHistory
()),
BlocProvider
(
create:
(
_
)
=>
BranchList
()),
BlocProvider
(
create:
(
_
)
=>
BranchList
()),
BlocProvider
(
create:
(
_
)
=>
SearchBranch
()),
BlocProvider
(
create:
(
_
)
=>
SearchBranch
()),
BlocProvider
(
create:
(
_
)
=>
AddressUser
()),
],
],
child:
MaterialApp
(
child:
MaterialApp
(
title:
(
widget
.
title
==
null
)
?
defaultTitle
:
widget
.
title
,
title:
(
widget
.
title
==
null
)
?
defaultTitle
:
widget
.
title
,
...
@@ -208,7 +211,11 @@ class _MyAppState extends State<MyApp> {
...
@@ -208,7 +211,11 @@ class _MyAppState extends State<MyApp> {
// initialRoute: '/',
// initialRoute: '/',
// routes: {
// routes: {
// '/': (context) => const ConfirmOrder(),
// '/': (context) => WebViewMap(
// titleAppBar: 'Pilih Alamat',
// url:
// 'https://fdr-dev.ravku.com/web/store_url/706400e0-fb59-4317-a73b-8ff76f32f929/',
// ),
// },
// },
// onGenerateRoute: (routes) {
// onGenerateRoute: (routes) {
// return MaterialPageRoute(
// return MaterialPageRoute(
...
...
lib/models/address_user.dart
0 → 100644
View file @
c2f92bb8
class
Address
{
String
id
;
String
label
;
String
address
;
String
locationDetail
;
String
lat
;
String
long
;
String
recepientName
;
String
recepientPhone
;
String
notes
;
Address
({
required
this
.
id
,
required
this
.
label
,
required
this
.
address
,
required
this
.
locationDetail
,
required
this
.
lat
,
required
this
.
long
,
required
this
.
recepientName
,
required
this
.
recepientPhone
,
required
this
.
notes
,
});
factory
Address
.
json
(
Map
<
String
,
dynamic
>
json
)
{
return
Address
(
id:
json
[
'id'
],
label:
json
[
'label'
],
address:
json
[
'address'
],
locationDetail:
json
[
'location_detail'
],
lat:
json
[
'lat'
],
long:
json
[
'long'
],
recepientName:
json
[
'recipient_name'
],
recepientPhone:
json
[
'recipient_phone'
],
notes:
json
[
'notes'
],
);
}
}
lib/ui/home/bottom_sheet_menu_new.dart
View file @
c2f92bb8
import
'package:byod/ui/home/variant_cat_new.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter_bloc/flutter_bloc.dart'
;
import
'package:flutter_bloc/flutter_bloc.dart'
;
...
@@ -132,25 +133,19 @@ class ShowMenuBottomSheet extends StatelessWidget {
...
@@ -132,25 +133,19 @@ class ShowMenuBottomSheet extends StatelessWidget {
1
,
1
,
[]);
// check pada bloc untuk mengethui list arraynya
[]);
// check pada bloc untuk mengethui list arraynya
Navigator
.
push
(
Navigator
.
push
(
context
,
context
,
MaterialPageRoute
(
MaterialPageRoute
(
builder:
(
_
)
=>
VariantCat
(
builder:
(
_
)
=>
VariantCatNew
(
namaMenu:
menuDetail
[
i
].
name
,
initPrice:
variantCategories:
amountParseToInt
(
menuDetail
[
i
].
price
),
menuDetail
[
i
].
variantCat
,
variantCategories:
menuDetail
[
i
].
variantCat
,
initPrice:
amountParseToInt
(
namaMenu:
menuDetail
[
i
].
name
,
menuDetail
[
i
].
price
),
idItem:
menuDetail
[
i
].
id
,
idItem:
menuDetail
[
i
].
id
,
imageUrl:
menuDetail
[
i
].
imageUrlMedium
,
imageUrl:
listCurrentOrder:
list
,
menuDetail
[
i
].
imageUrlMedium
,
),
listCurrentOrder:
list
,
),
orderDetail:
OrderDetail
(
);
allIdVariant:
''
,
totalItem:
0
,
totalHarga:
0
,
note:
''
,
orderVariant:
[]),
)));
}
else
{
}
else
{
Navigator
.
pop
(
context
);
Navigator
.
pop
(
context
);
showModalBottomSheet
(
showModalBottomSheet
(
...
...
lib/ui/home/bottom_sheet_variant_new.dart
0 → 100644
View file @
c2f92bb8
// ignore_for_file: must_be_immutable
import
'package:byod/helper/widget/plus_minus_button.dart'
;
import
'package:byod/helper/widget/style.dart'
;
import
'package:flutter/material.dart'
;
import
'../../helper/helper.dart'
;
import
'../../helper/widget/button_modal.dart'
;
import
'../../models/orders.dart'
;
import
'../../models/variant_categories.dart'
;
class
CustomizeVariantNew
extends
StatelessWidget
{
CustomizeVariantNew
({
super
.
key
,
required
this
.
orders
,
required
this
.
variantCat
,
});
Orders
orders
;
List
<
VariantCategories
>
variantCat
;
@override
Widget
build
(
BuildContext
context
)
{
void
minus
()
{}
void
plus
()
{}
double
widthScreen
=
responsiveWidthScreen
(
context
);
return
Container
(
// width: widthScreen,
height:
MediaQuery
.
of
(
context
).
size
.
height
*
0.8
,
decoration:
const
BoxDecoration
(
borderRadius:
BorderRadius
.
only
(
topLeft:
Radius
.
circular
(
19
),
topRight:
Radius
.
circular
(
19
),
),
color:
backgroundWhite
,
),
child:
Stack
(
children:
[
Container
(
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
paddingLeftRight
),
child:
Column
(
mainAxisSize:
MainAxisSize
.
min
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
const
SizedBox
(
height:
8
,
),
Center
(
child:
Container
(
width:
50
,
height:
3
,
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
7
),
color:
disabledColor
,
),
),
),
const
SizedBox
(
height:
28
,
),
defaultText
(
context
,
'Nasi Ayam Kecap + Telur'
,
maxLines:
2
,
overFlow:
TextOverflow
.
ellipsis
,
style:
textStyleVariantModal
(
font:
20
,
fontWeight:
FontWeight
.
w600
,
),
),
const
SizedBox
(
height:
12
,
),
Expanded
(
child:
ListView
.
builder
(
itemCount:
10
,
itemBuilder:
(
context
,
i
)
{
return
Column
(
children:
[
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
end
,
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
children:
[
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Container
(
padding:
const
EdgeInsets
.
only
(
bottom:
8
),
child:
defaultText
(
context
,
'2 X 25,000'
,
maxLines:
1
,
overFlow:
TextOverflow
.
ellipsis
,
style:
textStyleVariantModal
(),
),
),
Column
(
mainAxisSize:
MainAxisSize
.
min
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
for
(
int
d
=
0
;
d
<
3
;
d
++)
defaultText
(
context
,
'Pedas ke
$d
'
,
maxLines:
1
,
overFlow:
TextOverflow
.
ellipsis
,
)
],
),
Container
(
padding:
const
EdgeInsets
.
only
(
bottom:
8
,
top:
8
,
),
child:
defaultText
(
context
,
'Catatan: catatan....'
,
maxLines:
3
,
overFlow:
TextOverflow
.
ellipsis
,
style:
textStyleVariantModal
(),
),
),
],
),
PlusMinusButton
(
initialValue:
1
,
minus:
minus
,
plus:
plus
,
)
],
),
const
SizedBox
(
height:
12
,
),
const
Divider
(
thickness:
1
,
height:
1
,
color:
dividerGrey
,
),
const
SizedBox
(
height:
16
,
),
],
);
}),
)
],
),
),
Positioned
(
bottom:
0
,
child:
Container
(
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
paddingLeftRight
),
height:
43
,
width:
MediaQuery
.
of
(
context
).
size
.
width
,
decoration:
BoxDecoration
(
color:
buttonColor
,
borderRadius:
BorderRadius
.
circular
(
48
),
),
child:
Center
(
child:
defaultText
(
context
,
'Tambah Variant'
,
style:
addButton
(),
),
),
),
)
],
),
);
}
}
// Positioned(
// bottom: 0,
// child: ButtonComponent(
// buttonColor: buttonColor, teksButton: 'Tambah Variant'),
// )
\ No newline at end of file
lib/ui/home/menu_list_utama.dart
View file @
c2f92bb8
...
@@ -4,6 +4,7 @@ import 'package:byod/bloc/order_bloc.dart';
...
@@ -4,6 +4,7 @@ import 'package:byod/bloc/order_bloc.dart';
import
'package:byod/helper/widget/button_modal.dart'
;
import
'package:byod/helper/widget/button_modal.dart'
;
import
'package:byod/helper/widget/plus_minus_button.dart'
;
import
'package:byod/helper/widget/plus_minus_button.dart'
;
import
'package:byod/models/orders.dart'
;
import
'package:byod/models/orders.dart'
;
import
'package:byod/ui/home/bottom_sheet_variant_new.dart'
;
import
'package:byod/ui/screen_responsive.dart'
;
import
'package:byod/ui/screen_responsive.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter_bloc/flutter_bloc.dart'
;
import
'package:flutter_bloc/flutter_bloc.dart'
;
...
@@ -340,11 +341,19 @@ class MenuListUtama extends StatelessWidget {
...
@@ -340,11 +341,19 @@ class MenuListUtama extends StatelessWidget {
showModalBottomSheet
(
showModalBottomSheet
(
backgroundColor:
Colors
.
white
.
withOpacity
(
0
),
backgroundColor:
Colors
.
white
.
withOpacity
(
0
),
isScrollControlled:
true
,
isScrollControlled:
true
,
shape:
RoundedRectangleBorder
(
borderRadius:
BorderRadius
.
circular
(
19
),
),
context:
context
,
context:
context
,
builder:
(
context
)
{
builder:
(
context
)
{
return
CustomizeVariant
(
// return CustomizeVariant(
orders:
list
[
indexListOrderan
],
// orders: list[indexListOrderan],
variantCat:
menuUtama
.
variantCat
);
// variantCat: menuUtama.variantCat,
// );
return
CustomizeVariantNew
(
orders:
list
[
indexListOrderan
],
variantCat:
menuUtama
.
variantCat
,
);
},
},
);
);
}
}
...
...
lib/ui/viewbill/view_bill_new.dart
View file @
c2f92bb8
...
@@ -6,6 +6,7 @@ import 'package:byod/helper/helper.dart';
...
@@ -6,6 +6,7 @@ import 'package:byod/helper/helper.dart';
import
'package:byod/helper/prefs.dart'
;
import
'package:byod/helper/prefs.dart'
;
import
'package:byod/helper/widget/button_modal.dart'
;
import
'package:byod/helper/widget/button_modal.dart'
;
import
'package:byod/helper/widget/style.dart'
;
import
'package:byod/helper/widget/style.dart'
;
import
'package:byod/models/address_user.dart'
;
import
'package:byod/ui/history_order/history_new.dart'
;
import
'package:byod/ui/history_order/history_new.dart'
;
import
'package:byod/ui/payment/payment_balance.dart'
;
import
'package:byod/ui/payment/payment_balance.dart'
;
import
'package:byod/ui/screen_responsive.dart'
;
import
'package:byod/ui/screen_responsive.dart'
;
...
@@ -17,6 +18,7 @@ import 'package:flutter_easyloading/flutter_easyloading.dart';
...
@@ -17,6 +18,7 @@ import 'package:flutter_easyloading/flutter_easyloading.dart';
import
'package:uuid/uuid.dart'
;
import
'package:uuid/uuid.dart'
;
import
'../../api/api.dart'
;
import
'../../api/api.dart'
;
import
'../../bloc/address_user_bloc.dart'
;
import
'../../bloc/branch_exist.dart'
;
import
'../../bloc/branch_exist.dart'
;
import
'../../bloc/feedback_option.dart'
;
import
'../../bloc/feedback_option.dart'
;
import
'../../bloc/view_bill.dart'
;
import
'../../bloc/view_bill.dart'
;
...
@@ -32,6 +34,7 @@ import '../home/new_home2.dart';
...
@@ -32,6 +34,7 @@ import '../home/new_home2.dart';
import
'../payment/function.dart'
;
import
'../payment/function.dart'
;
import
'../payment/payment.dart'
;
import
'../payment/payment.dart'
;
import
'../payment/payment_voucher.dart'
;
import
'../payment/payment_voucher.dart'
;
import
'../webview/webview.dart'
;
import
'app_bar.dart'
;
import
'app_bar.dart'
;
import
'list_order.dart'
;
import
'list_order.dart'
;
import
'rincian_pembayaran.dart'
;
import
'rincian_pembayaran.dart'
;
...
@@ -69,6 +72,7 @@ class ViewBillNew extends StatelessWidget {
...
@@ -69,6 +72,7 @@ class ViewBillNew extends StatelessWidget {
void
getBillFunc
(
BuildContext
context
)
{
void
getBillFunc
(
BuildContext
context
)
{
if
(!
isHistory
)
{
if
(!
isHistory
)
{
context
.
read
<
ViewBillBloc
>().
getBill
();
context
.
read
<
ViewBillBloc
>().
getBill
();
context
.
read
<
AddressUser
>().
getAddressUser
();
}
else
{
}
else
{
context
.
read
<
ViewBillBloc
>().
getBill
(
context
.
read
<
ViewBillBloc
>().
getBill
(
orderIdH:
orderId
,
orderIdH:
orderId
,
...
@@ -1250,6 +1254,21 @@ class CoreBill extends StatelessWidget {
...
@@ -1250,6 +1254,21 @@ class CoreBill extends StatelessWidget {
}
}
Future
<
dynamic
>
modalBottomSelectOption
(
BuildContext
context
)
{
Future
<
dynamic
>
modalBottomSelectOption
(
BuildContext
context
)
{
void
ontapOkeChangeOutlet
()
{
Navigator
.
pushReplacement
(
context
,
MaterialPageRoute
(
builder:
(
_
)
=>
const
SelectBranch
(
isFormBill:
true
,
),
),
);
}
void
onTapCancelChange
()
{
Navigator
.
pop
(
context
);
}
return
showModalBottomSheet
(
return
showModalBottomSheet
(
backgroundColor:
backgroundWhite
,
backgroundColor:
backgroundWhite
,
context:
context
,
context:
context
,
...
@@ -1287,9 +1306,31 @@ class CoreBill extends StatelessWidget {
...
@@ -1287,9 +1306,31 @@ class CoreBill extends StatelessWidget {
),
),
GestureDetector
(
GestureDetector
(
onTap:
()
{
onTap:
()
{
setIsCustomerDelivery
(
false
);
if
(
getIsPickup
())
{
getBillFunc
(
context
);
setIsCustomerDelivery
(
false
);
Navigator
.
pop
(
context
);
getBillFunc
(
context
);
Navigator
.
pop
(
context
);
}
else
{
String
textOnOk
=
'OK'
;
String
textOnCancel
=
'Batal'
;
String
title
=
'Info'
;
String
description
=
'''
Outlet ini tidak dapat menerima pickup order,
ingin ganti outlet ?
Note: Ganti outlet akan menyebabkan orderan anda saat ini hilang
'''
;
buttonDialogGlobal
(
context
,
title
,
description
,
textOnOk
,
textOnCancel
,
ontapOkeChangeOutlet
,
onTapCancelChange
,
okButtonColor:
buttonColor
,
);
}
},
},
child:
Container
(
child:
Container
(
padding:
const
EdgeInsets
.
only
(
top:
19
,
bottom:
25
,
left:
10
),
padding:
const
EdgeInsets
.
only
(
top:
19
,
bottom:
25
,
left:
10
),
...
@@ -1313,9 +1354,31 @@ class CoreBill extends StatelessWidget {
...
@@ -1313,9 +1354,31 @@ class CoreBill extends StatelessWidget {
),
),
GestureDetector
(
GestureDetector
(
onTap:
()
{
onTap:
()
{
setIsCustomerDelivery
(
true
);
if
(!
getIsDelivery
())
{
getBillFunc
(
context
);
String
textOnOk
=
'OK'
;
Navigator
.
pop
(
context
);
String
textOnCancel
=
'Batal'
;
String
title
=
'Info'
;
String
description
=
'''
Outlet ini tidak dapat delivery order,
ingin ganti outlet ?
Note: Ganti outlet akan menyebabkan orderan anda saat ini hilang
'''
;
buttonDialogGlobal
(
context
,
title
,
description
,
textOnOk
,
textOnCancel
,
ontapOkeChangeOutlet
,
onTapCancelChange
,
okButtonColor:
buttonColor
,
);
}
else
{
setIsCustomerDelivery
(
true
);
getBillFunc
(
context
);
Navigator
.
pop
(
context
);
}
},
},
child:
Container
(
child:
Container
(
padding:
const
EdgeInsets
.
only
(
left:
10
,
bottom:
24
),
padding:
const
EdgeInsets
.
only
(
left:
10
,
bottom:
24
),
...
@@ -1459,118 +1522,276 @@ Apakah ingin melanjutkan ?''';
...
@@ -1459,118 +1522,276 @@ Apakah ingin melanjutkan ?''';
);
);
}
}
Column
deliveryOption
(
BuildContext
context
)
{
BlocBuilder
deliveryOption
(
BuildContext
context
)
{
return
Column
(
void
ontapAddressDetail
()
{
crossAxisAlignment:
CrossAxisAlignment
.
start
,
Navigator
.
pop
(
context
);
children:
[
}
Row
(
children:
[
return
BlocBuilder
<
AddressUser
,
Address
>(
Expanded
(
builder:
(
context
,
address
)
{
child:
Column
(
if
(
address
.
id
!=
''
)
{
crossAxisAlignment:
CrossAxisAlignment
.
start
,
return
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Row
(
children:
[
children:
[
defaultText
(
context
,
'Alamat Pengantaran'
),
Expanded
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
[
defaultText
(
context
,
'Detail Alamat:'
,
style:
addressStyle
(
font:
10
,
),
),
const
SizedBox
(
height:
6
,
),
defaultText
(
context
,
address
.
recepientName
,
style:
addressStyle
(
font:
10
,
),
),
const
SizedBox
(
height:
6
,
),
defaultText
(
context
,
address
.
recepientPhone
,
style:
addressStyle
(
font:
10
,
),
),
const
SizedBox
(
height:
6
,
),
defaultText
(
context
,
address
.
address
,
style:
addressStyle
(
font:
10
,
),
),
// (address.locationDetail != '')
// ? Container(
// padding: const EdgeInsets.only(top: 6),
// child: defaultText(
// context,
// ' Detail: ${address.locationDetail}',
// style: addressStyle(
// font: 10,
// ),
// ),
// )
// : const SizedBox(),
// (address.notes != '')
// ? Container(
// padding: const EdgeInsets.only(top: 6),
// child: defaultText(
// context,
// ' Note: ${address.notes}',
// style: addressStyle(
// font: 10,
// ),
// ),
// )
// : const SizedBox()
],
),
),
const
SizedBox
(
const
SizedBox
(
height:
6
,
width:
10
,
),
),
defaultText
(
context
,
'Blok M Barat'
),
GestureDetector
(
onTap:
()
{
Navigator
.
pushReplacement
(
context
,
MaterialPageRoute
(
builder:
(
_
)
=>
WebViewMap
(
titleAppBar:
'Ganti Alamat'
,
url:
'
${getBaseUrl()}
rdm/address/add/?session_id=
${getSessionId()}
'
,
),
),
);
},
child:
Container
(
width:
98
,
height:
30
,
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
40
),
color:
backgroundWhite
,
border:
Border
.
all
(
color:
buttonColor
,
),
),
child:
Center
(
child:
defaultText
(
context
,
'Ganti Alamat'
,
style:
addButton
(
font:
8
,
color:
buttonColor
,
),
),
),
),
)
],
],
),
),
),
const
SizedBox
(
const
SizedBox
(
height:
21
,
width:
5
,
),
Container
(
width:
98
,
height:
30
,
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
40
),
color:
backgroundWhite
,
border:
Border
.
all
(
color:
buttonColor
,
),
),
child:
Center
(
child:
defaultText
(
context
,
'Ganti Alamat'
,
style:
addButton
(
font:
8
,
color:
buttonColor
,
),
),
),
),
)
Row
(
],
mainAxisAlignment:
MainAxisAlignment
.
start
,
),
children:
[
const
SizedBox
(
(
address
.
locationDetail
!=
''
)
height:
21
,
?
GestureDetector
(
),
onTap:
()
{
Row
(
buttonDialogGlobal
(
mainAxisAlignment:
MainAxisAlignment
.
start
,
context
,
children:
[
'Detail Lokasi'
,
Container
(
address
.
locationDetail
,
width:
100
,
'OK'
,
height:
23
,
'Close'
,
decoration:
BoxDecoration
(
ontapAddressDetail
,
borderRadius:
BorderRadius
.
circular
(
40
),
ontapAddressDetail
,
color:
buttonColor
,
isOkeButtonShow:
false
,
);
},
child:
Container
(
width:
100
,
height:
23
,
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
40
),
color:
buttonColor
,
),
child:
Center
(
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
center
,
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
[
const
Image
(
image:
AssetImage
(
'assets/icons/pin-address.png'
),
),
const
SizedBox
(
width:
12.6
,
),
defaultText
(
context
,
'Detail Alamat'
,
style:
addButton
(
font:
8
,
),
)
],
),
),
),
)
:
const
SizedBox
(),
(
address
.
locationDetail
!=
''
)
?
const
SizedBox
(
width:
16
,
)
:
const
SizedBox
(),
(
address
.
notes
!=
''
)
?
GestureDetector
(
onTap:
()
{
buttonDialogGlobal
(
context
,
'Catatan'
,
address
.
notes
,
'OK'
,
'Close'
,
ontapAddressDetail
,
ontapAddressDetail
,
isOkeButtonShow:
false
,
);
},
child:
Container
(
width:
84
,
height:
23
,
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
40
),
color:
buttonColor
,
),
child:
Center
(
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
center
,
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
[
const
Image
(
image:
AssetImage
(
'assets/icons/note.png'
),
),
const
SizedBox
(
width:
10
,
),
defaultText
(
context
,
'Catatan'
,
style:
addButton
(
font:
8
),
)
],
),
),
),
)
:
const
SizedBox
(),
],
),
),
child:
Center
(
],
child:
Row
(
);
crossAxisAlignment:
CrossAxisAlignment
.
center
,
}
else
{
mainAxisAlignment:
MainAxisAlignment
.
center
,
return
Container
(
children:
[
width:
maxWidthScreens
,
const
Image
(
color:
backgroundWhite
,
image:
AssetImage
(
'assets/icons/pin-address.png'
),
child:
Align
(
alignment:
Alignment
.
centerRight
,
child:
GestureDetector
(
onTap:
()
{
Navigator
.
pushReplacement
(
context
,
MaterialPageRoute
(
builder:
(
_
)
=>
WebViewMap
(
titleAppBar:
'Pilih Alamat'
,
url:
'
${getBaseUrl()}
rdm/address/add/?session_id=
${getSessionId()}
'
),
),
),
const
SizedBox
(
);
width:
12.6
,
},
child:
Container
(
width:
98
,
height:
30
,
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
40
),
color:
backgroundWhite
,
border:
Border
.
all
(
color:
buttonColor
,
),
),
defaultText
(
),
child:
Center
(
child:
defaultText
(
context
,
context
,
'
Detail
Alamat'
,
'
Pilih
Alamat'
,
style:
addButton
(
style:
addButton
(
font:
8
,
font:
8
,
color:
buttonColor
,
),
),
)
],
),
),
),
const
SizedBox
(
width:
16
,
),
Container
(
width:
84
,
height:
23
,
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
40
),
color:
buttonColor
,
),
child:
Center
(
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
center
,
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
[
const
Image
(
image:
AssetImage
(
'assets/icons/note.png'
),
),
),
const
SizedBox
(
),
width:
10
,
),
defaultText
(
context
,
'Catatan'
,
style:
addButton
(
font:
8
),
)
],
),
),
),
),
)
)
,
],
);
),
}
]
,
}
,
);
);
}
}
}
}
...
@@ -1616,27 +1837,104 @@ class EmptyBill extends StatelessWidget {
...
@@ -1616,27 +1837,104 @@ class EmptyBill extends StatelessWidget {
child:
Column
(
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
children:
[
Container
(
width:
double
.
infinity
,
color:
backgroundWhite
,
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
paddingLeftRight
),
child:
defaultText
(
context
,
'Meja
$tableNumber
'
,
style:
viewbillStyle
())),
Container
(
Container
(
width:
double
.
infinity
,
width:
double
.
infinity
,
color:
backgroundWhite
,
color:
backgroundWhite
.
withOpacity
(
0.9
),
padding:
const
EdgeInsets
.
only
(
height:
115
,
left:
paddingLeftRight
,
child:
Row
(
right:
paddingLeftRight
,
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
bottom:
18
,
crossAxisAlignment:
CrossAxisAlignment
.
center
,
),
children:
[
child:
defaultText
(
Column
(
context
,
mainAxisSize:
MainAxisSize
.
min
,
customerName
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
style:
customerNameViewbill
(),
children:
[
Container
(
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
paddingLeftRight
),
child:
defaultText
(
context
,
(
getIsDeliveryPickup
())
?
(
getIsCustomerDelivery
())
?
'Delivery'
:
'Pickup'
:
'Meja
${tableNumber}
'
,
style:
viewbillStyle
()),
),
Container
(
padding:
const
EdgeInsets
.
only
(
left:
paddingLeftRight
,
right:
paddingLeftRight
,
// bottom: 18,
),
child:
defaultText
(
context
,
customerName
,
style:
customerNameViewbill
()),
),
],
),
(
getIsDeliveryPickup
())
?
GestureDetector
(
onTap:
()
{
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
_
)
=>
const
SelectBranch
(),
),
);
},
child:
Container
(
height:
30
,
width:
80
,
margin:
const
EdgeInsets
.
only
(
right:
20
,
),
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
40
),
color:
backgroundWhite
,
border:
Border
.
all
(
color:
buttonColor
,
),
),
child:
Center
(
child:
defaultText
(
context
,
'Ganti Outlet'
,
style:
addButton
(
font:
8
,
color:
textColorBlack
,
),
),
),
),
)
:
const
SizedBox
()
],
),
),
),
),
// Container(
// width: double.infinity,
// color: backgroundWhite,
// padding: const EdgeInsets.symmetric(
// horizontal: paddingLeftRight),
// child: defaultText(context, 'Meja $tableNumber',
// style: viewbillStyle()),
// ),
// Container(
// width: double.infinity,
// color: backgroundWhite,
// padding: const EdgeInsets.only(
// left: paddingLeftRight,
// right: paddingLeftRight,
// bottom: 18,
// ),
// child: defaultText(
// context,
// customerName,
// style: customerNameViewbill(),
// ),
// ),
const
SizedBox
(
const
SizedBox
(
height:
24
,
height:
24
,
),
),
...
...
lib/ui/webview/app_bar_webview.dart
View file @
c2f92bb8
// ignore_for_file: sized_box_for_whitespace
// ignore_for_file: sized_box_for_whitespace
import
'package:byod/ui/home/new_home2.dart'
;
import
'package:byod/ui/viewbill/view_bill_new.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter_bloc/flutter_bloc.dart'
;
import
'../../bloc/address_user_bloc.dart'
;
import
'../../helper/helper.dart'
;
import
'../../helper/helper.dart'
;
import
'../../helper/widget/style.dart'
;
import
'../../helper/widget/style.dart'
;
...
@@ -28,7 +32,12 @@ class CustomAppBar extends StatelessWidget {
...
@@ -28,7 +32,12 @@ class CustomAppBar extends StatelessWidget {
children:
[
children:
[
GestureDetector
(
GestureDetector
(
onTap:
()
{
onTap:
()
{
Navigator
.
pop
(
context
);
Navigator
.
pushReplacement
(
context
,
MaterialPageRoute
(
builder:
(
_
)
=>
const
ViewBillNew
(),
),
);
},
},
child:
Container
(
child:
Container
(
width:
24
,
width:
24
,
...
@@ -55,12 +64,32 @@ class CustomAppBar extends StatelessWidget {
...
@@ -55,12 +64,32 @@ class CustomAppBar extends StatelessWidget {
),
),
],
],
),
),
Container
(
GestureDetector
(
width:
24
,
onTap:
()
{
height:
24
,
Navigator
.
pushReplacement
(
decoration:
BoxDecoration
(
context
,
borderRadius:
BorderRadius
.
circular
(
10
),
color:
buttonColor
),
MaterialPageRoute
(
)
builder:
(
_
)
=>
const
ViewBillNew
(),
),
);
},
child:
Row
(
children:
[
defaultText
(
context
,
'Simpan'
,
style:
appBarNameViewBill
(),
),
const
SizedBox
(
width:
5
,
),
fontAwesomeNew
(
saveIcon
,
saveIconSize
,
),
],
),
),
],
],
),
),
);
);
...
...
lib/ui/webview/webview.dart
View file @
c2f92bb8
import
'dart:async'
;
//
import 'dart:async';
// import 'package:flutter/material.dart';
// // import 'package:webview_flutter/webview_flutter.dart';
// import 'package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart';
// import 'package:fwfh_webview/fwfh_webview.dart';
// import '../splash.dart';
// import 'app_bar_webview.dart';
// // import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart';
// class WebViewMap extends StatelessWidget {
// const WebViewMap({
// super.key,
// required this.titleAppBar,
// required this.url,
// });
// final String titleAppBar;
// final String url;
// Future<bool> tapUrl(x, BuildContext context) async {
// if (x.contains('jasaotp')) {
// // Navigator.push(
// // context,
// // MaterialPageRoute(
// // builder: (_) => Splash(
// // pathSegmentString: [''],
// // context: context,
// // ),
// // ),
// // );
// }
// return true;
// }
// @override
// Widget build(BuildContext context) {
// return Column(
// children: [
// CustomAppBar(
// titleAppBar: titleAppBar,
// ),
// Expanded(
// child: HtmlWidget(
// '<iframe src="$url"></iframe>',
// factoryBuilder: () => MyWidgetFactory(),
// onTapImage: (x) {
// print(x);
// },
// onTapUrl: (x) {
// return tapUrl(x, context);
// },
// ),
// ),
// // WebView(
// // initialUrl: url,
// // onWebViewCreated: (WebViewController controller) {
// // _controller.complete(controller);
// // },
// // )
// ],
// );
// // return Scaffold(
// // appBar: AppBar(
// // title: const Text('Flutter WebView example'),
// // // actions: <Widget>[
// // // _SampleMenu(_controller.future),
// // // ],
// // ),
// // body: WebView(
// // initialUrl: url,
// // onWebViewCreated: (WebViewController controller) {
// // _controller.complete(controller);
// // },
// // ),
// // );
// }
// }
// class MyWidgetFactory extends WidgetFactory with WebViewFactory {}
// asdal;skda;sldkasd
// import 'package:flutter/material.dart';
// import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';
// // import 'package:fwfh_webview/fwfh_webview.dart';
// import '../../helper/prefs.dart';
// import 'app_bar_webview.dart';
// class WebViewMap extends StatefulWidget {
// const WebViewMap({super.key});
// @override
// State<WebViewMap> createState() => _WebViewMapState();
// }
// class _WebViewMapState extends State<WebViewMap> {
// final _webViewPlugin = FlutterWebviewPlugin();
// @override
// void initState() {
// // TODO: implement initState
// super.initState();
// // on pressing back button, exiting the screen instead of showing loading symbol
// _webViewPlugin.onDestroy.listen((_) {
// if (Navigator.canPop(context)) {
// Navigator.of(context).pop();
// }
// });
// }
// @override
// Widget build(BuildContext context) {
// // WillPopScope will prevent loading
// return Column(
// children: [
// const CustomAppBar(
// titleAppBar: 'Pilih Alamat',
// ),
// Expanded(
// // child: WebviewScaffold(
// // url: '${getBaseUrl()}rdm/address/add/',
// // withLocalStorage: true,
// // withJavascript: true,
// // appCacheEnabled: true,
// // ),
// child: WebviewScaffold(url: '${getBaseUrl()}rdm/address/add/')
// )
// ],
// );
// }
// }
import
'package:byod/bloc/address_user_bloc.dart'
;
import
'package:byod/ui/viewbill/view_bill_new.dart'
;
import
'package:byod/ui/webview/app_bar_webview.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
// import 'package:webview_flutter/webview_flutter.dart';
import
'package:flutter_bloc/flutter_bloc.dart'
;
import
'package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart'
;
import
'package:webviewx_plus/webviewx_plus.dart'
;
import
'package:fwfh_webview/fwfh_webview.dart'
;
import
'../splash.dart'
;
import
'../../helper/helper.dart'
;
import
'app_bar_webview.dart'
;
import
'../../helper/widget/button_dialog.dart'
;
// import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart';
class
WebView
Html
extends
Stateless
Widget
{
class
WebView
Map
extends
Stateful
Widget
{
const
WebView
Html
({
const
WebView
Map
({
super
.
key
,
super
.
key
,
required
this
.
titleAppBar
,
required
this
.
titleAppBar
,
required
this
.
url
,
required
this
.
url
,
});
});
final
String
titleAppBar
;
final
String
titleAppBar
;
final
String
url
;
final
String
url
;
Future
<
bool
>
tapUrl
(
x
,
BuildContext
context
)
async
{
@override
if
(
x
.
contains
(
'jasaotp'
))
{
State
<
WebViewMap
>
createState
()
=>
_WebViewMapState
();
// Navigator.push(
}
// context,
// MaterialPageRoute(
class
_WebViewMapState
extends
State
<
WebViewMap
>
{
// builder: (_) => Splash(
late
WebViewXController
webviewController
;
// pathSegmentString: [''],
void
onTapOkPop
()
{
// context: context,
context
.
read
<
AddressUser
>().
getAddressUser
();
// ),
Navigator
.
pushReplacement
(
// ),
context
,
// );
MaterialPageRoute
(
}
builder:
(
_
)
=>
const
ViewBillNew
(),
return
true
;
),
);
}
}
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
return
Column
(
return
WillPopScope
(
children:
[
onWillPop:
()
async
{
CustomAppBar
(
final
shouldPop
=
await
buttonDialogGlobal
(
titleAppBar:
titleAppBar
,
context
,
),
'Konfirmasi'
,
Expanded
(
'Apakah anda sudah mengisi alamat dengan benar ?'
,
child:
HtmlWidget
(
'Ya'
,
'<iframe src="
$url
"></iframe>'
,
'Batal'
,
factoryBuilder:
()
=>
MyWidgetFactory
(),
onTapOkPop
,
onTapImage:
(
x
)
{
onTapOkPop
,
print
(
x
);
okButtonColor:
buttonColor
,
},
cancelButtonColor:
cancelColorButton
,
onTapUrl:
(
x
)
{
);
return
tapUrl
(
x
,
context
);
},
return
shouldPop
??
false
;
),
},
),
child:
Column
(
// WebView(
children:
[
// initialUrl: url,
CustomAppBar
(
titleAppBar:
widget
.
titleAppBar
),
// onWebViewCreated: (WebViewController controller) {
Expanded
(
// _controller.complete(controller);
child:
WebViewX
(
// },
width:
MediaQuery
.
of
(
context
).
size
.
width
,
// )
height:
MediaQuery
.
of
(
context
).
size
.
height
,
],
initialContent:
widget
.
url
,
javascriptMode:
JavascriptMode
.
unrestricted
,
initialSourceType:
SourceType
.
url
,
onWebViewCreated:
(
controller
)
{
webviewController
=
controller
;
},
// navigationDelegate: (NavigationRequest request) {
// return NavigationDecision.navigate;
// },
),
)
],
),
);
);
// return Scaffold(
// appBar: AppBar(
// title: const Text('Flutter WebView example'),
// // actions: <Widget>[
// // _SampleMenu(_controller.future),
// // ],
// ),
// body: WebView(
// initialUrl: url,
// onWebViewCreated: (WebViewController controller) {
// _controller.complete(controller);
// },
// ),
// );
}
}
}
}
class
MyWidgetFactory
extends
WidgetFactory
with
WebViewFactory
{}
pubspec.lock
View file @
c2f92bb8
...
@@ -142,6 +142,13 @@ packages:
...
@@ -142,6 +142,13 @@ packages:
description: flutter
description: flutter
source: sdk
source: sdk
version: "0.0.0"
version: "0.0.0"
flutter_webview_plugin:
dependency: "direct main"
description:
name: flutter_webview_plugin
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.0"
flutter_widget_from_html_core:
flutter_widget_from_html_core:
dependency: "direct main"
dependency: "direct main"
description:
description:
...
@@ -218,7 +225,7 @@ packages:
...
@@ -218,7 +225,7 @@ packages:
name: http
name: http
url: "https://pub.dartlang.org"
url: "https://pub.dartlang.org"
source: hosted
source: hosted
version: "0.13.
4
"
version: "0.13.
5
"
http_parser:
http_parser:
dependency: transitive
dependency: transitive
description:
description:
...
@@ -331,6 +338,13 @@ packages:
...
@@ -331,6 +338,13 @@ packages:
url: "https://pub.dartlang.org"
url: "https://pub.dartlang.org"
source: hosted
source: hosted
version: "2.1.2"
version: "2.1.2"
pointer_interceptor:
dependency: transitive
description:
name: pointer_interceptor
url: "https://pub.dartlang.org"
source: hosted
version: "0.9.3+3"
process:
process:
dependency: transitive
dependency: transitive
description:
description:
...
@@ -595,13 +609,6 @@ packages:
...
@@ -595,13 +609,6 @@ packages:
url: "https://pub.dartlang.org"
url: "https://pub.dartlang.org"
source: hosted
source: hosted
version: "1.9.5"
version: "1.9.5"
webview_flutter_web:
dependency: "direct main"
description:
name: webview_flutter_web
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.0+4"
webview_flutter_wkwebview:
webview_flutter_wkwebview:
dependency: transitive
dependency: transitive
description:
description:
...
@@ -609,6 +616,13 @@ packages:
...
@@ -609,6 +616,13 @@ packages:
url: "https://pub.dartlang.org"
url: "https://pub.dartlang.org"
source: hosted
source: hosted
version: "2.9.5"
version: "2.9.5"
webviewx_plus:
dependency: "direct main"
description:
name: webviewx_plus
url: "https://pub.dartlang.org"
source: hosted
version: "0.3.2"
win32:
win32:
dependency: transitive
dependency: transitive
description:
description:
...
@@ -624,5 +638,5 @@ packages:
...
@@ -624,5 +638,5 @@ packages:
source: hosted
source: hosted
version: "0.2.0+1"
version: "0.2.0+1"
sdks:
sdks:
dart: ">=2.1
7.3
<3.0.0"
dart: ">=2.1
8.0
<3.0.0"
flutter: ">=3.1.0-0"
flutter: ">=3.1.0-0"
pubspec.yaml
View file @
c2f92bb8
...
@@ -33,6 +33,7 @@ dependencies:
...
@@ -33,6 +33,7 @@ dependencies:
sdk
:
flutter
sdk
:
flutter
flutter_bloc
:
^8.0.1
flutter_bloc
:
^8.0.1
flutter_easyloading
:
^3.0.3
flutter_easyloading
:
^3.0.3
flutter_webview_plugin
:
^0.4.0
flutter_widget_from_html_core
:
^0.8.5+3
flutter_widget_from_html_core
:
^0.8.5+3
fwfh_webview
:
^0.6.2+3
fwfh_webview
:
^0.6.2+3
geolocator
:
^9.0.2
geolocator
:
^9.0.2
...
@@ -48,7 +49,7 @@ dependencies:
...
@@ -48,7 +49,7 @@ dependencies:
url_strategy
:
^0.2.0
url_strategy
:
^0.2.0
uuid
:
^3.0.6
uuid
:
^3.0.6
web_browser_detect
:
^2.0.3
web_browser_detect
:
^2.0.3
webview
_flutter_web
:
^0.1.0+4
webview
x_plus
:
^0.3.2
dev_dependencies
:
dev_dependencies
:
flutter_lints
:
^2.0.0
flutter_lints
:
^2.0.0
...
...
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