BBM-Tracking/lib/pages/home.dart

260 lines
8.0 KiB
Dart

import 'dart:io';
import 'package:bbm_tracking/bloc/bbm_bloc.dart';
import 'package:bbm_tracking/model/kendaraan_m.dart';
import 'package:bbm_tracking/model/transaksi_m.dart';
import 'package:bbm_tracking/pages/AboutApps/index.dart';
import 'package:bbm_tracking/pages/form-tambah-data-bensin/index.dart';
import 'package:bbm_tracking/pages/kendaraan/form-tambah-kendaraan/form.dart';
import 'package:bbm_tracking/pages/kendaraan/index_kendaraan.dart';
import 'package:bbm_tracking/repository/kendaraan/kendaraan_repository.dart';
import 'package:bbm_tracking/repository/transaksi/transaksi_repository.dart';
import 'package:bbm_tracking/resource/component-bersama/chart.dart';
import 'package:bbm_tracking/pages/mainMenu/component/item_bensin.dart';
import 'package:bbm_tracking/pages/mainMenu/index.dart';
import 'package:bbm_tracking/pages/riwayat/index.dart';
import 'package:bbm_tracking/resource/popup/popup.dart';
import 'package:camera/camera.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:geolocator/geolocator.dart';
import 'package:pandabar/main.view.dart';
import 'package:pandabar/model.dart';
class Home extends StatefulWidget {
final String screen;
final String param;
Home(this.screen, this.param);
@override
State<Home> createState() => _HomeState();
}
class _HomeState extends State<Home> {
late String screen = 'home';
late String param;
late List<KendaraanModel> dataKendaraan;
late KendaraanModel dt;
late bool paramKendaran = false;
late int paramText = 0;
late bool cond = false;
var firstCamera;
late bool _gpsEnable;
void ButtonAddTransaksi() {
if (dataKendaraan != null || dataKendaraan.length != 0) {
for (KendaraanModel element in dataKendaraan) {
if (element.status == 1) {
paramKendaran = true;
dt = element;
cond = true;
paramText = 2;
break;
}
paramKendaran = false;
paramText = 1;
}
} else {
paramKendaran = false;
paramText = 0;
}
paramKendaran
? Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => FormTamabahDataBensin(
kendaraanModel: dt,
camera: firstCamera,
key: UniqueKey(),
),
),
)
: showDialog(
context: context,
builder: (BuildContext context) {
return PopUp(
text: paramText == 1
? "Maaf, Silakan aktifkan kendaraan Anda terlebih dahulu"
: "Maaf, Silakan tambahkan kendaraan Anda terlebih dahulu",
param: "negative",
);
},
);
}
@override
void initState() {
// TODO: implement initState
super.initState();
screen = widget.screen;
param = widget.param;
context.read<BbmBloc>()..add(BBMStarted());
// setState(() {
// widget.screen != null ? screen = "${widget.screen}" : screen = "home";
// });
initilizeCamera();
checkGPS();
}
Future<Position> checkGPS() async {
bool serviceEnabled;
LocationPermission permission;
// Test if location services are enabled.
serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled) {
// Location services are not enabled don't continue
// accessing the position and request users of the
// App to enable the location services.
return Future.error('Location services are disabled.');
} else {
_gpsEnable = true;
}
permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission == LocationPermission.denied) {
// Permissions are denied, next time you could try
// requesting permissions again (this is also where
// Android's shouldShowRequestPermissionRationale
// returned true. According to Android guidelines
// your App should show an explanatory UI now.
return Future.error('Location permissions are denied');
}
}
if (permission == LocationPermission.deniedForever) {
// Permissions are denied forever, handle appropriately.
return Future.error(
'Location permissions are permanently denied, we cannot request permissions.');
}
// When we reach here, permissions are granted and we can
// continue accessing the position of the device.
return await Geolocator.getCurrentPosition();
}
Future<void> initilizeCamera() async {
WidgetsFlutterBinding.ensureInitialized();
// Obtain a list of the available cameras on the device.
final cameras = await availableCameras();
// Get a specific camera from the list of available cameras.
setState(() {
firstCamera = cameras.first;
});
}
Future<bool> _onWillPop() async {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: new Text('Apa Kamu Yakin?'),
content: new Text('Kamu ingin Keluar Aplikasi'),
actions: <Widget>[
TextButton(
onPressed: () => Navigator.of(context).pop(false),
child: new Text('No'),
),
TextButton(
onPressed: () => SystemNavigator.pop(),
child: new Text('Yes'),
),
],
);
},
);
return false;
}
// String page = 'home';
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Color(0xffE3EAEA),
bottomNavigationBar: PandaBar(
backgroundColor: Color(0xFFD2E1E1),
buttonSelectedColor: Color(0xFFFC8D05),
fabColors: [Color(0xFFFC8D05), Color(0xFFDDB05E)],
buttonData: [
PandaBarButtonData(
id: 'home',
icon: Icons.home,
title: 'Home',
),
PandaBarButtonData(
id: 'kendaraan',
icon: Icons.directions_car_filled_outlined,
title: 'Kendaraan',
),
PandaBarButtonData(
id: 'riwayat',
icon: Icons.account_balance_wallet_outlined,
title: 'Riwayat',
),
PandaBarButtonData(
id: 'tentang',
icon: Icons.assignment_late_outlined,
title: 'Tentang',
),
],
onChange: (id) {
setState(() {
screen = id;
});
},
onFabButtonPressed: () {
ButtonAddTransaksi();
},
),
body: BlocBuilder<BbmBloc, BbmState>(
builder: (context, state) {
if (state is BBMLoaded) {
dataKendaraan = state.kendaraan;
return WillPopScope(
onWillPop: () => _onWillPop(),
child: SafeArea(
child: Padding(
padding: EdgeInsets.only(
left: 10,
right: 10,
),
child: Builder(
builder: (context) {
// print("screen = " + param);
switch (screen) {
case 'home':
return IndexMainMenu();
case 'kendaraan':
// context.read<BbmBloc>().add(BBMAllDataKendaraan());
return IndexKendaraan();
case 'riwayat':
return Riwayat(
dataKendaraan,
key: UniqueKey(),
data: state.transaksi,
);
case 'tentang':
return AboutApps();
default:
return IndexMainMenu();
}
},
),
),
),
);
}
return Container();
},
),
);
}
}