From 6b792d779c721c5aa709c4a991ee2bd620178ddd Mon Sep 17 00:00:00 2001 From: rijalhabibullah Date: Thu, 14 May 2026 03:49:04 +0700 Subject: [PATCH] memperbaiki beberapa fitur --- mobile_TA/padi_app/lib/screen/login.dart | 2 +- .../padi_app/lib/screen/register_screen.dart | 2 +- .../padi_app/lib/screen/result_screen.dart | 44 +++++++++++++++---- .../lib/services/classification_service.dart | 2 +- .../lib/services/product_service.dart | 2 +- 5 files changed, 40 insertions(+), 12 deletions(-) diff --git a/mobile_TA/padi_app/lib/screen/login.dart b/mobile_TA/padi_app/lib/screen/login.dart index 3e0220d..27c3773 100644 --- a/mobile_TA/padi_app/lib/screen/login.dart +++ b/mobile_TA/padi_app/lib/screen/login.dart @@ -35,7 +35,7 @@ class _LoginScreenState extends State { try { final response = await http .post( - Uri.parse('http://192.168.18.23:8000/api/mobile/login'), + Uri.parse('http://192.168.43.222:8000/api/mobile/login'), headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', diff --git a/mobile_TA/padi_app/lib/screen/register_screen.dart b/mobile_TA/padi_app/lib/screen/register_screen.dart index 9165c32..d8e32ac 100644 --- a/mobile_TA/padi_app/lib/screen/register_screen.dart +++ b/mobile_TA/padi_app/lib/screen/register_screen.dart @@ -45,7 +45,7 @@ class _RegisterScreenState extends State { try { final response = await http .post( - Uri.parse('http://192.168.18.23:8000/api/mobile/register'), + Uri.parse('http://192.168.43.222:8000/api/mobile/register'), headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', diff --git a/mobile_TA/padi_app/lib/screen/result_screen.dart b/mobile_TA/padi_app/lib/screen/result_screen.dart index d9b0ba6..c341cc1 100644 --- a/mobile_TA/padi_app/lib/screen/result_screen.dart +++ b/mobile_TA/padi_app/lib/screen/result_screen.dart @@ -454,7 +454,7 @@ class _ResultScreenState extends State { // Harga Text( - 'Rp ${product.price.toStringAsFixed(0)}', + 'Rp ${_formatPrice(product.price)}', style: const TextStyle( fontSize: 11, fontWeight: FontWeight.bold, @@ -498,14 +498,28 @@ class _ResultScreenState extends State { } Future _launchUrl(String urlString) async { - final Uri url = Uri.parse(urlString); + final String trimmed = urlString.trim(); + if (trimmed.isEmpty) { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text('Link kosong')), + ); + return; + } + + final Uri? parsed = Uri.tryParse(trimmed); + final Uri url = (parsed != null && parsed.hasScheme) + ? parsed + : Uri.parse('https://$trimmed'); + try { - if (await canLaunchUrl(url)) { - await launchUrl(url, mode: LaunchMode.externalApplication); - } else { - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar(content: Text('Tidak dapat membuka link')), - ); + final bool opened = await launchUrl(url, mode: LaunchMode.externalApplication); + if (!opened) { + final bool fallbackOpened = await launchUrl(url, mode: LaunchMode.platformDefault); + if (!fallbackOpened) { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text('Tidak dapat membuka link')), + ); + } } } catch (e) { ScaffoldMessenger.of(context).showSnackBar( @@ -514,6 +528,20 @@ class _ResultScreenState extends State { } } + String _formatPrice(double price) { + final value = price.round(); + final raw = value.toString(); + final buffer = StringBuffer(); + for (int i = 0; i < raw.length; i++) { + final position = raw.length - i; + buffer.write(raw[i]); + if (position > 1 && position % 3 == 1) { + buffer.write('.'); + } + } + return buffer.toString(); + } + void _showDetailPopup(BuildContext context) { showDialog( context: context, diff --git a/mobile_TA/padi_app/lib/services/classification_service.dart b/mobile_TA/padi_app/lib/services/classification_service.dart index ca5e3a0..0bb731d 100644 --- a/mobile_TA/padi_app/lib/services/classification_service.dart +++ b/mobile_TA/padi_app/lib/services/classification_service.dart @@ -10,7 +10,7 @@ class ClassificationService { // Device Fisik (WiFi): http://192.168.x.x:8000/api/classification (ganti dengan IP komputer Anda) // Testing Lokal: http://127.0.0.1:8000/api/classification // Production (ngrok): https://gobony-wedgy-cathi.ngrok-free.dev/api/classification - static const String _apiRoot = 'http://192.168.18.23:8000/api'; + static const String _apiRoot = 'https://gobony-wedgy-cathi.ngrok-free.dev/api'; static const String _baseUrl = '$_apiRoot/classification'; static const String _historyUrl = '$_apiRoot/classifications'; diff --git a/mobile_TA/padi_app/lib/services/product_service.dart b/mobile_TA/padi_app/lib/services/product_service.dart index 4eb1263..3c96261 100644 --- a/mobile_TA/padi_app/lib/services/product_service.dart +++ b/mobile_TA/padi_app/lib/services/product_service.dart @@ -41,7 +41,7 @@ class ProductItem { class ProductService { // Samakan dengan API root di classification_service.dart - static const String _apiRoot = 'http://192.168.18.23:8000/api'; + static const String _apiRoot = 'https://gobony-wedgy-cathi.ngrok-free.dev/api'; static const String _productsUrl = '$_apiRoot/products'; final http.Client _httpClient;