Advertisement
Vassa007

Untitled

Dec 8th, 2023
910
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 16.17 KB | None | 0 0
  1. import 'dart:convert';
  2.  
  3. import 'package:flutter/material.dart';
  4. import 'package:flutter/services.dart';
  5. import 'package:flutter_screenutil/flutter_screenutil.dart';
  6. import 'package:font_awesome_flutter/font_awesome_flutter.dart';
  7. import 'package:google_fonts/google_fonts.dart';
  8. import 'package:mrsklinik/app/themes/app_color.dart';
  9. import 'package:mrsklinik/data/model/data_dummy.dart';
  10. import 'package:mrsklinik/presentation/dashboard/widgets/header_dashboard.dart';
  11. import 'package:mrsklinik/presentation/dashboard/widgets/navigation_rail_menu.dart';
  12. import 'package:mrsklinik/presentation/dashboard/widgets/welcome_box.dart';
  13.  
  14. class Dashboard extends StatefulWidget {
  15.   const Dashboard({super.key});
  16.  
  17.   @override
  18.   State<Dashboard> createState() => _DashboardState();
  19. }
  20.  
  21. class _DashboardState extends State<Dashboard> {
  22.   final _searchController = TextEditingController();
  23.   final ScrollController _controller = ScrollController();
  24.   final List<String> navMenu = [
  25.     'Home',
  26.     'Consultation',
  27.     'Medicine',
  28.     'Recipe',
  29.   ];
  30.   final List<IconData> navIcon = [
  31.     FontAwesomeIcons.houseMedical,
  32.     FontAwesomeIcons.userDoctor,
  33.     FontAwesomeIcons.prescriptionBottleMedical,
  34.     FontAwesomeIcons.pills,
  35.   ];
  36.   late int selectedIndex = 0;
  37.  
  38.   List<DataDummy> listData = [];
  39.   List<String> listDataDummy = [];
  40.  
  41.   void fetchData() async {
  42.     final String response = await rootBundle.loadString('assets/dummy.json');
  43.     final data = await json.decode(response);
  44.  
  45.     Map<String, dynamic> dummyMap = data;
  46.     List userMap = dummyMap['data'];
  47.  
  48.     await Future.delayed(const Duration(seconds: 1), () {
  49.       userMap.forEach((element) async {
  50.         listData.add(DataDummy(element['name'], element['photo'], element['time'],
  51.             element['date'], element['queue'], element['label']));
  52.       });
  53.     });
  54.   }
  55.  
  56.   @override
  57.   void initState() {
  58.     // TODO: implement initState
  59.     super.initState();
  60.     selectedIndex = 0;
  61.     fetchData();
  62.   }
  63.  
  64.   List<Widget> listNavigation = [
  65.     Container(
  66.         margin: const EdgeInsets.fromLTRB(0, 20, 0, 10),
  67.         child: Text(
  68.           "Page Consultation",
  69.           style: GoogleFonts.nunitoSans(
  70.               fontWeight: FontWeight.w800,
  71.               fontSize: 22.0,
  72.               color: AppColor.BackgroundDark),
  73.         )),
  74.     Container(
  75.         margin: const EdgeInsets.fromLTRB(0, 20, 0, 10),
  76.         child: Text(
  77.           "Page Medicine",
  78.           style: GoogleFonts.nunitoSans(
  79.               fontWeight: FontWeight.w800,
  80.               fontSize: 22.0,
  81.               color: AppColor.BackgroundDark),
  82.         )),
  83.     Container(
  84.         margin: const EdgeInsets.fromLTRB(0, 20, 0, 10),
  85.         child: Text(
  86.           "Page Recipe",
  87.           style: GoogleFonts.nunitoSans(
  88.               fontWeight: FontWeight.w800,
  89.               fontSize: 22.0,
  90.               color: AppColor.BackgroundDark),
  91.         )),
  92.   ];
  93.  
  94.   @override
  95.   void dispose() {
  96.     // TODO: implement dispose
  97.     super.dispose();
  98.     _searchController.dispose();
  99.     _controller.dispose();
  100.   }
  101.  
  102.   @override
  103.   Widget build(BuildContext context) {
  104.     return Scaffold(
  105.       extendBody: true,
  106.       body: SafeArea(
  107.         child: Column(
  108.           mainAxisSize: MainAxisSize.max,
  109.           children: [
  110.             Expanded(
  111.                 flex: 0,
  112.                 child: HeaderDashborad(
  113.                   hintText: 'Pencarian',
  114.                   controller: _searchController,
  115.                   icoton: IconButton(
  116.                     onPressed: () {},
  117.                     icon: const Icon(
  118.                       FontAwesomeIcons.search,
  119.                       color: Colors.grey,
  120.                     ),
  121.                   ),
  122.                   typeInput: TextInputType.text,
  123.                 )),
  124.             Expanded(
  125.                 flex: 1,
  126.                 child: Row(
  127.                   crossAxisAlignment: CrossAxisAlignment.start,
  128.                   mainAxisAlignment: MainAxisAlignment.start,
  129.                   children: [
  130.                     /// Navigationrail Menu
  131.                     NavigationRailMenu(
  132.                       navMenu: navMenu,
  133.                       navIcon: navIcon,
  134.                       selectedIndex: selectedIndex,
  135.                       selectedDestination: (i) {
  136.                         setState(() {
  137.                           selectedIndex = i;
  138.                         });
  139.                       },
  140.                     ),
  141.  
  142.                     Expanded(
  143.                         flex: 4,
  144.                         child:
  145.                         IndexedStack(
  146.                           index: selectedIndex,
  147.                           children: listNavigation,
  148.                         )
  149.                     ),
  150.  
  151.                     /// content
  152.                     if (selectedIndex == 0)
  153.                       ///Dashboard
  154.                       Expanded(
  155.                           flex: 4,
  156.                           child: SingleChildScrollView(
  157.                             scrollDirection: Axis.vertical,
  158.                             child: Column(
  159.                               crossAxisAlignment: CrossAxisAlignment.start,
  160.                               mainAxisAlignment: MainAxisAlignment.start,
  161.                               children: [
  162.                                 const WelcomeBox(
  163.                                   name: 'Olivia',
  164.                                 ),
  165.                                 Container(
  166.                                   margin:
  167.                                       const EdgeInsets.fromLTRB(20, 0, 40, 0),
  168.                                   width: ScreenUtil().screenWidth,
  169.                                   child: Row(
  170.                                     crossAxisAlignment:
  171.                                         CrossAxisAlignment.start,
  172.                                     mainAxisAlignment:
  173.                                         MainAxisAlignment.spaceBetween,
  174.                                     children: [
  175.                                       Container(
  176.                                           margin: const EdgeInsets.fromLTRB(
  177.                                               0, 20, 0, 10),
  178.                                           child: Text(
  179.                                             "List of Patient (${listData.length})",
  180.                                             style: GoogleFonts.nunitoSans(
  181.                                                 fontWeight: FontWeight.w800,
  182.                                                 fontSize: 22.0,
  183.                                                 color: AppColor.BackgroundDark),
  184.                                           )),
  185.                                       InkWell(
  186.                                         onTap: () {
  187.                                           setState(() {
  188.                                             selectedIndex = 1;
  189.                                           });
  190.                                         },
  191.                                         child: Container(
  192.                                             margin: const EdgeInsets.fromLTRB(
  193.                                                 20, 20, 0, 10),
  194.                                             child: Text(
  195.                                               "See all",
  196.                                               style: GoogleFonts.nunitoSans(
  197.                                                   fontSize: 20.0,
  198.                                                   color: AppColor.Blue),
  199.                                             )),
  200.                                       ),
  201.                                     ],
  202.                                   ),
  203.                                 ),
  204.                                 Container(
  205.                                   margin:
  206.                                       const EdgeInsets.fromLTRB(20, 0, 40, 0),
  207.                                   child: ListView.builder(
  208.                                       shrinkWrap: true,
  209.                                       controller: _controller,
  210.                                       itemCount: listData.length,
  211.                                       itemBuilder: (context, index) {
  212.                                         return InkWell(
  213.                                           onTap: () {
  214.                                             print(
  215.                                                 "selected ${listData[index].name}");
  216.                                           },
  217.                                           child: Row(
  218.                                             crossAxisAlignment:
  219.                                             CrossAxisAlignment.center,
  220.                                             mainAxisAlignment:
  221.                                             MainAxisAlignment.spaceBetween,
  222.                                             children: [
  223.                                               Container(
  224.                                                 width: 65,
  225.                                                 height: 65,
  226.                                                 margin:
  227.                                                 const EdgeInsets.all(10),
  228.                                                 decoration: BoxDecoration(
  229.                                                     shape: BoxShape.circle,
  230.                                                     image: DecorationImage(
  231.                                                         image: NetworkImage(
  232.                                                             listData[index]
  233.                                                                 .photo),
  234.                                                         fit: BoxFit.cover),
  235.                                                     border: Border.all(
  236.                                                         width: 0,
  237.                                                         color: Colors.black38)),
  238.                                               ),
  239.                                               Text(
  240.                                                 listData[index].name,
  241.                                                 style: GoogleFonts.nunitoSans(
  242.                                                     fontWeight: FontWeight.w800,
  243.                                                     fontSize: 18.0,
  244.                                                     color: AppColor
  245.                                                         .BackgroundDark),
  246.                                               ),
  247.                                               Text(
  248.                                                 listData[index].time,
  249.                                                 style: GoogleFonts.nunitoSans(
  250.                                                     fontWeight: FontWeight.w800,
  251.                                                     fontSize: 18.0,
  252.                                                     color: AppColor.Gray400),
  253.                                                 textAlign: TextAlign.start,
  254.                                               ),
  255.                                               Text(
  256.                                                 listData[index].date,
  257.                                                 style: GoogleFonts.nunitoSans(
  258.                                                     fontWeight: FontWeight.w800,
  259.                                                     fontSize: 18.0,
  260.                                                     color: AppColor.Gray400),
  261.                                                 textAlign: TextAlign.start,
  262.                                               ),
  263.                                               Text(
  264.                                                 listData[index].queue,
  265.                                                 style: GoogleFonts.nunitoSans(
  266.                                                     fontWeight: FontWeight.w800,
  267.                                                     fontSize: 18.0,
  268.                                                     color: AppColor
  269.                                                         .BackgroundDark),
  270.                                                 textAlign: TextAlign.start,
  271.                                               ),
  272.                                               Text(
  273.                                                 listData[index].label,
  274.                                                 style: GoogleFonts.nunitoSans(
  275.                                                     fontWeight: FontWeight.w800,
  276.                                                     fontSize: 18.0,
  277.                                                     color: AppColor.Gray400),
  278.                                                 textAlign: TextAlign.start,
  279.                                               ),
  280.                                               Container(
  281.                                                 width: 50.w,
  282.                                                 height: 50.h,
  283.                                                 decoration: BoxDecoration(
  284.                                                     shape: BoxShape.circle,
  285.                                                     color:
  286.                                                     AppColor.GreenCircle),
  287.                                                 child: Icon(
  288.                                                   FontAwesomeIcons.stethoscope,
  289.                                                   color:
  290.                                                   AppColor.BackgroundLight,
  291.                                                   size: 28,
  292.                                                 ),
  293.                                               )
  294.                                             ],
  295.                                           ),
  296.                                         );
  297.                                       }),
  298.                                 )
  299.                               ],
  300.                             ),
  301.                           )),
  302.                     if (selectedIndex == 1)
  303.                       /// Page 2
  304.                       Expanded(
  305.                           flex: 4,
  306.                           child: Center(
  307.                             child: Container(
  308.                                 margin: const EdgeInsets.fromLTRB(0, 20, 0, 10),
  309.                                 child: Text(
  310.                                   "Page ${selectedIndex+1}",
  311.                                   style: GoogleFonts.nunitoSans(
  312.                                       fontWeight: FontWeight.w800,
  313.                                       fontSize: 22.0,
  314.                                       color: AppColor.BackgroundDark),
  315.                                 )),
  316.                           )),
  317.                     if (selectedIndex == 2)
  318.                       /// Page 3
  319.                       Expanded(
  320.                           flex: 4,
  321.                           child: Center(
  322.                             child: Container(
  323.                                 margin: const EdgeInsets.fromLTRB(0, 20, 0, 10),
  324.                                 child: Text(
  325.                                   "Page ${selectedIndex + 1}",
  326.                                   style: GoogleFonts.nunitoSans(
  327.                                       fontWeight: FontWeight.w800,
  328.                                       fontSize: 22.0,
  329.                                       color: AppColor.BackgroundDark),
  330.                                 )),
  331.                           )),
  332.                     if (selectedIndex == 3)
  333.                       /// Page 4
  334.                       Expanded(
  335.                           flex: 4,
  336.                           child: Center(
  337.                             child: Container(
  338.                                 margin: const EdgeInsets.fromLTRB(0, 20, 0, 10),
  339.                                 child: Text(
  340.                                   "Page ${selectedIndex + 1}",
  341.                                   style: GoogleFonts.nunitoSans(
  342.                                       fontWeight: FontWeight.w800,
  343.                                       fontSize: 22.0,
  344.                                       color: AppColor.BackgroundDark),
  345.                                 )),
  346.                           )),
  347.                   ],
  348.                 ))
  349.           ],
  350.         ),
  351.       ),
  352.     );
  353.   }
  354. }
  355.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement