| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import 'dart:io';
- import 'package:f_cache/f_cache.dart';
- import 'package:flutter/material.dart';
- import '../logger.dart';
- import 'image_loading.dart';
- import '../model/m_net_image.dart';
- import 'package:http/http.dart' as http;
- class AppNetImage extends StatefulWidget{
- const AppNetImage({
- super.key,
- required this.netImage,
- this.fit,
- this.onWidgetOk, this.width, this.height
- });
- final MNetImage netImage;
- final BoxFit? fit;
- final VoidCallback? onWidgetOk;
- final double? width;
- final double? height;
- @override
- State<StatefulWidget> createState() {
- return _AppNetImageState();
- }
- }
- CachedReaderImage cachedProvider(MNetImage image){
- return CachedReaderImage(image.md5Hex ?? '', image.readerBuilder);
- }
- class _AppNetImageState extends State<AppNetImage>{
- late CachedReaderImage provider;
- @override
- void initState() {
- super.initState();
- final image = widget.netImage;
- provider = cachedProvider(image);
- }
- @override
- void didUpdateWidget(covariant AppNetImage oldWidget) {
- super.didUpdateWidget(oldWidget);
- final image = widget.netImage;
- provider = cachedProvider(image);
- }
- @override
- Widget build(BuildContext context) {
- return Image(
- image: provider,
- loadingBuilder: (
- BuildContext context,
- Widget child,
- ImageChunkEvent? loadingProgress){
- if(loadingProgress!= null){
- var p = 0.0;
- final all = loadingProgress.expectedTotalBytes?? 0;
- if(all > 0){
- p = loadingProgress.cumulativeBytesLoaded.toDouble() / all.toDouble();
- }
- return ImageLoading(value: p);
- }else{
- return child;
- }
- },
- errorBuilder: (ctx, e, trace){
- warn('图片加载失败: ${widget.netImage.url} md5: ${widget.netImage.md5Hex}', e);
- return Container(color: Colors.white, child:const Center(child: Icon(Icons.broken_image_outlined)));
- },
- width: widget.width,
- height: widget.height,
- fit: widget.fit,
- );
- }
- }
|