// import 'dart:convert'; // import 'package:flutter/material.dart'; // import 'package:piring_baru/bloc/nav/bottom_nav.dart'; // import 'package:piring_baru/kalori/tambah.dart'; // import 'package:http/http.dart' as http; // import 'package:intl/intl.dart'; // import 'package:piring_baru/model/user.dart'; // import 'package:shared_preferences/shared_preferences.dart'; // class Kalori extends StatefulWidget { // const Kalori({super.key}); // @override // State createState() => _KaloriState(); // } // class _KaloriState extends State { // List articles2 = []; // final Map>> groupedData = {}; // double totalEnergi = 0.0; // String Id = ''; // String formattedDate = DateFormat('yyyy-MM-dd').format(DateTime.now()); // String clientId = "PKL2023"; // String clientSecret = "PKLSERU"; // String tokenUrl = // "https://apem.esolusindo.com/API/Token/token"; // Ganti dengan URL token endpoint Anda // String accessToken = ""; // @override // void initState() { // super.initState(); // loadUserDataAndFetchData(); // fetchData2(); // } // Future fetchData2() async { // final Uri apiUrl2 = // Uri.parse('https://isipiringku.esolusindo.com/api/JadwalMakan/jadwal'); // final response = await http.get(apiUrl2); // if (response.statusCode == 200) { // final Map data = json.decode(response.body); // final List responseList = data['response']; // setState(() { // articles2 = responseList; // }); // } else { // throw Exception('Failed to load data from API'); // } // } // Future getToken() async { // try { // // Buat permintaan untuk mendapatkan token menggunakan client_credentials // var response = await http.post( // Uri.parse(tokenUrl), // headers: { // 'Content-Type': 'application/x-www-form-urlencoded', // }, // body: { // 'grant_type': 'client_credentials', // 'client_id': clientId, // 'client_secret': clientSecret, // }, // ); // if (response.statusCode == 200) { // Map tokenData = jsonDecode(response.body); // accessToken = tokenData['access_token']; // print('Token Akses: $accessToken'); // } else { // // Handle error, misalnya, menampilkan pesan kesalahan // print('Gagal mendapatkan token: ${response.statusCode}'); // } // } catch (e) { // // Handle exception, misalnya, menampilkan pesan kesalahan // print('Gagal mendapatkan token: $e'); // } // } // Future loadUserDataAndFetchData() async { // await loadUserData(); // Menunggu hingga loadUserData selesai // fetchData(); // Panggil fetchData setelah Id diisi // } // Future loadUserData() async { // final prefs = await SharedPreferences.getInstance(); // final userDataString = prefs.getString('user_data'); // if (userDataString != null) { // final userData = UserData.fromJson(json.decode(userDataString)); // print(userData.nama); // setState(() { // Id = userData.idUser.toString(); // }); // } // } // List data = []; // Future fetchData() async { // if (Id.isEmpty) { // // Pastikan Id tidak kosong sebelum membuat permintaan http // return; // } // print(Id); // String fetkal = // "https://isipiringku.esolusindo.com/api/Makanan/konsumsi?id_user=$Id&waktu=$formattedDate"; // final response = await http.get( // Uri.parse(fetkal), // ); // print(fetkal); // print(Id); // if (response.statusCode == 200) { // print(Uri.parse); // final jsonResponse = json.decode(response.body); // print(jsonResponse); // setState(() { // data = jsonResponse['response']; // // Hitung total energi // totalEnergi = data // .map((item) => double.parse(item['energi'])) // .fold(0.0, (prev, curr) => prev + curr); // Change 0 to 0.0 // }); // } else { // throw Exception('Failed to load data'); // } // } // @override // Widget build(BuildContext context) { // return Scaffold( // bottomNavigationBar: const BottomNavBar(selected: 1), // body: SingleChildScrollView( // child: Stack(children: [ // Container( // height: 130, // width: double.infinity, // decoration: const BoxDecoration( // image: DecorationImage( // image: AssetImage('assets/images/head2.jpg'), // fit: BoxFit.cover)), // ), // SafeArea( // child: Padding( // padding: const EdgeInsets.symmetric(horizontal: 15.0), // child: Container( // width: MediaQuery.of(context).size.width, // child: Stack( // children: [ // Column( // crossAxisAlignment: CrossAxisAlignment.start, // children: [ // const Padding(padding: EdgeInsets.only(top: 64)), // const SizedBox(height: 20), // Center( // child: Container( // width: MediaQuery.of(context).size.height * 0.4, // height: 30, // decoration: BoxDecoration( // gradient: const LinearGradient( // colors: [ // Color.fromARGB(255, 250, 154, 0), // Color.fromARGB(255, 246, 80, 20), // Color.fromARGB(255, 235, 38, 16), // ], // ), // borderRadius: BorderRadius.circular(30), // boxShadow: kElevationToShadow[1], // ), // padding: const EdgeInsets.symmetric( // horizontal: 5, // vertical: 0, // ), // child: const Center( // child: Text( // 'Kalori Harian', // style: TextStyle( // color: Colors.white, // fontWeight: FontWeight.bold, // ), // ), // ), // ), // ), // const SizedBox( // height: 10, // ), // Container( // padding: const EdgeInsets.only(left: 15), // child: Row(children: [ // const Icon( // Icons.calendar_month, // color: Colors.redAccent, // size: 30, // ), // const SizedBox( // width: 20, // ), // Container( // alignment: Alignment.center, // width: 100, // height: 30, // decoration: BoxDecoration( // color: Colors.redAccent, // borderRadius: BorderRadius.circular(10), // ), // child: Text( // formattedDate, // style: const TextStyle( // color: Colors.white, // fontWeight: FontWeight.bold), // ), // ) // ]), // ), // const SizedBox( // height: 30, // ), // Container( // padding: const EdgeInsets.only(left: 15, right: 15), // child: Row( // mainAxisAlignment: MainAxisAlignment.spaceBetween, // children: [ // Container( // child: const Text( // 'Budget Kalori Harian\n1800 Kkal', // style: TextStyle( // color: Colors.black, // fontSize: 16, // fontWeight: FontWeight.bold), // ), // ), // Container( // alignment: Alignment.center, // height: 50, // width: 100, // decoration: BoxDecoration( // color: const Color.fromARGB( // 255, 229, 222, 156), // borderRadius: BorderRadius.circular(10)), // child: // // ignore: unnecessary_null_comparison // totalEnergi == 0 // ? CircularProgressIndicator() // : Text( // "${totalEnergi.toInt()} Kkal", // style: const TextStyle( // color: Colors.black, // fontSize: 16, // fontWeight: FontWeight.bold), // textAlign: TextAlign.center, // ), // ), // ], // ), // ), // const SizedBox( // height: 20, // ), // Container( // height: 350, // child: ListView( // children: articles2.map((article2) { // final String imageUrl2 = article2['gambar']; // final String judul2 = article2['nama']; // print(imageUrl2); // return Card( // child: Padding( // padding: const EdgeInsets.all(8.0), // child: Row( // children: [ // Image.network( // imageUrl2, // width: // 100, // Sesuaikan dengan ukuran gambar yang Anda inginkan // height: // 50, // Sesuaikan dengan ukuran gambar yang Anda inginkan // ), // SizedBox(width: 16), // Text( // judul2, // style: TextStyle( // fontSize: 16, // fontWeight: FontWeight.bold, // ), // ), // ], // ), // ), // ); // }).toList(), // ), // ), // Container( // // Tinggi container // child: Column( // children: [ // SizedBox( // height: 50, // ), // Center( // child: ElevatedButton( // onPressed: () { // data.forEach((item) { // final namaMakanan = // item['nama_makanan']; // if (!groupedData // .containsKey(namaMakanan)) { // groupedData[namaMakanan] = [item]; // } else { // groupedData[namaMakanan] // ?.add(item); // } // }); // showDialog( // context: context, // builder: (BuildContext context) { // return AlertDialog( // title: Text( // 'Riwayat Hari Ini', // textAlign: TextAlign.center, // ), // content: SingleChildScrollView( // child: Column( // children: groupedData // .entries // .map((entry) { // final namaMakanan = // entry.key; // final makananList = // entry.value; // final jumlahMakanan = // makananList.length; // final totalEnergi = makananList // .map((item) => // double.parse(item[ // 'energi'])) // .fold( // 0.0, // (prev, curr) => // prev + curr); // return ListTile( // title: Text( // '$namaMakanan (x$jumlahMakanan)'), // subtitle: Text( // 'Total Energi: ${totalEnergi.toInt()}'), // ); // }).toList(), // ), // ), // actions: [ // Text( // 'Total Energi: ${totalEnergi.toInt()}'), // ElevatedButton( // onPressed: () { // Navigator.of(context) // .pop(); // }, // child: Text('Tutup'), // ), // ], // ); // }, // ); // }, // child: Text('Riwayat Hari Ini'))) // ], // ), // ), // ], // ), // ], // ), // )), // ), // ]), // ), // ); // } // } // cobalanjutan import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; import 'package:intl/intl.dart'; // import 'package:piring/bloc/nav/bottom_nav.dart'; // import 'package:piring/kalori/kalorirvisi.dart'; // import 'package:piring/kalori/tambah.dart'; // import 'package:piring/kalori/tambahRev.dart'; // import 'package:piring/model/user.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:piring_baru/bloc/nav/bottom_nav.dart'; import 'package:piring_baru/model/user.dart'; import 'package:shared_preferences/shared_preferences.dart'; class Kalori extends StatefulWidget { final List> articles2; const Kalori({super.key, required this.articles2}); @override State createState() => _KaloriState(); } class _KaloriState extends State { List articles2 = []; final Map>> groupedData = {}; double totalEnergi = 0.0; String Id = ''; String Sekarang = DateFormat('dd-MM-yyyy').format(DateTime.now()); String formattedDate = DateFormat('yyyy-MM-dd').format(DateTime.now()); String clientId = "PKL2023"; String clientSecret = "PKLSERU"; String tokenUrl = "https://apem.esolusindo.com/API/Token/token"; // Ganti dengan URL token endpoint Anda String accessToken = ""; @override void initState() { super.initState(); loadUserDataAndFetchData(); fetchData2(); } Future fetchData2() async { final Uri apiUrl2 = Uri.parse('https://isipiringku.esolusindo.com/api/JadwalMakan/jadwal'); final response = await http.get(apiUrl2); if (response.statusCode == 200) { final Map data = json.decode(response.body); final List responseList = data['response']; setState(() { articles2 = responseList; }); } else { throw Exception('Failed to load data from API'); } } Future getToken() async { try { // Buat permintaan untuk mendapatkan token menggunakan client_credentials var response = await http.post( Uri.parse(tokenUrl), headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: { 'grant_type': 'client_credentials', 'client_id': clientId, 'client_secret': clientSecret, }, ); if (response.statusCode == 200) { Map tokenData = jsonDecode(response.body); accessToken = tokenData['access_token']; print('Token Akses: $accessToken'); } else { // Handle error, misalnya, menampilkan pesan kesalahan print('Gagal mendapatkan token: ${response.statusCode}'); } } catch (e) { // Handle exception, misalnya, menampilkan pesan kesalahan print('Gagal mendapatkan token: $e'); } } Future loadUserDataAndFetchData() async { await loadUserData(); // Menunggu hingga loadUserData selesai fetchData(); // Panggil fetchData setelah Id diisi } Future loadUserData() async { final prefs = await SharedPreferences.getInstance(); final userDataString = prefs.getString('user_data'); if (userDataString != null) { final userData = UserData.fromJson(json.decode(userDataString)); print(userData.nama); setState(() { Id = userData.idUser.toString(); }); } } List data = []; Future fetchData() async { if (Id.isEmpty) { return; } print(Id); String fetkal = "https://isipiringku.esolusindo.com/api/Makanan/konsumsi?id_user=$Id&waktu=$formattedDate"; final response = await http.get( Uri.parse(fetkal), ); print(fetkal); print(Id); if (response.statusCode == 200) { print(Uri.parse); final jsonResponse = json.decode(response.body); print(jsonResponse); setState(() { data = jsonResponse['response']; // Hitung total energi totalEnergi = data .map((item) => double.parse(item['energi'])) .fold(0.0, (prev, curr) => prev + curr); // Change 0 to 0.0 if (totalEnergi == 0) { Fluttertoast.showToast( msg: "Tidak ada Data untuk di tampilkan silahkan mengisi data komsunsi terlebih dahulu", toastLength: Toast.LENGTH_LONG); } }); } else { throw Exception('Failed to load data'); } } @override Widget build(BuildContext context) { return Scaffold( bottomNavigationBar: BottomNavBar(selected: 1), body: SingleChildScrollView( child: Stack(children: [ Container( height: 130, width: double.infinity, decoration: const BoxDecoration( image: DecorationImage( image: AssetImage('assets/images/head2.jpg'), fit: BoxFit.cover)), ), SafeArea( child: Padding( padding: const EdgeInsets.symmetric(horizontal: 15.0), child: Container( width: MediaQuery.of(context).size.width, child: Stack( children: [ Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Padding(padding: EdgeInsets.only(top: 64)), const SizedBox(height: 20), Center( child: Container( width: MediaQuery.of(context).size.height * 0.4, height: 30, decoration: BoxDecoration( gradient: const LinearGradient( colors: [ Color.fromARGB(255, 250, 154, 0), Color.fromARGB(255, 246, 80, 20), Color.fromARGB(255, 235, 38, 16), ], ), borderRadius: BorderRadius.circular(30), boxShadow: kElevationToShadow[1], ), padding: const EdgeInsets.symmetric( horizontal: 5, vertical: 0, ), child: const Center( child: Text( 'Kalori Harian', style: TextStyle( color: Colors.white, fontWeight: FontWeight.bold, ), ), ), ), ), ], ), ], ), )), ), ]), ), ); } }