Merge to main #1
|
|
@ -0,0 +1,30 @@
|
|||
import 'package:agrilink_vocpro/core/constant/app_theme.dart';
|
||||
import 'package:bootstrap_icons/bootstrap_icons.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
|
||||
class ErrorDataStateWidget extends StatelessWidget {
|
||||
const ErrorDataStateWidget({
|
||||
super.key,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Icon(
|
||||
BootstrapIcons.exclamation_circle,
|
||||
color: Colors.grey.shade400,
|
||||
),
|
||||
SizedBox(height: 8.h),
|
||||
Text(
|
||||
'Terjadi Kesalahan',
|
||||
style: AppTheme.labelSmall,
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -3,10 +3,10 @@ import 'package:bootstrap_icons/bootstrap_icons.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
|
||||
class GraphicErrorWidget extends StatelessWidget {
|
||||
const GraphicErrorWidget({super.key, required this.message});
|
||||
|
||||
final String message;
|
||||
class NoDataStateWidget extends StatelessWidget {
|
||||
const NoDataStateWidget({
|
||||
super.key,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
|
@ -14,9 +14,15 @@ class GraphicErrorWidget extends StatelessWidget {
|
|||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Icon(BootstrapIcons.exclamation_circle, color: Colors.grey.shade400),
|
||||
Icon(
|
||||
BootstrapIcons.database_fill_x,
|
||||
color: Colors.grey.shade400,
|
||||
),
|
||||
SizedBox(height: 8.h),
|
||||
Text(message, style: AppTheme.labelSmall),
|
||||
Text(
|
||||
'Tidak Ada Data',
|
||||
style: AppTheme.labelSmall,
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
import 'dart:convert';
|
||||
// import 'dart:convert';
|
||||
|
||||
import 'package:agrilink_vocpro/core/state/result_state.dart';
|
||||
import 'package:agrilink_vocpro/domain/service/app_service.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:googleapis_auth/auth_io.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
// import 'package:flutter/services.dart';
|
||||
// import 'package:googleapis_auth/auth_io.dart';
|
||||
// import 'package:http/http.dart' as http;
|
||||
|
||||
class AuthProvider extends ChangeNotifier {
|
||||
TextEditingController emailController = TextEditingController();
|
||||
|
|
@ -80,30 +80,30 @@ class AuthProvider extends ChangeNotifier {
|
|||
return true;
|
||||
}
|
||||
|
||||
Future<void> getAccessToken() async {
|
||||
try {
|
||||
final serviceAccountJson = await rootBundle.loadString(
|
||||
'assets/json/agrilink-vocpro-b37f9-firebase-adminsdk-a4f6g-e6565344e3.json',
|
||||
);
|
||||
// Future<void> getAccessToken() async {
|
||||
// try {
|
||||
// final serviceAccountJson = await rootBundle.loadString(
|
||||
// 'assets/json/agrilink-vocpro-b37f9-firebase-adminsdk-a4f6g-e6565344e3.json',
|
||||
// );
|
||||
|
||||
final accountCredentials = ServiceAccountCredentials.fromJson(
|
||||
json.decode(serviceAccountJson),
|
||||
);
|
||||
// final accountCredentials = ServiceAccountCredentials.fromJson(
|
||||
// json.decode(serviceAccountJson),
|
||||
// );
|
||||
|
||||
const scope = ['https://www.googleapis.com/auth/firebase.messaging'];
|
||||
// const scope = ['https://www.googleapis.com/auth/firebase.messaging'];
|
||||
|
||||
final client = http.Client();
|
||||
// final client = http.Client();
|
||||
|
||||
try {
|
||||
final accessCredential = await obtainAccessCredentialsViaServiceAccount(
|
||||
accountCredentials, scope, client);
|
||||
final accessToken = accessCredential.accessToken.data;
|
||||
print('Access Token: $accessToken');
|
||||
} catch (e) {
|
||||
print('Error: $e');
|
||||
}
|
||||
} catch (e) {
|
||||
print('Error 2: $e');
|
||||
}
|
||||
}
|
||||
// try {
|
||||
// final accessCredential = await obtainAccessCredentialsViaServiceAccount(
|
||||
// accountCredentials, scope, client);
|
||||
// final accessToken = accessCredential.accessToken.data;
|
||||
// print('Access Token: $accessToken');
|
||||
// } catch (e) {
|
||||
// print('Error: $e');
|
||||
// }
|
||||
// } catch (e) {
|
||||
// print('Error 2: $e');
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
import 'package:agrilink_vocpro/core/constant/app_theme.dart';
|
||||
import 'package:agrilink_vocpro/core/state/result_state.dart';
|
||||
import 'package:agrilink_vocpro/core/widgets/error_data_state_widget.dart';
|
||||
import 'package:agrilink_vocpro/core/widgets/no_data_state_widget.dart';
|
||||
import 'package:agrilink_vocpro/features/home/detail_pages/conductivity/provider/conductivity_provider.dart';
|
||||
import 'package:agrilink_vocpro/features/home/widgets/graphic_error_widget.dart';
|
||||
import 'package:agrilink_vocpro/features/home/widgets/graphic_widget.dart';
|
||||
import 'package:bootstrap_icons/bootstrap_icons.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
|
@ -146,9 +147,9 @@ class ConductivityScreen extends StatelessWidget {
|
|||
maxValue: 1,
|
||||
);
|
||||
case ResultState.error:
|
||||
return const GraphicErrorWidget(message: 'Terjadi Kesalahan');
|
||||
return const ErrorDataStateWidget();
|
||||
case ResultState.noData:
|
||||
return const GraphicErrorWidget(message: 'Tidak Ada Data');
|
||||
return const NoDataStateWidget();
|
||||
case ResultState.initial:
|
||||
default:
|
||||
return const SizedBox.shrink();
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
import 'package:agrilink_vocpro/core/constant/app_theme.dart';
|
||||
import 'package:agrilink_vocpro/core/state/result_state.dart';
|
||||
import 'package:agrilink_vocpro/core/widgets/error_data_state_widget.dart';
|
||||
import 'package:agrilink_vocpro/core/widgets/no_data_state_widget.dart';
|
||||
import 'package:agrilink_vocpro/features/home/detail_pages/nitrogen/provider/nitrogen_provider.dart';
|
||||
import 'package:agrilink_vocpro/features/home/widgets/graphic_error_widget.dart';
|
||||
import 'package:agrilink_vocpro/features/home/widgets/graphic_widget.dart';
|
||||
import 'package:bootstrap_icons/bootstrap_icons.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
|
@ -146,9 +147,9 @@ class NitrogenScreen extends StatelessWidget {
|
|||
maxValue: 1,
|
||||
);
|
||||
case ResultState.error:
|
||||
return const GraphicErrorWidget(message: 'Terjadi Kesalahan');
|
||||
return const ErrorDataStateWidget();
|
||||
case ResultState.noData:
|
||||
return const GraphicErrorWidget(message: 'Tidak Ada Data');
|
||||
return const NoDataStateWidget();
|
||||
case ResultState.initial:
|
||||
default:
|
||||
return const SizedBox.shrink();
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
import 'package:agrilink_vocpro/core/constant/app_theme.dart';
|
||||
import 'package:agrilink_vocpro/core/state/result_state.dart';
|
||||
import 'package:agrilink_vocpro/core/widgets/error_data_state_widget.dart';
|
||||
import 'package:agrilink_vocpro/core/widgets/no_data_state_widget.dart';
|
||||
import 'package:agrilink_vocpro/features/home/detail_pages/ph/provider/ph_provider.dart';
|
||||
import 'package:agrilink_vocpro/features/home/detail_pages/ph/widget/ph_bar_pointer.dart';
|
||||
import 'package:agrilink_vocpro/features/home/widgets/graphic_error_widget.dart';
|
||||
import 'package:agrilink_vocpro/features/home/widgets/graphic_widget.dart';
|
||||
import 'package:bootstrap_icons/bootstrap_icons.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
|
@ -137,9 +138,9 @@ class PhScreen extends StatelessWidget {
|
|||
maxValue: 14,
|
||||
);
|
||||
case ResultState.error:
|
||||
return const GraphicErrorWidget(message: 'Terjadi Kesalahan');
|
||||
return const ErrorDataStateWidget();
|
||||
case ResultState.noData:
|
||||
return const GraphicErrorWidget(message: 'Tidak Ada Data');
|
||||
return const NoDataStateWidget();
|
||||
case ResultState.initial:
|
||||
default:
|
||||
return const SizedBox.shrink();
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
import 'package:agrilink_vocpro/core/constant/app_theme.dart';
|
||||
import 'package:agrilink_vocpro/core/state/result_state.dart';
|
||||
import 'package:agrilink_vocpro/core/widgets/error_data_state_widget.dart';
|
||||
import 'package:agrilink_vocpro/core/widgets/no_data_state_widget.dart';
|
||||
import 'package:agrilink_vocpro/features/home/detail_pages/phosphorus/provider/phosporus_provider.dart';
|
||||
import 'package:agrilink_vocpro/features/home/widgets/graphic_error_widget.dart';
|
||||
import 'package:agrilink_vocpro/features/home/widgets/graphic_widget.dart';
|
||||
import 'package:bootstrap_icons/bootstrap_icons.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
|
@ -146,9 +147,9 @@ class PhosphorusScreen extends StatelessWidget {
|
|||
maxValue: 10,
|
||||
);
|
||||
case ResultState.error:
|
||||
return const GraphicErrorWidget(message: 'Terjadi Kesalahan');
|
||||
return const ErrorDataStateWidget();
|
||||
case ResultState.noData:
|
||||
return const GraphicErrorWidget(message: 'Tidak Ada Data');
|
||||
return const NoDataStateWidget();
|
||||
case ResultState.initial:
|
||||
default:
|
||||
return const SizedBox.shrink();
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
import 'package:agrilink_vocpro/core/constant/app_theme.dart';
|
||||
import 'package:agrilink_vocpro/core/state/result_state.dart';
|
||||
import 'package:agrilink_vocpro/core/widgets/error_data_state_widget.dart';
|
||||
import 'package:agrilink_vocpro/core/widgets/no_data_state_widget.dart';
|
||||
import 'package:agrilink_vocpro/features/home/detail_pages/potassium/provider/potassium_provider.dart';
|
||||
import 'package:agrilink_vocpro/features/home/widgets/graphic_error_widget.dart';
|
||||
import 'package:agrilink_vocpro/features/home/widgets/graphic_widget.dart';
|
||||
import 'package:bootstrap_icons/bootstrap_icons.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
|
@ -146,9 +147,9 @@ class PotassiumScreen extends StatelessWidget {
|
|||
maxValue: 1,
|
||||
);
|
||||
case ResultState.error:
|
||||
return const GraphicErrorWidget(message: 'Terjadi Kesalahan');
|
||||
return const ErrorDataStateWidget();
|
||||
case ResultState.noData:
|
||||
return const GraphicErrorWidget(message: 'Tidak Ada Data');
|
||||
return const NoDataStateWidget();
|
||||
case ResultState.initial:
|
||||
default:
|
||||
return const SizedBox.shrink();
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
import 'package:agrilink_vocpro/core/constant/app_theme.dart';
|
||||
import 'package:agrilink_vocpro/core/state/result_state.dart';
|
||||
import 'package:agrilink_vocpro/core/widgets/error_data_state_widget.dart';
|
||||
import 'package:agrilink_vocpro/core/widgets/no_data_state_widget.dart';
|
||||
import 'package:agrilink_vocpro/features/home/detail_pages/soil_moisture/provider/soil_moisture_provider.dart';
|
||||
import 'package:agrilink_vocpro/features/home/widgets/graphic_error_widget.dart';
|
||||
import 'package:agrilink_vocpro/features/home/widgets/graphic_widget.dart';
|
||||
import 'package:bootstrap_icons/bootstrap_icons.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
|
@ -176,9 +177,9 @@ class SoilMoistureScreen extends StatelessWidget {
|
|||
maxValue: 1,
|
||||
);
|
||||
case ResultState.error:
|
||||
return const GraphicErrorWidget(message: 'Terjadi Kesalahan');
|
||||
return const ErrorDataStateWidget();
|
||||
case ResultState.noData:
|
||||
return const GraphicErrorWidget(message: 'Tidak Ada Data');
|
||||
return const NoDataStateWidget();
|
||||
case ResultState.initial:
|
||||
default:
|
||||
return const SizedBox.shrink();
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import 'package:agrilink_vocpro/features/home/widgets/graphic_error_widget.dart';
|
||||
import 'package:agrilink_vocpro/core/widgets/error_data_state_widget.dart';
|
||||
import 'package:agrilink_vocpro/core/widgets/no_data_state_widget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:bootstrap_icons/bootstrap_icons.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
|
@ -226,9 +227,9 @@ class SoilTemperatureScreen extends StatelessWidget {
|
|||
maxValue: 70,
|
||||
);
|
||||
case ResultState.error:
|
||||
return const GraphicErrorWidget(message: 'Terjadi Kesalahan');
|
||||
return const ErrorDataStateWidget();
|
||||
case ResultState.noData:
|
||||
return const GraphicErrorWidget(message: 'Tidak Ada Data');
|
||||
return const NoDataStateWidget();
|
||||
case ResultState.initial:
|
||||
default:
|
||||
return const SizedBox.shrink();
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
import 'package:agrilink_vocpro/core/constant/app_theme.dart';
|
||||
import 'package:agrilink_vocpro/core/state/result_state.dart';
|
||||
import 'package:agrilink_vocpro/core/widgets/error_data_state_widget.dart';
|
||||
import 'package:agrilink_vocpro/core/widgets/no_data_state_widget.dart';
|
||||
import 'package:agrilink_vocpro/features/home/detail_pages/temperature/provider/temp_provider.dart';
|
||||
import 'package:agrilink_vocpro/features/home/widgets/graphic_widget.dart';
|
||||
import 'package:bootstrap_icons/bootstrap_icons.dart';
|
||||
|
|
@ -30,7 +32,7 @@ class TemperatureScreen extends StatelessWidget {
|
|||
padding: EdgeInsets.only(right: 16),
|
||||
child: Icon(
|
||||
BootstrapIcons.thermometer_half,
|
||||
color: Colors.red,
|
||||
color: Colors.orange,
|
||||
),
|
||||
)
|
||||
],
|
||||
|
|
@ -228,39 +230,9 @@ class TemperatureScreen extends StatelessWidget {
|
|||
0),
|
||||
);
|
||||
case ResultState.error:
|
||||
return Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Icon(
|
||||
BootstrapIcons.exclamation_circle,
|
||||
color: Colors.grey.shade400,
|
||||
),
|
||||
SizedBox(height: 8.h),
|
||||
Text(
|
||||
'Terjadi Kesalahan',
|
||||
style: AppTheme.labelSmall,
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
return ErrorDataStateWidget();
|
||||
case ResultState.noData:
|
||||
return Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Icon(
|
||||
BootstrapIcons.database_fill_x,
|
||||
color: Colors.grey.shade400,
|
||||
),
|
||||
SizedBox(height: 8.h),
|
||||
Text(
|
||||
'Tidak Ada Data',
|
||||
style: AppTheme.labelSmall,
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
return NoDataStateWidget();
|
||||
case ResultState.initial:
|
||||
return const SizedBox.shrink();
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ class ListDataFromCensorDht extends StatelessWidget {
|
|||
unit: '%',
|
||||
icon: BootstrapIcons.droplet_half,
|
||||
color: Colors.white,
|
||||
censorIdentifier: 'NPK 1',
|
||||
censorIdentifier: 'DHT',
|
||||
onTap: () async {
|
||||
await context
|
||||
.push('${AppRoute.humidity}/${provider.dhtHumidity}');
|
||||
|
|
@ -67,6 +67,7 @@ class ListDataFromCensorDht extends StatelessWidget {
|
|||
unit: '°C',
|
||||
icon: BootstrapIcons.thermometer_half,
|
||||
color: Colors.white,
|
||||
censorIdentifier: 'DHT',
|
||||
onTap: () async {
|
||||
await context.push(
|
||||
'${AppRoute.temperature}/${provider.dhtTemperature}');
|
||||
|
|
@ -79,6 +80,7 @@ class ListDataFromCensorDht extends StatelessWidget {
|
|||
unit: 'lux',
|
||||
icon: BootstrapIcons.sun,
|
||||
color: Colors.white,
|
||||
censorIdentifier: 'DHT',
|
||||
onTap: () async {
|
||||
await context
|
||||
.push('${AppRoute.light}/${provider.dhtLuminosity}');
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ class ListDataFromCensorNpk1 extends StatelessWidget {
|
|||
textColor: Colors.white,
|
||||
color: AppColor.secondary,
|
||||
iconColor: Colors.white,
|
||||
censorIdentifier: censorIdentifier,
|
||||
onTap: () async {
|
||||
await context.push(
|
||||
'${AppRoute.nitrogen}/${provider.npk2SoilNitrogen}/${provider.npk1SoilNitrogen}');
|
||||
|
|
@ -69,6 +70,7 @@ class ListDataFromCensorNpk1 extends StatelessWidget {
|
|||
textColor: Colors.white,
|
||||
color: AppColor.secondary,
|
||||
iconColor: Colors.white,
|
||||
censorIdentifier: censorIdentifier,
|
||||
onTap: () async {
|
||||
await context.push(
|
||||
'${AppRoute.phosphorus}/${provider.npk1SoilPhosphorus}/${provider.npk2SoilPhosphorus}');
|
||||
|
|
@ -83,6 +85,7 @@ class ListDataFromCensorNpk1 extends StatelessWidget {
|
|||
textColor: Colors.white,
|
||||
color: AppColor.secondary,
|
||||
iconColor: Colors.white,
|
||||
censorIdentifier: censorIdentifier,
|
||||
onTap: () async {
|
||||
await context.push(
|
||||
'${AppRoute.potassium}/${provider.npk1SoilPotassium}/${provider.npk2SoilPotassium}');
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ class ListDataFromCensorNpk2 extends StatelessWidget {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
const String censorIdentifier = 'NPK 1';
|
||||
const String censorIdentifier = 'NPK 2';
|
||||
return Consumer<HomeProvider>(builder: (context, provider, child) {
|
||||
switch (provider.dataState) {
|
||||
case ResultState.loading:
|
||||
|
|
@ -54,6 +54,7 @@ class ListDataFromCensorNpk2 extends StatelessWidget {
|
|||
icon: CupertinoIcons.eyedropper,
|
||||
textColor: Colors.white,
|
||||
color: AppColor.secondary,
|
||||
censorIdentifier: censorIdentifier,
|
||||
iconColor: Colors.white,
|
||||
onTap: () async {
|
||||
await context.push(
|
||||
|
|
@ -69,6 +70,7 @@ class ListDataFromCensorNpk2 extends StatelessWidget {
|
|||
textColor: Colors.white,
|
||||
color: AppColor.secondary,
|
||||
iconColor: Colors.white,
|
||||
censorIdentifier: censorIdentifier,
|
||||
onTap: () async {
|
||||
await context.push(
|
||||
'${AppRoute.phosphorus}/${provider.npk1SoilPhosphorus}/${provider.npk2SoilPhosphorus}');
|
||||
|
|
@ -83,6 +85,7 @@ class ListDataFromCensorNpk2 extends StatelessWidget {
|
|||
textColor: Colors.white,
|
||||
color: AppColor.secondary,
|
||||
iconColor: Colors.white,
|
||||
censorIdentifier: censorIdentifier,
|
||||
onTap: () async {
|
||||
await context.push(
|
||||
'${AppRoute.potassium}/${provider.npk1SoilPotassium}/${provider.npk2SoilPotassium}');
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user