Fakultas Ilmu Komputer UI
Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
ppl-fasilkom-ui
PPL Sosial
bisago
bisago-fe
Commits
497b1135
Commit
497b1135
authored
May 16, 2021
by
Jovi Handono Hutama
Browse files
Merge branch 'dev-jovi' into 'PBI-9-info_kegiatan'
Pull from development See merge request
!33
parents
6e2f4d27
c6457f94
Pipeline
#76880
failed with stages
in 1 minute and 52 seconds
Changes
45
Pipelines
1
Expand all
Hide whitespace changes
Inline
Side-by-side
.gitlab-ci.yml
View file @
497b1135
...
...
@@ -10,7 +10,7 @@ stages:
mv $FLUTTER_ENV .env
flutter pub get
image
:
poipole/bisago-be:
latest
image
:
poipole/bisago-be:
2.0.5-4.6.0.2311
before_script
:
-
*flutter_before_script
...
...
Dockerfile
View file @
497b1135
FROM
cirrusci/flutter:latest
ENV
SONARSCANNER="https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.2.0.1873-linux.zip" \
SONAR_SCANNER_CLI_VERSION=4.2.0.1873
FROM
cirrusci/flutter:2.0.5
ENV
SONAR_SCANNER_CLI_VERSION=4.6.0.2311
RUN
wget
-qO
sonar-scanner-cli.zip https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-
${
SONAR_SCANNER_CLI_VERSION
}
-linux
.zip
&&
\
unzip sonar-scanner-cli.zip -d /opt && \
rm sonar-scanner-cli.zip && \
chmod +x /opt/sonar-scanner-${SONAR_SCANNER_CLI_VERSION}-linux/bin/sonar-scanner && \
ln -s /opt/sonar-scanner-${SONAR_SCANNER_CLI_VERSION}-linux/bin/sonar-scanner /usr/local/bin/sonar-scanner
android/fastlane/metadata/android/id/changelogs/changelogs.txt
View file @
497b1135
Add dialog to turn on Location services upon starting the app
New feature for layanan search
Add feature to upload image for a fasilitas straight from the camera
Add default image for facilities
Add search history feature
Now all fields are required in edit profile
\ No newline at end of file
3.2.1:
- Fix cant update fasilitas
3.2.0:
- New feature share fasilitas as a link
3.1.2:
- Fix google oauth
3.1.1:
- Add dialog to turn on Location services upon starting the app
- New feature for layanan search
- Add feature to upload image for a fasilitas straight from the camera
- Add default image for facilities
- Add search history feature
- Now all fields are required in edit profile
lib/bloc/komentar_bloc.dart
View file @
497b1135
...
...
@@ -23,6 +23,15 @@ class KomentarBloc {
fetchKomentarList
(
placeId
);
}
Future
<
KomentarModel
>
fetchDetailFasilitas
(
String
placeId
,
int
id
)
async
{
try
{
return
await
_komentarRepository
.
fetchDetailFasilitas
(
placeId
,
id
);
}
catch
(
e
)
{
return
KomentarModel
();
}
}
Future
<
dynamic
>
addNewKomentar
(
Map
<
String
,
dynamic
>
newKomentarData
,
String
namaLokasi
)
async
{
try
{
...
...
@@ -33,13 +42,13 @@ class KomentarBloc {
}
}
Future
<
Response
>
updateKomentar
(
Map
<
String
,
dynamic
>
newKomentarData
,
String
namaLokasi
,
int
id
,
String
token
)
async
{
Future
<
dynamic
>
updateKomentar
(
Map
<
String
,
dynamic
>
newKomentarData
,
String
placeId
,
int
id
)
async
{
try
{
return
await
_komentarRepository
.
updateKomentar
(
newKomentarData
,
namaLokasi
,
id
,
token
);
newKomentarData
,
placeId
,
id
);
}
catch
(
e
)
{
return
R
esponse
(
'Failed to update komentar'
,
400
)
;
return
{
'r
esponse
'
:
'FAILED'
}
;
}
}
...
...
lib/component/bisago_drawer.dart
View file @
497b1135
...
...
@@ -90,6 +90,12 @@ class BisaGoDrawer extends StatelessWidget {
if
(
snapshot
.
hasData
&&
snapshot
.
data
!=
'Selamat datang ke BisaGo!'
)
{
return
Container
(
decoration:
BoxDecoration
(
color:
greenPrimary
,
border:
Border
(
bottom:
BorderSide
(
color:
Colors
.
white
),
),
),
child:
ListTile
(
key:
Key
(
title
),
leading:
Icon
(
...
...
@@ -107,18 +113,12 @@ class BisaGoDrawer extends StatelessWidget {
),
onTap:
()
async
{
if
(
title
==
'Login'
)
{
await
checkLoginStatus
(
context
);
checkLoginStatus
(
context
);
}
else
if
(
title
==
'Profile'
)
{
_navigateToProfilePage
(
context
,
snapshot
.
data
);
}
},
),
decoration:
BoxDecoration
(
color:
greenPrimary
,
border:
Border
(
bottom:
BorderSide
(
color:
Colors
.
white
),
),
),
);
}
return
Container
();
...
...
@@ -126,6 +126,12 @@ class BisaGoDrawer extends StatelessWidget {
);
}
return
Container
(
decoration:
BoxDecoration
(
color:
greenPrimary
,
border:
Border
(
bottom:
BorderSide
(
color:
Colors
.
white
),
),
),
child:
ListTile
(
key:
Key
(
title
),
leading:
Icon
(
...
...
@@ -145,12 +151,6 @@ class BisaGoDrawer extends StatelessWidget {
_navigateToPage
(
context
,
title
);
},
),
decoration:
BoxDecoration
(
color:
greenPrimary
,
border:
Border
(
bottom:
BorderSide
(
color:
Colors
.
white
),
),
),
);
}
...
...
lib/component/image_preview_holder.dart
View file @
497b1135
...
...
@@ -39,9 +39,8 @@ class _ImagePreviewHolderState extends State<ImagePreviewHolder> {
child:
widget
.
image
,
),
const
SizedBox
(
height:
regularSpace
),
Fla
tButton
(
Tex
tButton
(
key:
const
Key
(
'Button Hapus Foto'
),
padding:
EdgeInsets
.
zero
,
onPressed:
widget
.
onPressed
,
child:
Container
(
width:
MediaQuery
.
of
(
context
)
.
size
.
width
*
0.3
,
...
...
lib/get_it.dart
View file @
497b1135
import
'package:bisaGo/repository/kegiatan_repository.dart'
;
import
'package:bisaGo/repository/komentar_posting_kegiatan_repository.dart'
;
import
'package:bisaGo/repository/dynamic_links_service_repository.dart'
;
import
'package:bisaGo/repository/komentar_posting_repository.dart'
;
import
'package:bisaGo/repository/komentar_repository.dart'
;
import
'package:bisaGo/repository/komunitas_repository.dart'
;
...
...
@@ -30,5 +31,7 @@ class AppGetIt {
()
=
>
LayananRepository
());
_getIt
.
registerLazySingleton
<
BaseKegiatanRepository
>(
()
=
>
KegiatanRepository
());
_getIt
.
registerLazySingleton
<
BaseDynamicLinksServiceRepository
>(
()
=
>
DynamicLinksServiceRepository
());
}
}
lib/network/network_interface.dart
View file @
497b1135
...
...
@@ -32,16 +32,25 @@ class NetworkInterface {
return
responseJson
;
}
Future
<
dynamic
>
put
({
String
url
})
async
{
Future
<
dynamic
>
put
({
String
url
,
Map
<
String
,
dynamic
>
bodyParams
,
bool
isLogin
,
bool
formData
=
true
,
})
async
{
var
responseJson
;
try
{
final
sharedPreferences
=
await
SharedPreferences
.
getInstance
();
dio
.
options
.
headers
[
'Authorization'
]
=
if
(
isLogin
)
{
final
sharedPreferences
=
await
SharedPreferences
.
getInstance
();
dio
.
options
.
headers
[
'Authorization'
]
=
'Token
${sharedPreferences.getString('token')}
'
;
}
dio
.
options
.
headers
[
'content-type'
]
=
'application/json'
;
final
response
=
await
dio
.
put
(
'
${ApiFlavor.getBaseUrl()}$url
'
,
data:
formData
?
FormData
.
fromMap
(
bodyParams
)
:
json
.
encode
(
bodyParams
),
);
responseJson
=
response
.
data
;
responseJson
=
_
response
(
response
)
;
}
on
SocketException
{
throw
FetchDataException
(
'No Internet Connection'
);
}
on
DioError
catch
(
e
)
{
...
...
@@ -77,6 +86,8 @@ class NetworkInterface {
return
response
.
data
;
case
201
:
return
response
.
data
;
case
202
:
return
response
.
data
;
case
400
:
throw
BadRequestException
(
response
.
data
.
toString
());
break
;
...
...
lib/page/addLokasi/add_lokasi.dart
View file @
497b1135
...
...
@@ -56,81 +56,82 @@ class _AddLokasiState extends State<AddLokasi> {
@override
Widget
build
(
BuildContext
context
)
{
return
WillPopScope
(
child:
Scaffold
(
resizeToAvoidBottomInset:
true
,
appBar:
BisaGoAppBar
(
title:
'Tambah Lokasi'
,
leading:
InkWell
(
child:
const
Icon
(
Icons
.
arrow_back_ios
),
onTap:
()
=
>
Navigator
.
of
(
context
)
.
pushReplacement
(
MaterialPageRoute
(
builder:
(
BuildContext
context
)
=
>
const
Pencarian
()))),
onWillPop:
()
=
>
Navigator
.
of
(
context
)
.
pushReplacement
(
MaterialPageRoute
(
builder:
(
BuildContext
context
)
=
>
const
Pencarian
())),
child:
Scaffold
(
resizeToAvoidBottomInset:
true
,
appBar:
BisaGoAppBar
(
title:
'Tambah Lokasi'
,
leading:
InkWell
(
onTap:
()
=
>
Navigator
.
of
(
context
)
.
pushReplacement
(
MaterialPageRoute
(
builder:
(
BuildContext
context
)
=
>
const
Pencarian
())),
child:
const
Icon
(
Icons
.
arrow_back_ios
),
),
body:
Stack
(
children:
<
Widget
>[
checkAvailabilityofUserLocation
(),
InkWell
(
key:
const
Key
(
'InkWell'
),
onTap:
()
async
{
resetData
();
final
locationPrediction
=
await
PlacesAutocomplete
.
show
(
),
body:
Stack
(
children:
<
Widget
>[
checkAvailabilityofUserLocation
(),
InkWell
(
key:
const
Key
(
'InkWell'
),
onTap:
()
async
{
resetData
();
final
locationPrediction
=
await
PlacesAutocomplete
.
show
(
context:
context
,
apiKey:
DotEnv
()
.
env
[
'API_KEY'
],
mode:
Mode
.
overlay
);
if
(
locationPrediction
!=
null
)
{
final
placemark
=
await
Geolocator
()
.
placemarkFromAddress
(
locationPrediction
.
description
);
final
latitude
=
placemark
[
0
]
.
position
.
latitude
;
final
longitude
=
placemark
[
0
]
.
position
.
longitude
;
final
position
=
LatLng
(
latitude
,
longitude
);
setState
(()
{
data
[
'latitude'
]
=
latitude
;
data
[
'longitude'
]
=
longitude
;
alamatController
.
text
=
locationPrediction
.
description
.
split
(
','
)
.
sublist
(
1
)
.
join
();
namaLokasitController
.
text
=
locationPrediction
.
description
.
split
(
','
)[
0
];
markers
.
add
(
Marker
(
markerId:
MarkerId
(
'Selected Location'
),
position:
position
));
});
await
mapController
.
animateCamera
(
CameraUpdate
.
newCameraPosition
(
CameraPosition
(
target:
position
,
zoom:
15
),
),
);
await
Future
.
delayed
(
const
Duration
(
seconds:
1
));
await
showModalBottomSheet
(
context:
context
,
apiKey:
DotEnv
()
.
env
[
'API_KEY'
],
mode:
Mode
.
overlay
);
if
(
locationPrediction
!=
null
)
{
final
placemark
=
await
Geolocator
()
.
placemarkFromAddress
(
locationPrediction
.
description
);
final
latitude
=
placemark
[
0
]
.
position
.
latitude
;
final
longitude
=
placemark
[
0
]
.
position
.
longitude
;
final
position
=
LatLng
(
latitude
,
longitude
);
setState
(()
{
data
[
'latitude'
]
=
latitude
;
data
[
'longitude'
]
=
longitude
;
alamatController
.
text
=
locationPrediction
.
description
.
split
(
','
)
.
sublist
(
1
)
.
join
();
namaLokasitController
.
text
=
locationPrediction
.
description
.
split
(
','
)[
0
];
markers
.
add
(
Marker
(
markerId:
MarkerId
(
'Selected Location'
),
position:
position
));
});
await
mapController
.
animateCamera
(
CameraUpdate
.
newCameraPosition
(
CameraPosition
(
target:
position
,
zoom:
15
),
),
);
await
Future
.
delayed
(
const
Duration
(
seconds:
1
));
await
showModalBottomSheet
(
context:
context
,
builder:
(
context
)
=
>
addLokasiModal
(),
backgroundColor:
Colors
.
transparent
,
isScrollControlled:
true
);
}
},
child:
Container
(
width:
double
.
infinity
,
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
regularBorderRadius
,
boxShadow:
regularShadow
),
padding:
const
EdgeInsets
.
all
(
doubleSpace
),
margin:
const
EdgeInsets
.
only
(
top:
doubleSpace
,
left:
doubleSpace
,
right:
doubleSpace
),
child:
const
Text
(
'Cari lokasi yang anda inginkan'
,
style:
TextStyle
(
color:
Colors
.
grey
),
),
builder:
(
context
)
=
>
addLokasiModal
(),
backgroundColor:
Colors
.
transparent
,
isScrollControlled:
true
);
}
},
child:
Container
(
width:
double
.
infinity
,
decoration:
BoxDecoration
(
color:
Colors
.
white
,
borderRadius:
regularBorderRadius
,
boxShadow:
regularShadow
),
padding:
const
EdgeInsets
.
all
(
doubleSpace
),
margin:
const
EdgeInsets
.
only
(
top:
doubleSpace
,
left:
doubleSpace
,
right:
doubleSpace
),
child:
const
Text
(
'Cari lokasi yang anda inginkan'
,
style:
TextStyle
(
color:
Colors
.
grey
),
),
),
if
(
isLoading
)
const
Center
(
child:
CircularProgressIndicator
()
)
],
)
,
)
,
if
(
isLoading
)
const
Center
(
child:
CircularProgressIndicator
())
]
,
),
onWillPop:
()
=
>
Navigator
.
of
(
context
)
.
pushReplacement
(
MaterialPageRoute
(
builder:
(
BuildContext
context
)
=
>
const
Pencarian
())));
),
);
}
void
onCreated
(
GoogleMapController
controller
)
{
...
...
@@ -283,8 +284,8 @@ class _AddLokasiState extends State<AddLokasi> {
),
)),
Expanded
(
child:
Fla
tButton
(
c
olor:
greenPrimary
,
child:
Tex
tButton
(
style:
TextButton
.
styleFrom
(
backgroundC
olor:
greenPrimary
)
,
onPressed:
()
{
addLocationToApi
();
setState
(()
{
...
...
lib/page/add_informasi/add_informasi.dart
View file @
497b1135
...
...
@@ -206,9 +206,9 @@ class AddInformasiState extends State<AddInformasi> {
style:
TextStyle
(
fontSize:
18
),
textAlign:
TextAlign
.
left
,
),
Fla
tButton
(
Tex
tButton
(
key:
const
Key
(
'Button Input Foto Gallery'
),
padding:
EdgeInsets
.
zero
,
style:
TextButton
.
styleFrom
(
padding:
EdgeInsets
.
zero
)
,
onPressed:
()
async
{
final
imageSelected
=
await
_getImage
();
setState
(()
{
...
...
@@ -240,9 +240,9 @@ class AddInformasiState extends State<AddInformasi> {
),
),
),
Fla
tButton
(
Tex
tButton
(
key:
const
Key
(
'Button Input Foto Camera'
),
padding:
EdgeInsets
.
zero
,
style:
TextButton
.
styleFrom
(
padding:
EdgeInsets
.
zero
)
,
onPressed:
()
async
{
final
imageSelected
=
await
_getCameraImage
();
setState
(()
{
...
...
@@ -318,10 +318,14 @@ class AddInformasiState extends State<AddInformasi> {
decoration:
BoxDecoration
(
boxShadow:
regularShadow
),
child:
ButtonTheme
(
height:
55.0
,
child:
FlatButton
(
color:
greenPrimary
,
shape:
RoundedRectangleBorder
(
borderRadius:
BorderRadius
.
circular
(
10.0
)),
child:
TextButton
(
style:
TextButton
.
styleFrom
(
backgroundColor:
greenPrimary
,
shape:
RoundedRectangleBorder
(
borderRadius:
BorderRadius
.
circular
(
10.0
)),
padding:
const
EdgeInsets
.
symmetric
(
vertical:
10.0
)
),
onPressed:
_validateInformationInput
,
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
[
...
...
@@ -333,8 +337,6 @@ class AddInformasiState extends State<AddInformasi> {
color:
Colors
.
white
,
fontSize:
20.0
)),
],
),
padding:
const
EdgeInsets
.
symmetric
(
vertical:
10.0
),
onPressed:
_validateInformationInput
,
),
)),
const
SizedBox
(
...
...
@@ -419,7 +421,7 @@ class AddInformasiState extends State<AddInformasi> {
.
buffer
.
asUint8List
();
newKomentarData
[
'image'
]
=
await
MultipartFile
.
fromBytes
(
bytes
,
filename:
'kursiroda.jpg'
);
MultipartFile
.
fromBytes
(
bytes
,
filename:
'kursiroda.jpg'
);
print
(
'Fasilitas null dalem addinfo adalah: '
+
_jenisFasilitas
);
break
;
case
'LF'
:
...
...
@@ -427,103 +429,103 @@ class AddInformasiState extends State<AddInformasi> {
(
await
rootBundle
.
load
(
'assets/images/liftdisabilitas.jpg'
))
.
buffer
.
asUint8List
();
newKomentarData
[
'image'
]
=
await
MultipartFile
.
fromBytes
(
bytes
,
filename:
'liftdisabilitas.jpg'
);
newKomentarData
[
'image'
]
=
MultipartFile
.
fromBytes
(
bytes
,
filename:
'liftdisabilitas.jpg'
);
break
;
case
'TD'
:
var
bytes
=
(
await
rootBundle
.
load
(
'assets/images/toiletdisabilitas.jpg'
))
.
buffer
.
asUint8List
();
newKomentarData
[
'image'
]
=
await
MultipartFile
.
fromBytes
(
bytes
,
filename:
'toiletdisabilitas.jpg'
);
newKomentarData
[
'image'
]
=
MultipartFile
.
fromBytes
(
bytes
,
filename:
'toiletdisabilitas.jpg'
);
break
;
case
'MM'
:
var
bytes
=
(
await
rootBundle
.
load
(
'assets/images/masjidmushola.jpg'
))
.
buffer
.
asUint8List
();
newKomentarData
[
'image'
]
=
await
MultipartFile
.
fromBytes
(
bytes
,
filename:
'masjidmushola.jpg'
);
newKomentarData
[
'image'
]
=
MultipartFile
.
fromBytes
(
bytes
,
filename:
'masjidmushola.jpg'
);
break
;
case
'GB'
:
var
bytes
=
(
await
rootBundle
.
load
(
'assets/images/guidingblock.jpg'
))
.
buffer
.
asUint8List
();
newKomentarData
[
'image'
]
=
await
MultipartFile
.
fromBytes
(
bytes
,
filename:
'guidingblock.jpg'
);
newKomentarData
[
'image'
]
=
MultipartFile
.
fromBytes
(
bytes
,
filename:
'guidingblock.jpg'
);
break
;
case
'BM'
:
var
bytes
=
(
await
rootBundle
.
load
(
'assets/images/bidangmiring.jpg'
))
.
buffer
.
asUint8List
();
newKomentarData
[
'image'
]
=
await
MultipartFile
.
fromBytes
(
bytes
,
filename:
'bidangmiring.jpg'
);
newKomentarData
[
'image'
]
=
MultipartFile
.
fromBytes
(
bytes
,
filename:
'bidangmiring.jpg'
);
break
;
case
'CP'
:
var
bytes
=
(
await
rootBundle
.
load
(
'assets/images/temandisabilitas.jpg'
))
.
buffer
.
asUint8List
();
newKomentarData
[
'image'
]
=
await
MultipartFile
.
fromBytes
(
bytes
,
filename:
'temandisabilitas.jpg'
);
newKomentarData
[
'image'
]
=
MultipartFile
.
fromBytes
(
bytes
,
filename:
'temandisabilitas.jpg'
);
break
;
case
'JI'
:
var
bytes
=
(
await
rootBundle
.
load
(
'assets/images/juruisyarat.jpg'
))
.
buffer
.
asUint8List
();
newKomentarData
[
'image'
]
=
await
MultipartFile
.
fromBytes
(
bytes
,
filename:
'juruisyarat.jpg'
);
MultipartFile
.
fromBytes
(
bytes
,
filename:
'juruisyarat.jpg'
);
break
;
case
'TN'
:
var
bytes
=
(
await
rootBundle
.
load
(
'assets/images/tongkatnetra.jpg'
))
.
buffer
.
asUint8List
();
newKomentarData
[
'image'
]
=
await
MultipartFile
.
fromBytes
(
bytes
,
filename:
'tongkatnetra.jpg'
);
newKomentarData
[
'image'
]
=
MultipartFile
.
fromBytes
(
bytes
,
filename:
'tongkatnetra.jpg'
);
break
;
case
'KD'
:
var
bytes
=
(
await
rootBundle
.
load
(
'assets/images/kursidisabilitas.jpg'
))
.
buffer
.
asUint8List
();
newKomentarData
[
'image'
]
=
await
MultipartFile
.
fromBytes
(
bytes
,
filename:
'kursidisabilitas.jpg'
);
newKomentarData
[
'image'
]
=
MultipartFile
.
fromBytes
(
bytes
,
filename:
'kursidisabilitas.jpg'
);
break
;
case
'PK'
:
var
bytes
=
(
await
rootBundle
.
load
(
'assets/images/parkirdisabilitas.jpg'
))
.
buffer
.
asUint8List
();
newKomentarData
[
'image'
]
=
await
MultipartFile
.
fromBytes
(
bytes
,
filename:
'parkirdisabilitas.jpg'
);
newKomentarData
[
'image'
]
=
MultipartFile
.
fromBytes
(
bytes
,
filename:
'parkirdisabilitas.jpg'
);
break
;
case
'RT'
:
var
bytes
=
(
await
rootBundle
.
load
(
'assets/images/runningtext.jpg'
))
.
buffer
.
asUint8List
();
newKomentarData
[
'image'
]
=
await
MultipartFile
.
fromBytes
(
bytes
,
filename:
'runningtext.jpg'
);
MultipartFile
.
fromBytes
(
bytes
,
filename:
'runningtext.jpg'
);
break
;
case
'TB'
:
var
bytes
=
(
await
rootBundle
.
load
(
'assets/images/parkirbiasa.jpg'
))
.
buffer
.
asUint8List
();
newKomentarData
[
'image'
]
=
await
MultipartFile
.
fromBytes
(
bytes
,
filename:
'parkirbiasa.jpg'
);
MultipartFile
.
fromBytes
(
bytes
,
filename:
'parkirbiasa.jpg'
);
break
;
default
:
var
bytes
=
(
await
rootBundle
.
load
(
'assets/images/defaultDisable.png'
))
.
buffer
.
asUint8List
();
newKomentarData
[
'image'
]
=
await
MultipartFile
.
fromBytes
(
bytes
,
filename:
'defaultDisable.png'
);
newKomentarData
[
'image'
]
=
MultipartFile
.
fromBytes
(
bytes
,
filename:
'defaultDisable.png'
);
print
(
'Fasilitas null default addinfo adalah: '
+
_jenisFasilitas
);
break
;
}
}
else
{
final
fileName
=
_image
.
path
.
split
(
'/'
)
.
last
;
newKomentarData
[
'image'
]
=
await
MultipartFile
.
fromFile
(
newKomentarData
[
'image'
]
=
MultipartFile
.
fromFile
(
_image
.
path
,
filename:
fileName
,
);
...
...
lib/page/dashboard/dashboard.dart
View file @
497b1135
import
'package:bisaGo/bloc/lokasi_response_bloc.dart'
;
import
'package:bisaGo/model/komentar.dart'
;
import
'package:bisaGo/model/lokasi.dart'
;
import
'package:bisaGo/network/data/network_model.dart'
;
import
'package:bisaGo/page/filter_fasilitas/postingan/detail_post.dart'
;
import
'package:bisaGo/repository/komentar_repository.dart'
;
import
'package:bisaGo/utils/custom_dashboard_location_button.dart'
;
import
'package:bisaGo/utils/location_turn_on_dialog.dart'
;
import
'package:firebase_dynamic_links/firebase_dynamic_links.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter_dotenv/flutter_dotenv.dart'
;
import
'package:geolocator/geolocator.dart'
;
import
'package:google_maps_flutter/google_maps_flutter.dart'
;
import
'package:bisaGo/component/bisago_appbar.dart'
;
import
'package:bisaGo/component/bisago_drawer.dart'
;
import
'package:bisaGo/config/styles.dart'
;
import
'package:bisaGo/page/pencarian/pencarian.dart'
;
import
'package:google_maps_webservice/places.dart'
;
class
Dashboard
extends
StatefulWidget
{
const
Dashboard
({
Key
key
})
:
super
(
key:
key
);
...
...
@@ -31,6 +37,7 @@ class DashboardState extends State<Dashboard> {
super
.
initState
();
_showTurnOnLocationDialog
(
context
);
geolocator
=
Geolocator
().
.
forceAndroidLocationManager
;
initDynamicLinks
();
setInitialLocation
();
}
...
...
@@ -187,8 +194,8 @@ class DashboardState extends State<Dashboard> {