From 47fc79455ba017b2b6dde67c23413ea400770bf0 Mon Sep 17 00:00:00 2001 From: kleponijo <158453666+kleponijo@users.noreply.github.com> Date: Sat, 2 May 2026 14:22:34 +0700 Subject: [PATCH] looooo --- lib/screens/home/widgets/sensor_grid.dart | 2 +- .../wind_speed/blocs/wind_speed_bloc.dart | 21 +++++++++++-------- .../wind_speed/blocs/wind_speed_state.dart | 15 +++++++++++-- .../wind_speed/views/wind_speed_screen.dart | 11 +++++++--- 4 files changed, 34 insertions(+), 15 deletions(-) diff --git a/lib/screens/home/widgets/sensor_grid.dart b/lib/screens/home/widgets/sensor_grid.dart index 83ea239..0f0b56b 100644 --- a/lib/screens/home/widgets/sensor_grid.dart +++ b/lib/screens/home/widgets/sensor_grid.dart @@ -104,7 +104,7 @@ class SensorCard extends StatelessWidget { borderRadius: BorderRadius.circular(16), boxShadow: [ BoxShadow( - color: Colors.black.withOpacity(0.05), + color: Colors.black.withValues(alpha: 0.05), blurRadius: 8, offset: const Offset(0, 2), ), diff --git a/lib/screens/monitoring/wind_speed/blocs/wind_speed_bloc.dart b/lib/screens/monitoring/wind_speed/blocs/wind_speed_bloc.dart index 0b7fbed..062787d 100644 --- a/lib/screens/monitoring/wind_speed/blocs/wind_speed_bloc.dart +++ b/lib/screens/monitoring/wind_speed/blocs/wind_speed_bloc.dart @@ -50,15 +50,8 @@ class WindSpeedBloc extends Bloc { (json) => MyWindSpeed.fromJson(json), ); - /// 2. Mapping default (harian) - final raw = TimeSeriesMapper.toDaily( - data: history, - getTime: (e) => e.timestamp, - getValue: (e) => e.speed, - ); - final dailyGraph = TimeSeriesMapper.smooth(raw); - - final daily = TimeSeriesMapper.smooth( + // ✅ Ini saja yang benar + final dailyGraph = TimeSeriesMapper.smooth( TimeSeriesMapper.toDaily( data: history, getTime: (e) => e.timestamp, @@ -93,6 +86,9 @@ class WindSpeedBloc extends Bloc { weeklySpeeds: weekly, monthlySpeeds: monthly, isLoading: false, + alertLevel: history.isNotEmpty // ← tambah ini + ? _getAlertLevel(history.last.speed) + : "Normal", )); /// 3. Start realtime stream (manual subscription) @@ -138,6 +134,7 @@ class WindSpeedBloc extends Bloc { emit(state.copyWith( currentSpeed: newValue, dailySpeeds: updated, + alertLevel: _getAlertLevel(newValue), )); } @@ -194,6 +191,12 @@ class WindSpeedBloc extends Bloc { return super.close(); } + String _getAlertLevel(double speed) { + if (speed >= _kWindDanger) return "Bahaya"; + if (speed >= _kWindWarning) return "Waspada"; + return "Normal"; + } + // ========================= // HELPER: kirim alert ke NotificationBloc // ========================= diff --git a/lib/screens/monitoring/wind_speed/blocs/wind_speed_state.dart b/lib/screens/monitoring/wind_speed/blocs/wind_speed_state.dart index 3276997..f61404d 100644 --- a/lib/screens/monitoring/wind_speed/blocs/wind_speed_state.dart +++ b/lib/screens/monitoring/wind_speed/blocs/wind_speed_state.dart @@ -8,6 +8,7 @@ class WindSpeedState extends Equatable { final List monthlySpeeds; final bool isLoading; final List history; + final String alertLevel; // "Normal" | "Waspada" | "Bahaya" const WindSpeedState({ this.currentSpeed = 0.0, @@ -17,6 +18,7 @@ class WindSpeedState extends Equatable { this.history = const [], this.monthlySpeeds = const [], this.weeklySpeeds = const [], + this.alertLevel = "Normal", }); WindSpeedState copyWith({ @@ -27,6 +29,7 @@ class WindSpeedState extends Equatable { List? monthlySpeeds, bool? isLoading, List? history, + String? alertLevel, }) { return WindSpeedState( currentSpeed: currentSpeed ?? this.currentSpeed, @@ -36,10 +39,18 @@ class WindSpeedState extends Equatable { monthlySpeeds: monthlySpeeds ?? this.monthlySpeeds, isLoading: isLoading ?? this.isLoading, history: history ?? this.history, + alertLevel: alertLevel ?? this.alertLevel, ); } @override - List get props => - [currentSpeed, selectedPeriod, dailySpeeds, isLoading, history]; + List get props => [ + currentSpeed, + selectedPeriod, + dailySpeeds, + weeklySpeeds, + monthlySpeeds, + isLoading, + history + ]; } diff --git a/lib/screens/monitoring/wind_speed/views/wind_speed_screen.dart b/lib/screens/monitoring/wind_speed/views/wind_speed_screen.dart index 2025e10..f741f4c 100644 --- a/lib/screens/monitoring/wind_speed/views/wind_speed_screen.dart +++ b/lib/screens/monitoring/wind_speed/views/wind_speed_screen.dart @@ -85,7 +85,7 @@ class WindSpeedScreen extends StatelessWidget { const SizedBox(height: 30), // 3. Info Tambahan (Status/Periode) - _buildDetailRow(state.selectedPeriod), + _buildDetailRow(state.selectedPeriod, state.alertLevel), const SizedBox(height: 24), // ← Tombol Export PDF @@ -143,11 +143,16 @@ class WindSpeedScreen extends StatelessWidget { ); } - Widget _buildDetailRow(String period) { + Widget _buildDetailRow(String period, String alertLevel) { + final (icon, color) = switch (alertLevel) { + "Bahaya" => (Icons.warning_rounded, Colors.red), + "Waspada" => (Icons.info_outline, Colors.orange), + _ => (Icons.check_circle, Colors.green), + }; return Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - _miniInfoCard("Status", "Normal", Icons.check_circle, Colors.green), + _miniInfoCard("Status", alertLevel, icon, color), _miniInfoCard("Periode", period, Icons.timer, Colors.orange), ], );