Flutter app for Asset Management
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

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