m_net_image.dart 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import 'dart:io';
  2. import 'dart:typed_data';
  3. import 'package:f_cache/manager.dart';
  4. import 'package:http/http.dart' as http;
  5. import '../utils.dart';
  6. import '../pb.dart' as pb;
  7. class MNetImage{
  8. String url = '';
  9. Uint8List md5 = Uint8List(0);
  10. Uint8List? data;
  11. int? timestamp;
  12. var ext = '';
  13. Uint8List nonce = Uint8List(0);
  14. String? get md5Hex {
  15. if(md5.isEmpty){
  16. return null;
  17. }else{
  18. return md5.toHexString();
  19. }
  20. }
  21. Future<Reader> readerBuilder()async{
  22. final url = Uri.parse(this.url);
  23. var request = http.Request('GET', url);
  24. var response = await request.send();
  25. if (response.statusCode != 200) {
  26. throw HttpException('state: ${response.statusCode}', uri: url);
  27. }
  28. final length = response.contentLength ?? 0;
  29. return Reader(response.stream, length);
  30. }
  31. Future<void> preload()async{
  32. await CacheManager().getCached(id: md5Hex ?? '', readerBuilder: readerBuilder);
  33. }
  34. }
  35. extension PbNetImageExtension on pb.NetImage{
  36. MNetImage toModel(){
  37. return MNetImage()
  38. ..url = url
  39. ..md5 = Uint8List.fromList(md5);
  40. }
  41. }