import 'dart:convert'; import 'package:flutter/material.dart'; import '../mih_components/mih_layout/mih_window.dart'; import '../mih_packages/patient_profile/builder/build_med_list.dart'; import '../mih_components/mih_pop_up_messages/mih_loading_circle.dart'; import '../mih_components/mih_pop_up_messages/mih_error_message.dart'; import '../mih_env/env.dart'; import '../mih_objects/medicine.dart'; import 'package:supertokens_flutter/http.dart' as http; class MedicineSearch extends StatefulWidget { final TextEditingController searchVlaue; const MedicineSearch({ super.key, required this.searchVlaue, }); @override State createState() => _MedicineSearchState(); } class _MedicineSearchState extends State { final String endpointMeds = "${AppEnviroment.baseApiUrl}/users/medicine/"; //TextEditingController searchController = TextEditingController(); late Future> futueMeds; //String searchString = ""; Future> getMedList(String endpoint) async { final response = await http.get(Uri.parse(endpoint)); if (response.statusCode == 200) { Iterable l = jsonDecode(response.body); List medicines = List.from(l.map((model) => Medicine.fromJson(model))); // List meds = []; // medicines.forEach((element) => meds.add(element.name)); return medicines; } else { internetConnectionPopUp(); throw Exception('failed to load medicine'); } } void internetConnectionPopUp() { showDialog( context: context, builder: (context) { return const MIHErrorMessage(errorType: "Internet Connection"); }, ); } @override void dispose() { super.dispose(); } @override void initState() { futueMeds = getMedList(endpointMeds + widget.searchVlaue.text); super.initState(); } @override Widget build(BuildContext context) { return MIHWindow( fullscreen: false, windowTitle: "Select Medicine", windowTools: [], onWindowTapClose: () { Navigator.pop(context); }, windowBody: [ FutureBuilder( future: futueMeds, builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const SizedBox( height: 400, child: Mihloadingcircle(), ); } else if (snapshot.hasData && snapshot.data!.isNotEmpty) { final medsList = snapshot.data!; return SizedBox( height: 400, child: BuildMedicinesList( contoller: widget.searchVlaue, medicines: medsList, //searchString: searchString, ), ); } else { return const SizedBox( height: 400, child: Center( child: Text( "No Match Found\nPlease close and manually capture medicine", style: TextStyle(fontSize: 25, color: Colors.grey), textAlign: TextAlign.center, ), ), ); } }, ), ], ); // return Dialog( // child: Stack( // children: [ // Container( // padding: const EdgeInsets.all(10.0), // width: 700.0, // //height: 475.0, // decoration: BoxDecoration( // color: MzanziInnovationHub.of(context)!.theme.primaryColor(), // borderRadius: BorderRadius.circular(25.0), // border: Border.all( // color: // MzanziInnovationHub.of(context)!.theme.secondaryColor(), // width: 5.0), // ), // child: SingleChildScrollView( // padding: const EdgeInsets.symmetric(horizontal: 10), // child: Column( // crossAxisAlignment: CrossAxisAlignment.center, // mainAxisAlignment: MainAxisAlignment.center, // mainAxisSize: MainAxisSize.min, // children: [ // Text( // "Select Medicine", // textAlign: TextAlign.center, // style: TextStyle( // color: MzanziInnovationHub.of(context)! // .theme // .secondaryColor(), // fontSize: 35.0, // fontWeight: FontWeight.bold, // ), // ), // const SizedBox(height: 25.0), // FutureBuilder( // future: futueMeds, // builder: (context, snapshot) { // if (snapshot.connectionState == ConnectionState.waiting) { // return const SizedBox( // height: 400, // child: Mihloadingcircle(), // ); // } else if (snapshot.hasData && // snapshot.data!.isNotEmpty) { // final medsList = snapshot.data!; // return SizedBox( // height: 400, // child: BuildMedicinesList( // contoller: widget.searchVlaue, // medicines: medsList, // //searchString: searchString, // ), // ); // } else { // return const SizedBox( // height: 400, // child: Center( // child: Text( // "No Match Found\nPlease close and manually capture medicine", // style: // TextStyle(fontSize: 25, color: Colors.grey), // textAlign: TextAlign.center, // ), // ), // ); // } // }, // ), // ], // ), // ), // ), // Positioned( // top: 5, // right: 5, // width: 50, // height: 50, // child: IconButton( // onPressed: () { // Navigator.pop(context); // }, // icon: const Icon( // Icons.close, // color: Colors.red, // size: 35, // ), // ), // ), // ], // ), // ); } }