// ignore_for_file: unused_local_variable import 'dart:isolate'; import 'dart:ui'; import 'package:cssd/config/colors.dart'; import 'package:cssd/providers/items.dart'; import 'package:cssd/widgets/ItemScreens/Filter/item_filter_object.dart'; import 'package:cssd/widgets/ItemScreens/Result/item_data_box.dart'; import 'package:flutter_downloader/flutter_downloader.dart'; import 'package:permission_handler/permission_handler.dart'; import '../../config/routes.dart'; import '../../providers/connectivity.dart'; import '../../widgets/CycleScreens/Result/banner.dart'; import '../../widgets/CycleScreens/Result/search_box.dart'; import '../../widgets/Global/internet_error.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class ItemResultScreen extends StatefulWidget { final bool? isAdmin; ItemResultScreen({this.isAdmin}); @override _ItemResultScreenState createState() => _ItemResultScreenState(); } class _ItemResultScreenState extends State { bool _isInit = true; ScrollController? sc; TextEditingController searchCTRL = new TextEditingController(); ReceivePort _port = ReceivePort(); @override void initState() { sc = new ScrollController(); super.initState(); IsolateNameServer.registerPortWithName(_port.sendPort, 'downloader_send_port'); _port.listen((dynamic data) { String id = data[0]; DownloadTaskStatus status = data[1]; int progress = data[2]; if (status == DownloadTaskStatus.complete) { print('Downloaded'); } setState((){ }); }); FlutterDownloader.registerCallback(downloadCallback); } @pragma('vm:entry-point') static void downloadCallback(String id, int status, int progress) { final SendPort? send = IsolateNameServer.lookupPortByName('downloader_send_port'); send!.send([id, status, progress]); } @override void didChangeDependencies() { if (_isInit) { var testResults = Provider.of(context); testResults.setLoading(); testResults.resetPageNumber(); testResults.getItemResults().then((_) { testResults.resetLoading(); sc!.addListener( () { if (sc!.position.pixels == sc!.position.maxScrollExtent && searchCTRL.text == '') { var testResults = Provider.of( context, listen: false, ); testResults.getItemResults(); } }, ); }); } _isInit = false; super.didChangeDependencies(); } @override void dispose() { IsolateNameServer.removePortNameMapping('downloader_send_port'); super.dispose(); } @override Widget build(BuildContext context) { final _media = MediaQuery.of(context); final double _deviceWidth = _media.size.width; final double _deviceBlockSize = _deviceWidth / 100; return SafeArea( child: GestureDetector( onTap: () { FocusManager.instance.primaryFocus?.unfocus(); }, child: Scaffold( floatingActionButton: ItemResultFloatingButton( deviceBlockSize: _deviceBlockSize, ), appBar: AppBar( titleSpacing: -10, title: Text('Home', style: TextStyle(color: Colors.white,),), backgroundColor: Colors.black, leading: IconButton( icon: Icon( Icons.keyboard_arrow_left, color: Colors.white, size: 35, ), onPressed: () => Navigator.of(context).pop(), ), ), body: Consumer( builder: (ct, connection, _) { return connection.conStatus != 'offline' ? Padding( padding: EdgeInsets.only( top: 20, right: 20, bottom: 60, left: 20, ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ ResultBanner( deviceBlockSize: _deviceBlockSize, text: 'Items', push: Routes.itemFilterScreen, ), Consumer( builder: (ctx, item, _) { return Container( height: 50, child: ListView( scrollDirection: Axis.horizontal, shrinkWrap: true, children: [ item.filters!.id != '' ? ItemFilterChip( deviceBlockSize: _deviceBlockSize, label: 'ID', id: '', name: item.filters!.name, udi: item.filters!.udi, hospital: item.filters!.hospital, size: item.filters!.size, specific: item.filters!.specific, ) : Container(), item.filters!.name != '' ? ItemFilterChip( deviceBlockSize: _deviceBlockSize, label: 'Item Name', id: item.filters!.id, name: '', udi: item.filters!.udi, hospital: item.filters!.hospital, size: item.filters!.size, specific: item.filters!.specific, ) : Container(), item.filters!.udi != '' ? ItemFilterChip( deviceBlockSize: _deviceBlockSize, label: 'UDI', id: item.filters!.id, name: item.filters!.name, udi: '', hospital: item.filters!.hospital, size: item.filters!.size, specific: item.filters!.specific, ) : Container(), item.filters!.hospital != '' ? ItemFilterChip( deviceBlockSize: _deviceBlockSize, label: 'Hospital', id: item.filters!.id, name: item.filters!.name, hospital: '', udi: item.filters!.udi, size: item.filters!.size, specific: item.filters!.specific, ) : Container(), item.filters!.size != '' ? ItemFilterChip( deviceBlockSize: _deviceBlockSize, label: 'Size', id: item.filters!.id, name: item.filters!.name, udi: item.filters!.udi, hospital: item.filters!.hospital, size: '', specific: item.filters!.specific, ) : Container(), item.filters!.specific != '' ? ItemFilterChip( deviceBlockSize: _deviceBlockSize, label: 'Specific', id: item.filters!.id, name: item.filters!.name, udi: item.filters!.udi, hospital: item.filters!.hospital, size: item.filters!.size, specific: '', ) : Container(), ], ), ); }, ), ResultSearchBox( searchCTRL: searchCTRL, text: 'item', deviceBlockSize: _deviceBlockSize, textInputType: TextInputType.visiblePassword, text2: "Udi", onChanged: (value) { Provider.of(context, listen: false) .search(value); }, ), SizedBox( height: 20, ), Expanded( child: Consumer( builder: (context, itemResults, _) { return itemResults.isloading ? Center( child: CircularProgressIndicator( color: Colors.black, ), ) : ListView.builder( controller: sc, itemBuilder: (context, index) { // remove extra , return ItemItemBox( deviceBlockSize: _deviceBlockSize, item: itemResults.items?[index], ); }, itemCount: itemResults.items?.length, shrinkWrap: true, ); }, ), ), ], ), ) : ConnectionErrorBox(); }, ), ), ), ); } } class ItemResultFloatingButton extends StatelessWidget { const ItemResultFloatingButton({ Key? key, required double deviceBlockSize, }) : _deviceBlockSize = deviceBlockSize, super(key: key); final double _deviceBlockSize; @override Widget build(BuildContext context) { return Row( mainAxisAlignment: MainAxisAlignment.end, children: [ InkWell( customBorder: CircleBorder(), onTap: () async { var status = await Permission.storage.request(); if (status.isGranted) { Provider.of(context, listen: false).exportItems(); } }, child: Container( padding: EdgeInsets.all(_deviceBlockSize), decoration: BoxDecoration( shape: BoxShape.circle, color: Colors.black, ), child: Icon( Icons.import_export, size: 10 * _deviceBlockSize, color: Colors.white, ), ), ), SizedBox( width: 2 * _deviceBlockSize, ), InkWell( customBorder: CircleBorder(), onTap: () { Navigator.of(context).pushNamed(Routes.itemScanScreen); }, child: Container( padding: EdgeInsets.all(2.5 * _deviceBlockSize), decoration: BoxDecoration( shape: BoxShape.circle, color: Colors.black, ), child: Icon( Icons.qr_code_scanner, size: 7.1 * _deviceBlockSize, color: Colors.white, ), ), ), SizedBox( width: 2 * _deviceBlockSize, ), InkWell( customBorder: CircleBorder(), onTap: () { Navigator.of(context).pushReplacementNamed(Routes.itemAddScreen); }, child: Container( padding: EdgeInsets.all(_deviceBlockSize), decoration: BoxDecoration( shape: BoxShape.circle, color: kBlue, ), child: Icon( Icons.add, size: 10 * _deviceBlockSize, color: Colors.white, ), ), ), ], ); } }