Flutter app for Asset Management
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 

170 lignes
5.2 KiB

  1. import 'dart:async';
  2. import 'dart:convert';
  3. import 'dart:io';
  4. import 'dart:typed_data';
  5. import 'package:assetstock/util/prefsKey.dart';
  6. import 'package:flutter/cupertino.dart';
  7. import 'package:path_provider/path_provider.dart';
  8. import 'package:http/http.dart';
  9. import 'package:path/path.dart';
  10. import 'package:async/async.dart';
  11. import 'dart:io';
  12. import 'utils.dart';
  13. class file_Trans_Handler {
  14. // double _progress = 0;
  15. Util util = new Util();
  16. String _path = '';
  17. StreamSubscription dlulStream;
  18. String _error = '';
  19. String _success = '';
  20. bool _finish = false;
  21. get isFinish => _finish;
  22. get path => _path;
  23. get error => _error;
  24. get success => _success;
  25. StreamController _progress = new StreamController<double>();
  26. Stream<double> get progress =>_progress.stream;
  27. var client = new Client();
  28. var headers = {'device':'mobile'};
  29. downloadFile(String fileName,String link) async {
  30. StreamedResponse _response;
  31. List<int> _bytes = [];
  32. int _total = 0;
  33. print('Start Download');
  34. _progress.add(null);
  35. try {
  36. Request req = new Request('GET', Uri.parse(link));
  37. req.headers.addAll(headers);
  38. _response = await client.send(req).timeout(
  39. Duration(seconds: 20));
  40. // _response = await client.get('$link',headers: 'application/json')
  41. _total = _response.contentLength;
  42. print('${_total / 1024} KB');
  43. dlulStream = _response.stream.listen((value) {
  44. _bytes.addAll(value);
  45. _progress.add(((_bytes.length / _total)));
  46. })
  47. ..onDone(() async {
  48. _progress.add(0.0);
  49. print('Finish Download');
  50. final file = File(
  51. "${(await getExternalStorageDirectory()).path}/$fileName");
  52. await file.writeAsBytes(_bytes);
  53. _path = file.path;
  54. })
  55. ..onError((e) async {
  56. print('Error Download, $e');
  57. _progress.add(-1.0);
  58. _error = e.toString();
  59. });
  60. }
  61. catch(e){
  62. print('Error Download, $e');
  63. _progress.add(-1.0);
  64. _error = e.toString();
  65. }
  66. }
  67. uploadFile(String fileName,String link,String user,context) async{
  68. StreamedResponse _response;
  69. int _total;
  70. List<int> _bytes = [];
  71. _finish = false;
  72. final file = File(
  73. "${(await getExternalStorageDirectory()).path}/$fileName");
  74. _total = file.lengthSync();
  75. print(_total/1024);
  76. try{
  77. var request = MultipartRequest('POST', Uri.parse(link));
  78. request.headers.addAll(headers);
  79. request.files.add(await MultipartFile.fromPath('sqliteDb', file.path));
  80. request.fields[keyClass.user] = user;
  81. // _response = await client.send(request).timeout(Duration(seconds: 8));
  82. print(["sadasdasda",await util.checkinternet()]);
  83. if(await util.checkinternet()){
  84. util.showLoading(context,dissmissable: false,onwillpop: ()async{return false;});
  85. _response = await client.send(request);
  86. print("MASIH JALAN");
  87. if(_response.statusCode==200){
  88. _error = '';_success = '';
  89. dlulStream = _response.stream.listen((value) {
  90. _bytes.addAll(value);
  91. _progress.add((_bytes.length / _total));
  92. try{
  93. var result = jsonDecode(utf8.decode(value));
  94. if(result['STATUS']==0) {
  95. _error = result['DATA'];
  96. _finish = true;
  97. }
  98. else if(result['STATUS']==1){
  99. _error = '';
  100. _success = result['DATA'];
  101. _finish = true;
  102. }
  103. }catch(e){
  104. }
  105. })
  106. ..onDone(()async {
  107. Navigator.pop(context);
  108. client?.close();
  109. _finish = true;
  110. print("sdasdasdsd $_error");
  111. if(_error!=''){
  112. _progress.add(-1.0);
  113. print('Error Upload, $_error');
  114. }
  115. else{
  116. _progress.add(1.0);
  117. print('Finish Upload');
  118. print('done');
  119. }
  120. })
  121. ..onError((e){
  122. Navigator.pop(context);
  123. client?.close();
  124. print('Error Upload, $e');
  125. _progress.add(-1.0);
  126. _error = e.toString();
  127. });
  128. }
  129. else{
  130. Navigator.pop(context);
  131. client?.close();
  132. var resBody = await _response.stream.bytesToString();
  133. _progress.add(-1.0);
  134. _finish = true;
  135. _error = resBody;
  136. }
  137. }
  138. else{
  139. client?.close();
  140. _progress.add(-1.0);
  141. _finish = true;
  142. _error = "Check Internet Connection";
  143. }
  144. }
  145. // on TimeoutException{
  146. // client?.close();
  147. // print(['error timed out']);
  148. // Navigator.pop(context);
  149. // _progress.add(-1.0);
  150. // _finish = true;
  151. // _error = "Request timed out. Please check connection";
  152. // }
  153. catch(e){
  154. client?.close();
  155. print(['error',e]);
  156. _finish = true;
  157. _progress.add(-1.0);
  158. _error = e.toString();
  159. }
  160. }
  161. cancel()async{
  162. client?.close();
  163. await dlulStream?.cancel();
  164. _progress?.close();
  165. }
  166. }