app_net_image.dart 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import 'dart:typed_data';
  2. import 'package:flutter/material.dart';
  3. import 'package:get/get.dart';
  4. import 'package:trackoffical_app/service/image.dart';
  5. import 'image_loading.dart';
  6. import '../model/m_net_image.dart';
  7. class AppNetImage extends StatelessWidget{
  8. final MNetImage netImage;
  9. final memory = Uint8List(0).obs;
  10. final progress = 0.0.obs;
  11. final BoxFit? fit;
  12. final VoidCallback? onWidgetOk;
  13. AppNetImage({
  14. super.key,
  15. required this.netImage,
  16. this.fit,
  17. this.onWidgetOk
  18. }){
  19. netImage.loadMemory(
  20. onReceiveProgress: (c, a){
  21. if(a > 0){
  22. progress.value = c.toDouble() / a;
  23. }
  24. }
  25. ).then((value) {
  26. if(value.isNotEmpty){
  27. memory.value = value;
  28. }
  29. });
  30. }
  31. @override
  32. Widget build(BuildContext context) {
  33. return Obx((){
  34. if (memory.value.isEmpty){
  35. return ImageLoading(value: progress.value);
  36. }else{
  37. return _Image(memory.value, fit, onWidgetOk);
  38. // return Image.memory(memory.value, fit: fit);
  39. }
  40. });
  41. }
  42. }
  43. class _Image extends StatelessWidget{
  44. const _Image(this.memory, this.fit, this.onWidgetOk);
  45. final BoxFit? fit;
  46. final VoidCallback? onWidgetOk;
  47. final Uint8List memory;
  48. @override
  49. Widget build(BuildContext context) {
  50. final onWidgetOk = this.onWidgetOk;
  51. if(onWidgetOk!= null){
  52. WidgetsBinding.instance.addPostFrameCallback((mag) {
  53. onWidgetOk();
  54. });
  55. }
  56. onWidgetOk?.call();
  57. return Image.memory(memory, fit: fit);
  58. }
  59. }