// import 'dart:convert'; // import 'dart:math'; // import 'package:flutter/material.dart'; // import 'package:marquee/marquee.dart'; // import 'package:page_transition/page_transition.dart'; // import 'package:piring_baru/Login/components/login_form.dart'; // import 'package:piring_baru/bloc/nav/bottom_nav.dart'; // import 'package:piring_baru/kalori/testingTotalKalori.dart'; // import 'package:http/http.dart' as http; // import 'dart:convert'; // import 'package:piring_baru/model/user.dart'; // import 'package:piring_baru/tambahDarah/tambahDarah.dart'; // import 'package:shared_preferences/shared_preferences.dart'; // class Dashboard extends StatefulWidget { // const Dashboard({super.key}); // @override // State createState() => _DashboardState(); // } // class _DashboardState extends State { // Map? forIMT; // String imtText = ''; // List data = []; // List articles = []; // String Nama = ''; // String Email = ''; // String TB = ''; // String BB = ''; // String Id = ''; // String umur = ''; // @override // void initState() { // super.initState(); // loadUserData(); // fetchData(); // fetchData2(); // fetchData3(); // } // Future fetchData3() async { // final response = await http.get( // Uri.parse( // 'https://isipiringku.esolusindo.com/api/DataUser/DataUser?id_user=36'), // ); // if (response.statusCode == 200) { // final data = jsonDecode(response.body); // forIMT = data['response'][0]; // final tinggiBadanCm = double.parse(forIMT!['tinggi_badan']); // final beratBadanKg = double.parse(forIMT!['berat_badan']); // final tinggiBadanM = tinggiBadanCm / 100; // final imt = beratBadanKg / (tinggiBadanM * tinggiBadanM); // imtText = '${imt.toStringAsFixed(2)}'; // } else { // throw Exception('Failed to load data from API'); // } // } // Future fetchData2() async { // final Uri apiUrl = // Uri.parse('https://isipiringku.esolusindo.com/api/Artikel/getArtikel'); // final response = await http.get(apiUrl); // if (response.statusCode == 200) { // final Map data = json.decode(response.body); // final List responseList = data['response']; // setState(() { // articles = responseList; // }); // } else { // throw Exception('Failed to load data from API'); // } // } // Future fetchData() async { // final response = await http.get( // Uri.parse('https://isipiringku.esolusindo.com/api/Gambar/getgambar')); // if (response.statusCode == 200) { // setState(() { // data = json.decode(response.body)['response']; // }); // } // } // 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(() { // Nama = userData.nama; // Email = userData.email; // TB = userData.tinggiBadan; // BB = userData.beratBadan; // Id = userData.idUser.toString(); // umur = userData.umur; // }); // } // } // Future logoutUser() async { // // Hapus token akses dari Shared Preferences // final prefs = await SharedPreferences.getInstance(); // prefs.remove('access_token'); // prefs.remove('user_data'); // Jika ada data pengguna lain yang perlu dihapus // // Arahkan pengguna kembali ke halaman login // Navigator.of(context).pushAndRemoveUntil( // PageTransition( // child: LoginForm(), // type: PageTransitionType.fade, // duration: const Duration(milliseconds: 500), // ), // (route) => false, // Hapus seluruh riwayat navigasi // ); // } // @override // Widget build(BuildContext context) { // return Scaffold( // bottomNavigationBar: BottomNavBar(selected: 0), // appBar: AppBar( // toolbarHeight: 20, // elevation: 0, // backgroundColor: Colors.deepOrange, // ), // body: ListView( // children: [ // Container( // height: 200.0, // width: double.infinity, // decoration: BoxDecoration( // color: Colors.deepOrange, // borderRadius: BorderRadius.only( // bottomLeft: Radius.circular(30), // bottomRight: Radius.circular(30))), // child: Column( // children: [ // Row( // mainAxisAlignment: MainAxisAlignment.spaceBetween, // children: [ // Container( // margin: EdgeInsets.only(left: 24), // child: Text( // 'Hi, ' + Nama + Id, // style: TextStyle( // color: Colors.white, // fontSize: 24, // fontWeight: FontWeight.bold, // ), // ), // ), // Container( // margin: EdgeInsets.only(right: 24), // child: Transform.scale( // scale: 1.5, // child: Icon( // Icons.notifications, // color: Colors.yellow, // ), // ), // ), // ], // ), // Padding( // padding: const EdgeInsets.only( // left: 15, // right: 15, // top: 25, // ), // child: Container( // height: 120, // width: 360, // decoration: BoxDecoration( // color: Colors.brown.withOpacity(0.75), // borderRadius: BorderRadius.circular(15.0), // ), // child: GestureDetector( // onTap: () { // // Navigator.push( // // context, // // MaterialPageRoute( // // builder: (context) => InputBB(), // // ), // // ); // }, // child: Row( // mainAxisAlignment: MainAxisAlignment.spaceEvenly, // children: [ // Column( // mainAxisAlignment: MainAxisAlignment.center, // children: [ // Text( // 'Umur', // style: TextStyle( // color: Colors.white, // fontSize: 14, // ), // textAlign: TextAlign.center, // ), // SizedBox( // height: 10.0, // ), // Text( // umur + ' Tahun', // style: TextStyle( // color: Colors.white, // fontSize: 14, // fontWeight: FontWeight.bold, // ), // textAlign: TextAlign.center, // ), // ], // ), // VerticalDivider( // color: Colors.white, // thickness: 1.0, // indent: 10.0, // endIndent: 10.0, // ), // Column( // mainAxisAlignment: MainAxisAlignment.center, // children: [ // Text( // 'Tinggi\nBadan', // style: TextStyle( // color: Colors.white, // fontSize: 14, // ), // textAlign: TextAlign.center, // ), // SizedBox( // height: 10.0, // ), // Text( // TB + 'cm', // style: TextStyle( // color: Colors.white, // fontSize: 14, // fontWeight: FontWeight.bold, // ), // textAlign: TextAlign.center, // ), // ], // ), // VerticalDivider( // color: Colors.white, // thickness: 1.0, // indent: 10.0, // endIndent: 10.0, // ), // Column( // mainAxisAlignment: MainAxisAlignment.center, // children: [ // Text( // 'Berat\nBadan', // style: TextStyle( // color: Colors.white, // fontSize: 14, // ), // textAlign: TextAlign.center, // ), // SizedBox( // height: 10.0, // ), // Text( // BB + 'kg', // style: TextStyle( // color: Colors.white, // fontSize: 14, // fontWeight: FontWeight.bold, // ), // textAlign: TextAlign.center, // ), // ], // ), // VerticalDivider( // color: Colors.white, // thickness: 1.0, // indent: 10.0, // endIndent: 10.0, // ), // Column( // mainAxisAlignment: MainAxisAlignment.center, // children: [ // Text( // 'IMT', // style: TextStyle( // color: Colors.white, // fontSize: 14, // ), // textAlign: TextAlign.center, // ), // SizedBox( // height: 20.0, // ), // forIMT == null // ? CircularProgressIndicator() // : Text( // imtText, // style: TextStyle( // color: Colors.white, // fontSize: 14, // fontWeight: FontWeight.bold, // ), // textAlign: TextAlign.center, // ), // ], // ), // ], // ), // ), // ), // ), // ], // ), // ), // // jangan di utak atik .. F // SizedBox( // height: 10, // ), // Container( // width: double.infinity, // height: 20, // margin: EdgeInsets.only(left: 10, right: 10), // decoration: BoxDecoration( // borderRadius: BorderRadius.circular(20), // color: const Color.fromARGB(255, 132, 165, 192)), // child: Marquee( // text: // 'Jaga Kesehatan Anda Dengan Menjaga Pola Makan Dan Olah Raga Yang Cukup', // style: TextStyle(fontSize: 16), // scrollAxis: Axis.horizontal, // Arah pergerakan teks (horizontal) // crossAxisAlignment: CrossAxisAlignment.start, // blankSpace: 300, // Jarak antara teks yang berulang // velocity: 30, // Kecepatan bergeraknya teks // pauseAfterRound: // Duration(seconds: 1), // Jeda setelah satu putaran // showFadingOnlyWhenScrolling: false, // fadingEdgeStartFraction: 0.1, // fadingEdgeEndFraction: 0.1, // startPadding: 10, // Padding awal sebelum teks bergerak // accelerationDuration: Duration(seconds: 1), // Durasi percepatan // accelerationCurve: Curves.linear, // Kurva percepatan // decelerationDuration: // Duration(milliseconds: 500), // Durasi perlambatan // decelerationCurve: Curves.easeOut, // Kurva perlambatan // ), // ), // // marquee // SizedBox( // height: 10, // ), // Container( // height: 130, // child: ListView.builder( // itemExtent: 250, // itemCount: data.length, // Jumlah card yang ingin ditampilkan // scrollDirection: // Axis.horizontal, // Untuk menggeser card ke samping // itemBuilder: (BuildContext context, int index) { // // Daftar warna gradient yang berbeda // List> gradients = [ // [Colors.blue, Colors.white], // [Colors.green, Colors.white], // [Colors.red, Colors.white], // [Colors.orange, Colors.white], // [Colors.purple, Colors.white], // ]; // return Padding( // padding: EdgeInsets.all(10.0), // Spasi antar card // child: Container( // padding: EdgeInsets.only(left: 10, right: 10), // width: 250, // Lebar card // decoration: BoxDecoration( // borderRadius: BorderRadius.circular(20.0), // gradient: LinearGradient( // colors: gradients[index], // begin: Alignment.topLeft, // end: Alignment.bottomRight, // ), // ), // child: Row( // mainAxisAlignment: MainAxisAlignment.start, // children: [ // // Gambar dari asset // Expanded( // child: Column( // mainAxisAlignment: MainAxisAlignment.center, // crossAxisAlignment: CrossAxisAlignment.center, // children: [ // Container( // alignment: Alignment.center, // child: Text( // data[index][ // 'judul_artikel'], // Ganti dengan deskripsi yang sesuai // style: TextStyle( // color: Colors // .white, // Warna teks pada latar belakang gradient // fontSize: 16.0, // fontWeight: FontWeight.bold, // ), // textAlign: TextAlign.center, // ), // ), // // Tambahkan widget lainnya di sini jika diperlukan // ], // ), // ), // SizedBox(width: 10), // Spasi antara gambar dan judul // Container( // width: 90, // Lebar gambar // height: 90, // Tinggi gambar // child: ClipRRect( // borderRadius: BorderRadius.circular(20), // child: Image.network( // data[index]['url'], // fit: BoxFit.cover, // ), // ), // ), // ], // ), // ), // ); // }, // ), // ), // SizedBox(height: 20), // Container( // height: 175, // child: ListView( // children: articles.map((article) { // final String imageUrl = article['gambar_artikel']; // final String judul = article['judul']; // return Card( // child: Padding( // padding: const EdgeInsets.all(8.0), // child: Row( // children: [ // Image.network( // imageUrl, // width: // 100, // Sesuaikan dengan ukuran gambar yang Anda inginkan // height: // 50, // Sesuaikan dengan ukuran gambar yang Anda inginkan // ), // SizedBox(width: 16), // Text( // judul, // style: TextStyle( // fontSize: 16, // fontWeight: FontWeight.bold, // ), // ), // ], // ), // ), // ); // }).toList(), // ), // ), // Container( // padding: (EdgeInsets.only(left: 40)), // child: Text( // 'Pusat Informasi', // style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold), // )), // Container( // height: 100, // Tinggi container // child: Column( // children: [ // // Card pertama // Card( // elevation: 3, // Tingkat elevasi card // shape: RoundedRectangleBorder( // borderRadius: BorderRadius.circular(10.0), // ), // margin: EdgeInsets.only(left: 20, right: 20), // child: Padding( // padding: EdgeInsets.all(15.0), // Padding untuk konten card // child: Row( // children: [ // // Gambar dari asset // Container( // width: 50.0, // Lebar gambar // height: 50.0, // Tinggi gambar // decoration: BoxDecoration( // borderRadius: BorderRadius.circular(10.0), // image: DecorationImage( // image: AssetImage('assets/images/shusi.webp'), // fit: BoxFit.cover, // ), // ), // ), // SizedBox( // width: 40.0, // ), // Center( // child: Text( // 'Memiliki Pertanyaa Seputar \n Isi Piringku?', // style: TextStyle(fontWeight: FontWeight.bold), // textAlign: TextAlign.center, // )) // ], // ), // ), // ), // ], // ), // ), // Container( // child: ElevatedButton( // onPressed: () { // // final notificationHelper = NotificationHelper(); // // notificationHelper.showNotification(0, // // 'Sample Notification', 'This is a sample notification'); // }, // child: Text('tambah'))) // ], // ), // ); // } // } import 'dart:convert'; import 'dart:math'; import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:marquee/marquee.dart'; import 'package:page_transition/page_transition.dart'; import 'package:http/http.dart' as http; // import 'package:piring/Login/login_form.dart'; // import 'package:piring/bloc/nav/bottom_nav.dart'; // import 'package:piring/dashboard/FaQ.dart'; // import 'package:piring/dashboard/detilArtikel.dart'; // import 'package:piring/dashboard/informasi.dart'; // import 'package:piring/kalori/tambahRev.dart'; // import 'package:piring/model/user.dart'; import 'package:piring_baru/bloc/nav/bottom_nav.dart'; import 'package:piring_baru/dashboard/artikel.dart'; import 'package:piring_baru/dashboard/backup/FaQ.2.dart'; import 'package:piring_baru/dashboard/backup/informasi.dart'; import 'package:piring_baru/model/user.dart'; import 'dart:convert'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:webview_flutter/webview_flutter.dart'; class Dashboard extends StatefulWidget { const Dashboard({super.key}); @override State createState() => _DashboardState(); } class _DashboardState extends State { Map? forIMT; String imtText = ''; List> faqData = []; List data = []; List articles = []; String Nama = ''; String Email = ''; String TB = ''; String BB = ''; String Id = ''; String umur = ''; String username = ''; bool istunggu = false; String getFaq = ''; @override void initState() { super.initState(); loadUserData(); loadUserDataAndFetchData(); fetchData(); fetchData2(); } Future loadUserDataAndFetchData() async { await loadUserData(); // Menunggu hingga loadUserData selesai fetchData3(); // Panggil fetchData setelah Id diisi } Future fetchData3() async { if (Id.isEmpty) { return; } final response = await http.get( Uri.parse( 'https://isipiringku.esolusindo.com/api/DataUser/DataUser?id_user=$Id'), ); if (response.statusCode == 200) { final data = jsonDecode(response.body); forIMT = data['response'][0]; final tinggiBadanCm = double.parse(forIMT!['tinggi_badan']); final beratBadanKg = double.parse(forIMT!['berat_badan']); final tinggiBadanM = tinggiBadanCm / 100; final imt = beratBadanKg / (tinggiBadanM * tinggiBadanM); imtText = '${imt.toStringAsFixed(2)}'; if (imtText == 0) { Fluttertoast.showToast( msg: 'Tidak dapat menghitung indeks masa tubuh, silahkan lengkapi data tinggi dan berat badan anda'); } } else { throw Exception('Failed to load data from API'); } } Future fetchData2() async { final Uri apiUrl = Uri.parse('https://isipiringku.esolusindo.com/api/Artikel/getArtikel'); final response = await http.get(apiUrl); if (response.statusCode == 200) { final Map data = json.decode(response.body); final List responseList = data['response']; setState(() { articles = responseList; }); } else { throw Exception('Failed to load data from API'); } } Future fetchData() async { final response = await http.get( Uri.parse('https://isipiringku.esolusindo.com/api/Gambar/getgambar')); if (response.statusCode == 200) { setState(() { data = json.decode(response.body)['response']; }); } } 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(() { Nama = userData.nama; Email = userData.email; TB = userData.tinggiBadan; BB = userData.beratBadan; Id = userData.idUser.toString(); umur = userData.umur; username = userData.username; getFaq = 'https://isipiringku.esolusindo.com/api/FAQ/faq?id_user=$Id'; }); } } void _showAlertDialog(BuildContext context) { if (imtText.isEmpty) { Fluttertoast.showToast( msg: 'Tidak dapat menghitung indeks masa tubuh, silahkan lengkapi data tinggi dan berat badan anda'); return; } double imtValue = double.parse(imtText); if (imtValue < 18.5) { showDialog( context: context, builder: (context) { return AlertDialog( title: Text('Status IMT'), content: Column( mainAxisSize: MainAxisSize.min, children: [ Image.asset( 'assets/images/kurang.gif'), // Ganti dengan lokasi gambar yang sesuai Text('Berat badanmu kurang nih, yuk tambah kalori'), ], ), actions: [ TextButton( child: Text('Tutup'), onPressed: () { Navigator.of(context).pop(); }, ), ], ); }, ); } else if (imtValue >= 18.5 && imtValue <= 25.0) { showDialog( context: context, builder: (context) { return AlertDialog( title: Text('Status IMT'), content: Column( mainAxisSize: MainAxisSize.min, children: [ Image.asset( 'assets/images/pas.gif'), // Ganti dengan lokasi gambar yang sesuai Text('Yeay beratbadanmu ideal'), ], ), actions: [ TextButton( child: Text('Tutup'), onPressed: () { Navigator.of(context).pop(); }, ), ], ); }, ); } else { showDialog( context: context, builder: (context) { return AlertDialog( title: Text('Status IMT'), content: Column( mainAxisSize: MainAxisSize.min, children: [ Image.asset( 'assets/images/gemuk.gif'), // Ganti dengan lokasi gambar yang sesuai Text('Berat badanmu berlebih nih, yuk Olahraga'), ], ), actions: [ TextButton( child: Text('Tutup'), onPressed: () { Navigator.of(context).pop(); }, ), ], ); }, ); } } void fetchFAQData() async { final Uri url = Uri.parse(getFaq); // Mengonversi URL string ke objek Uri final response = await http.get(url); if (response.statusCode == 200) { final Map responseData = json.decode(response.body); if (responseData['status'] == 200) { final List faqList = responseData['data']; // Ubah tipe data elemen-elemen dalam faqList ke Map List> faqData = faqList .map((faq) => { 'pertanyaan': faq['pertanyaan'].toString(), 'jawaban': faq['jawaban'].toString(), }) .toList(); setState(() { faqData = faqData; }); // Tampilkan data dalam AlertDialog showDialog( context: context, builder: (context) { return AlertDialog( title: Text('FAQ'), content: Container( height: 300, child: ListView.builder( itemCount: faqData.length, itemBuilder: (BuildContext context, int index) { return Column( children: [ Container( alignment: Alignment.center, height: 40, decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), color: Colors.grey, ), padding: EdgeInsetsDirectional.only(start: 5, end: 5), child: Text( faqData[index]['pertanyaan'] ?? "Pertanyaan tidak tersedia", textAlign: TextAlign.center, style: TextStyle(color: Colors.white), ), ), SizedBox( height: 10), // Spacing between question and answer Container( alignment: Alignment.center, height: 40, decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), color: Colors.green, ), padding: EdgeInsetsDirectional.only(start: 5, end: 5), child: Text( faqData[index]['jawaban'] ?? "Jawaban tidak tersedia", textAlign: TextAlign.center, style: TextStyle(color: Colors.white), ), ), ], ); }, ), ), actions: [ TextButton( onPressed: () { Navigator.of(context).pop(); }, child: Text('Tutup'), ), ], ); }, ); } else if (responseData['status'] == 404 && responseData['message'] == "Data tidak ditemukan.") { // Tampilkan pesan 'data kosong nih' dan gambar 'assets/images/gemuk.gif' showDialog( context: context, builder: (context) { return AlertDialog( title: Text('Data Tidak Ditemukan'), content: Column( children: [ Text('Data kosong nih'), Image.asset('assets/images/gemuk.gif'), ], ), actions: [ TextButton( onPressed: () { Navigator.of(context).pop(); }, child: Text('Tutup'), ), ], ); }, ); } } } @override Widget build(BuildContext context) { return Scaffold( bottomNavigationBar: BottomNavBar(selected: 0), appBar: AppBar( toolbarHeight: 20, elevation: 0, backgroundColor: Colors.deepOrange, ), body: ListView( children: [ Container( height: 200.0, width: double.infinity, decoration: BoxDecoration( color: Colors.deepOrange, borderRadius: BorderRadius.only( bottomLeft: Radius.circular(30), bottomRight: Radius.circular(30))), child: Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( margin: EdgeInsets.only(left: 24), child: Text( 'Hi, ' + username, style: TextStyle( color: Colors.white, fontSize: 24, fontWeight: FontWeight.bold, ), ), ), Container( margin: EdgeInsets.only(right: 24), child: Transform.scale( scale: 1.5, child: GestureDetector( onTap: () { print('icon ditekan'); fetchFAQData(); }, child: Transform.scale( scale: 1.5, child: Icon( Icons.notifications, color: Colors.yellow, ), ), ), ), ), ], ), Padding( padding: const EdgeInsets.only( left: 15, right: 15, top: 25, ), child: Container( height: 120, width: 360, decoration: BoxDecoration( color: Colors.brown.withOpacity(0.75), borderRadius: BorderRadius.circular(15.0), ), child: GestureDetector( onTap: () { // Navigator.push( // context, // MaterialPageRoute( // builder: (context) => InputBB(), // ), // ); }, child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( 'Umur', style: TextStyle( color: Colors.white, fontSize: 14, ), textAlign: TextAlign.center, ), SizedBox( height: 10.0, ), Text( umur + ' Tahun', style: TextStyle( color: Colors.white, fontSize: 14, fontWeight: FontWeight.bold, ), textAlign: TextAlign.center, ), ], ), VerticalDivider( color: Colors.white, thickness: 1.0, indent: 10.0, endIndent: 10.0, ), Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( 'Tinggi\nBadan', style: TextStyle( color: Colors.white, fontSize: 14, ), textAlign: TextAlign.center, ), SizedBox( height: 10.0, ), Text( TB + 'cm', style: TextStyle( color: Colors.white, fontSize: 14, fontWeight: FontWeight.bold, ), textAlign: TextAlign.center, ), ], ), VerticalDivider( color: Colors.white, thickness: 1.0, indent: 10.0, endIndent: 10.0, ), Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( 'Berat\nBadan', style: TextStyle( color: Colors.white, fontSize: 14, ), textAlign: TextAlign.center, ), SizedBox( height: 10.0, ), Text( BB + 'kg', style: TextStyle( color: Colors.white, fontSize: 14, fontWeight: FontWeight.bold, ), textAlign: TextAlign.center, ), ], ), VerticalDivider( color: Colors.white, thickness: 1.0, indent: 10.0, endIndent: 10.0, ), Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Row( mainAxisAlignment: MainAxisAlignment.center, children: [ GestureDetector( onTap: () { _showAlertDialog(context); }, child: Icon( Icons.error, color: Colors.white, // Warna ikon tanda seru size: 14, // Ukuran ikon tanda seru ), ), Text( 'IMT', style: TextStyle( color: Colors.white, fontSize: 14, ), textAlign: TextAlign.center, ), ], ), SizedBox( height: 20.0, ), Text( imtText, style: TextStyle( color: Colors.white, fontSize: 14, fontWeight: FontWeight.bold, ), textAlign: TextAlign.center, ), ], ), ], ), ), ), ), ], ), ), // jangan di utak atik .. F SizedBox( height: 10, ), Container( width: double.infinity, height: 20, margin: EdgeInsets.only(left: 10, right: 10), decoration: BoxDecoration( borderRadius: BorderRadius.circular(20), color: Color.fromARGB(255, 231, 130, 71)), child: Marquee( text: 'Jaga Kesehatan Anda Dengan Menjaga Pola Makan Dan Olah Raga Yang Cukup', style: TextStyle(fontSize: 16), scrollAxis: Axis.horizontal, // Arah pergerakan teks (horizontal) crossAxisAlignment: CrossAxisAlignment.start, blankSpace: 300, // Jarak antara teks yang berulang velocity: 30, // Kecepatan bergeraknya teks pauseAfterRound: Duration(seconds: 1), // Jeda setelah satu putaran showFadingOnlyWhenScrolling: false, fadingEdgeStartFraction: 0.1, fadingEdgeEndFraction: 0.1, startPadding: 10, // Padding awal sebelum teks bergerak accelerationDuration: Duration(seconds: 1), // Durasi percepatan accelerationCurve: Curves.linear, // Kurva percepatan decelerationDuration: Duration(milliseconds: 500), // Durasi perlambatan decelerationCurve: Curves.easeOut, // Kurva perlambatan ), ), // marquee SizedBox( height: 10, ), Container( height: 130, child: ListView.builder( itemExtent: 250, itemCount: data.length, // Jumlah card yang ingin ditampilkan scrollDirection: Axis.horizontal, // Untuk menggeser card ke samping itemBuilder: (BuildContext context, int index) { // Daftar warna gradient yang berbeda List> gradients = [ [Colors.blue, Colors.white], [Colors.green, Colors.white], [Colors.red, Colors.white], [Colors.orange, Colors.white], [Colors.purple, Colors.white], ]; return GestureDetector( onTap: () { // Navigate to the detail page here Navigator.push( context, MaterialPageRoute( builder: (context) => ArtikelBawah(data[index]), ), ); }, child: Padding( padding: EdgeInsets.all(10.0), // Spasi antar card child: Container( padding: EdgeInsets.only(left: 10, right: 10), width: 250, // Lebar card decoration: BoxDecoration( borderRadius: BorderRadius.circular(20.0), gradient: LinearGradient( colors: gradients[index], begin: Alignment.topLeft, end: Alignment.bottomRight, ), ), child: Row( mainAxisAlignment: MainAxisAlignment.start, children: [ // Gambar dari asset Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Container( alignment: Alignment.center, child: Text( data[index][ 'judul_artikel'], // Ganti dengan deskripsi yang sesuai style: TextStyle( color: Colors .white, // Warna teks pada latar belakang gradient fontSize: 16.0, fontWeight: FontWeight.bold, ), textAlign: TextAlign.center, ), ), // Tambahkan widget lainnya di sini jika diperlukan ], ), ), SizedBox(width: 10), // Spasi antara gambar dan judul Container( width: 90, // Lebar gambar height: 90, // Tinggi gambar child: ClipRRect( borderRadius: BorderRadius.circular(20), child: Image.network( data[index]['url'], fit: BoxFit.cover, ), ), ), ], ), ), ), ); }, ), ), SizedBox(height: 10), Container( padding: (EdgeInsets.only(left: 20)), child: Text( 'Informasi Nutrisi Makanan', style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold), )), SizedBox(height: 10), SizedBox(height: 10), Container( padding: EdgeInsets.only(left: 10, right: 10), height: 175, child: ListView( children: articles.map((article) { final String imageUrl = article['gambar_artikel']; final String judul = article['judul']; final String Konten = article['view']; return GestureDetector( onTap: () { // Navigate to the detail page here Navigator.of(context).push( MaterialPageRoute( builder: (context) => Informasi( imageUrl: imageUrl, judul: judul, Konten: Konten), ), ); }, child: Card( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), ), child: Padding( padding: const EdgeInsets.all(8.0), child: Row( children: [ Container( width: 50, // Lebar gambar height: 50, // Tinggi gambar child: ClipRRect( borderRadius: BorderRadius.circular(10), child: Image.network( imageUrl, fit: BoxFit.cover, ), ), ), SizedBox(width: 16), Text( judul, style: TextStyle( fontSize: 16, fontWeight: FontWeight.bold, ), ), ], ), ), ), ); }).toList(), ), ), SizedBox( height: 10, ), Container( padding: (EdgeInsets.only(left: 40)), child: Text( 'Pusat Informasi', style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold), )), SizedBox( height: 10, ), Container( height: 100, // Tinggi container child: GestureDetector( onTap: () { // Navigasi ke halaman FAQPage saat card ditekan Navigator.of(context) .push(MaterialPageRoute(builder: (context) => FAQPage())); }, child: Column( children: [ // Card pertama Card( elevation: 3, // Tingkat elevasi card shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10.0), ), margin: EdgeInsets.only(left: 20, right: 20), child: Padding( padding: EdgeInsets.all(15.0), // Padding untuk konten card child: Row( children: [ // Gambar dari asset Container( width: 50.0, // Lebar gambar height: 50.0, // Tinggi gambar decoration: BoxDecoration( borderRadius: BorderRadius.circular(10.0), image: DecorationImage( image: AssetImage('assets/images/shusi.webp'), fit: BoxFit.cover, ), ), ), SizedBox( width: 40.0, ), Center( child: Text( 'Memiliki Pertanyaan Seputar \n Isi Piringku?', style: TextStyle(fontWeight: FontWeight.bold), textAlign: TextAlign.center, ), ), ], ), ), ), ], ), ), ) ], ), ); } }