import 'dart:async'; import 'dart:typed_data'; import 'package:flutter/services.dart'; import 'main.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:unitstocks/unit_details.dart'; import 'Util/DBHelper.dart'; import 'Util/UnitModel.dart'; import 'Util/Util.dart'; import 'Util/photo_viewer.dart'; import 'package:barcode_scan2/barcode_scan2.dart'; class Stocking extends StatefulWidget { Stocking({Key key}) : super(key: key); @override _StockingState createState() => _StockingState(); } class _StockingState extends State with SingleTickerProviderStateMixin { List unitsRef = []; List Blobs = []; List BlobsRef = []; bool completed = false; Util util = new Util(); int totalUnit = 0; final search_controller = new TextEditingController(); bool hideAppbar = false; String search = ''; loadUnit()async{ print('loading units'); Blobs.clear(); BlobsRef.clear(); await DBHelper.database.closeDb(); // Units = (search=='')?await DBHelper.database.getAllInsertUnits():await DBHelper.database.searchAllInsertUnits(search.toUpperCase()); unitsRef = (search=='')?await DBHelper.database.getAllUnits(inserted: completed):await DBHelper.database.searchAllUnits(search.toUpperCase(),inserted: completed); // totalUnit = await DBHelper.database.getCount(); // for (int i = 0;i _timeouts = {}; void debounce(Duration timeout, Function target, [List arguments = const []]) { if (_timeouts.containsKey(target)) { _timeouts[target].cancel(); } Timer timer = Timer(timeout, () { Function.apply(target, arguments); }); _timeouts[target] = timer; } void _onChanged(String val)async { search = search_controller.text; await loadUnit(); } Future scan() async { try { search = ''; setState(() => search_controller.text = search); ScanResult result = await BarcodeScanner.scan(); String barcode = result.rawContent; setState(() => this.search = barcode); } on PlatformException catch (e) { if (e.code == BarcodeScanner.cameraAccessDenied) { util.showFlushbar(context, 'The user did not grant the camera permission!',color: Colors.red); setState(() { this.search = ''; }); } else { util.showFlushbar(context, 'Unknown error: $e',color: Colors.red); setState(() => this.search = ''); } } on FormatException { setState(() => this.search = ''); } catch (e) { util.showFlushbar(context, 'Unknown error: $e',color: Colors.red); setState(() => this.search = ''); } setState(() => search_controller.text = search); } @override void initState() { // TODO: implement initState super.initState(); // _tabBarcontroller = new TabController(length: 1, vsync:this); WidgetsBinding.instance.addPostFrameCallback((_) async { util.showLoading(context); await Future.sync(()async{await loadUnit();}); Navigator.pop(context); if(locationStream==null)await util.streamLocation(context); else { if(locationStream.isPaused) locationStream.resume(); } // setState(() { // unitsRef.add(new Unit(flag: 'False',tipe: "sdasdas",id: 2,mesin: "sdfasdas",kode: "dasdas",rangka: "asdasd",tahun: "2020",warna: "MERAH",state: "OnChanne;")); // unitsRef.add(new Unit(flag: 'False',tipe: "sdasdas",id: 2,mesin: "sdfasdas",kode: "dasdas",rangka: "asdasd",tahun: "2020",warna: "MERAH",state: "OnChanne;")); // unitsRef.add(new Unit(flag: 'False',tipe: "sdasdas",id: 2,mesin: "sdfasdas",kode: "dasdas",rangka: "asdasd",tahun: "2020",warna: "MERAH",state: "OnChanne;")); // unitsRef.add(new Unit(flag: 'False',tipe: "sdasdas",id: 2,mesin: "sdfasdas",kode: "dasdas",rangka: "asdasd",tahun: "2020",warna: "MERAH",state: "OnChanne;")); // unitsRef.add(new Unit(flag: 'False',tipe: "sdasdas",id: 2,mesin: "sdfasdas",kode: "dasdas",rangka: "asdasd",tahun: "2020",warna: "MERAH",state: "OnChanne;")); // }); }); } @override void dispose() { // TODO: implement dispose super.dispose(); print('LocationStream paused'); if(!locationStream.isPaused)locationStream.pause(); } @override Widget build(BuildContext context) { return WillPopScope( onWillPop: ()async{ if(hideAppbar) { setState(() { hideAppbar=false; search = ''; search_controller.text = ''; }); await loadUnit(); return false; } else { return true; } }, child: Scaffold( appBar: (hideAppbar)? AppBar( backgroundColor: Colors.white, leading: GestureDetector( onTap:()async{ setState(() { hideAppbar=false; search = ''; search_controller.text = ''; }); await loadUnit(); },child: Container(width: 20,child: Icon(Icons.arrow_back,color:Colors.grey))), title: Container( color: Colors.white, child: TextFormField( maxLines: 1, controller: search_controller, onChanged: (val) => debounce(const Duration(milliseconds: 300), _onChanged, [val]), // onChanged: (value)async{ // search = search_controller.text; // await loadUnit(); // }, decoration: InputDecoration.collapsed( hintText: 'Search..', ), ), ), actions: [ TextButton( onPressed: ()async{await scan();await loadUnit();}, child: Icon(Icons.select_all,color:Colors.grey), ) ], ) :null, // AppBar( // backgroundColor: Colors.indigo.withOpacity(0.8), // title: Text('Unit Stocking'), // actions: [ // IconButton( // icon: Icon(Icons.search,color:Colors.white), // onPressed: (){ // setState(() { // hideAppbar = true; // }); // }, // ), // ], // ), body: Column( children: [ (hideAppbar)?Container():SizedBox(height: MediaQuery.of(context).size.height/25,), Expanded( child:Stack( children: [ Container( child: ListView.builder( padding: EdgeInsets.only(bottom: 10), itemCount: unitsRef.length, shrinkWrap: false, itemBuilder: (context,index){ Uint8List display; display = unitsRef[index].flag=='FALSE'?null:(BlobsRef.length==unitsRef.length)?BlobsRef[index].blob_file:null; return Column( children: [ (index==0)?Container(padding: EdgeInsets.only(top: 10,left: 10,right: 10),alignment: Alignment.centerRight, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( children: [ Checkbox( value: completed, onChanged: (value)async{ setState(() { completed = value; }); await loadUnit(); }, ), Text('Completed') ], ), (completed||hideAppbar)?Container():Row( mainAxisAlignment: MainAxisAlignment.end, children: [ Text('Unit : ',style: TextStyle(color: Colors.grey,fontSize: 15),), Text('${(unitsRef.where((element) => element.flag=='TRUE').length==unitsRef.length)?'Done':'${unitsRef.length-unitsRef.where((element) => element.flag=='TRUE').length}'}',style: TextStyle(color: (unitsRef.length==unitsRef.where((element) => element.flag=='TRUE').length)?Colors.green:Colors.black,fontWeight: FontWeight.bold,fontSize: 16),), Text(!(unitsRef.length==unitsRef.where((element) => element.flag=='TRUE').length)?' of':'',style: TextStyle(color: Colors.grey,fontSize: 15),), Text(!(unitsRef.length==unitsRef.where((element) => element.flag=='TRUE').length)?' ${unitsRef.length}':'',style: TextStyle(color: Colors.black,fontSize: 16,fontWeight: FontWeight.bold,),), ], ), ], ),):Container(), Padding( padding: const EdgeInsets.only(left:10,right: 10,top: 10), child: Container( padding: EdgeInsets.all(5.0), decoration: BoxDecoration( borderRadius: BorderRadius.circular(5), color: Colors.white, boxShadow: [ BoxShadow( color: Colors.grey, blurRadius: 5.0, // has the effect of softening the shadow spreadRadius: 2.0, // has the effect of extending the shadow offset: Offset( 00.0, // horizontal, move right 10 2.0, // vertical, move down 10 ), ) ], border: Border.all(color: Colors.grey.withOpacity(0.5)), ), child:Row( children: [ Expanded( flex: 3, child: InkWell( onTap: ()async{ // if(display!=null)Navigator.push(context, MaterialPageRoute(builder: (context) => PhotoViewer(Blobs[index].blob_file,id: Blobs[index].blob_id.toString(),edit: false,jenis: Blobs[index].jenis,))); if(display==null){ var result = await Navigator.push( context, MaterialPageRoute( builder: (context) => UnitDetails(unit: unitsRef[index],), ), ); if(result!=null){ util.showLoading(context); await loadUnit(); Navigator.pop(context); } } else{ await Navigator.push(context, MaterialPageRoute(builder: (context) => PhotoViewer(display,id: unitsRef[index].id.toString(),jenis: '',edit: false,))); } }, child: Hero(tag: unitsRef[index].id,child: Padding( padding: EdgeInsets.only(right: 10), child: Container(width: 100,height: 100,alignment: Alignment.center,child:(display==null)?Icon(Icons.crop_original,color: Colors.white,size: 80,):null, decoration: BoxDecoration( color: Colors.grey.withOpacity(0.5), image: (display!=null)?DecorationImage( image: MemoryImage(display),fit: BoxFit.cover,):null,)), )), )), Expanded( flex: 7, child: InkWell( onTap: ()async{ var result; // if(display!=null) { // result = await Navigator.push( // context, // MaterialPageRoute( // builder: (context) => UnitDetails(idInsert: unitsRef[index].mesin_id,), // ), // ); // } // if(display==null){ result = await Navigator.push( context, MaterialPageRoute( builder: (context) => UnitDetails(unit: unitsRef[index],), ), ); // } if(result!=null){ util.showLoading(context); await loadUnit(); Navigator.pop(context); } }, child: SingleChildScrollView( scrollDirection: Axis.horizontal, child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text('Rangka : ${unitsRef[index].rangka}'), Divider(height: 10,), Text('Tipe : ${unitsRef[index].tipe}'), Divider(height: 10,), Row( children: [ // Container(width: MediaQuery.of(context).size.width*0.35,child: Text('State : ${unitsRef[index].state}')), // Container(width: MediaQuery.of(context).size.width*0.5,child: Text('Tipe : ${unitsRef[index].tipe}',style: TextStyle(fontSize: 12),)), Text('Timestamp : ${unitsRef[index].timestamp}'), ], ), Divider(height: 10,), Row( children: [ Container(width: MediaQuery.of(context).size.width*0.35,child: Text('Warna : ${unitsRef[index].warna}')), Text('State : ${unitsRef[index].state}'), ], ) ], ), ), )), ], )), ), ], ); }, ), ), ], ), ), ], ), floatingActionButton: FloatingActionButton( backgroundColor: Colors.indigo.withOpacity(0.8), onPressed: ()async{ setState(() { hideAppbar = !(hideAppbar??false); }); // var result = await Navigator.push(context, MaterialPageRoute(builder: (context)=>UnitDetails(unit: new Unit(flag: 'FALSE'),))); // if(result!=null){ // util.showLoading(context); // await loadUnit(); // Navigator.pop(context); // } }, child: Icon(Icons.search,color:Colors.white), ), ), ); } }