Files
DMZJ_F/lib/widgets/local_image.dart
2026-03-07 17:24:59 +08:00

70 lines
1.6 KiB
Dart

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class LocalImage extends StatelessWidget {
final String path;
final double? width;
final double? height;
final BoxFit? fit;
final double borderRadius;
final bool progress;
const LocalImage(this.path,
{this.width,
this.height,
this.fit = BoxFit.cover,
this.borderRadius = 0,
this.progress = false,
Key? key})
: super(key: key);
@override
Widget build(BuildContext context) {
if (path.isEmpty) {
return Container(
decoration: BoxDecoration(
color: Colors.grey.withOpacity(.1),
),
child: const Icon(
Icons.image,
color: Colors.grey,
size: 24,
),
);
}
return ClipRRect(
borderRadius: BorderRadius.circular(borderRadius),
child: FutureBuilder(
future: File(path).readAsBytes(),
builder: (_, snap) {
if (snap.hasError) {
return Container(
decoration: BoxDecoration(
color: Colors.grey.withOpacity(.1),
),
child: const Icon(
Icons.broken_image,
color: Colors.grey,
size: 24,
),
);
}
if (!snap.hasData) {
return const Center(
child: CircularProgressIndicator(),
);
}
return Image.memory(
snap.data as Uint8List,
fit: fit,
height: height,
width: width,
);
},
),
);
}
}