我正在用顫振構建一個網路應用程式,我想要一個更改個人資料圖片的選項。要從圖庫中選擇影像,我使用image_picker_web 2.1.1包。
class ImagePickerService {
late Image? img = Image.asset('whatever'); //has to be initialised
Future<void> pickImage() async {
img = await ImagePickerWeb.getImageAsWidget();
}
}
我沒有將型別設定pickImage()為 Future<Image?> 因為我必須從 Future 轉換。這個資產('whatever')雖然不是很優雅,但不會引起任何問題,因為在_fileLoaded選擇影像時將之前設定為true,我將用戶名的首字母顯示為頭像。沒有它,我得到一個沒有初始化的錯誤。
設定頁面類的相關片段:
late Image? avatar;
bool _fileLoaded = false;
final ImagePickerService _ips = ImagePickerService();
Center(
child: displayAvatar(),
),
TextButton.icon(
onPressed: () {
setState(() {
_ips.pickImage();
avatar = _ips.img;
_fileLoaded = true;
});
},
icon: const Icon(Icons.edit),
label: const Text('Change avatar'),
),
Widget displayAvatar() {
if (_fileLoaded) {
return CircleAvatar(
backgroundImage: avatar as ImageProvider, radius: 50.0);
} else...
我搜索了類似的問題,但除了添加之外沒有找到任何答案as ImageProvider,在我的情況下,它會從 IDE 中洗掉錯誤并讓我運行專案,但是當我按下按鈕更改頭像時,錯誤稍后會出現在紅色螢屏上,即使型別應該是正確的。請問,你知道有什么解決辦法嗎?
uj5u.com熱心網友回復:
ImageProvider 是一個抽象類。實作 ImageProvider 的類有 AssetImage("")、NetworkImage("URL")、FileImage() 等。我相信 FileImage 應該非常適合您的情況。
uj5u.com熱心網友回復:
我正在發布解決方案,以防有人遇到同樣的問題。我切換回 image_picker 包,它也支持 web,你只需要稍微不同地使用它:
class ImagePickerService {
final ImagePicker _picker = ImagePicker();
Uint8List picked = Uint8List(8);
Future<void> pickImage() async {
XFile? image = await _picker.pickImage(source: ImageSource.gallery);
if (image != null) picked = await image.readAsBytes();
}
}
ClipOval(
child: Image.memory(
avatar,
fit: BoxFit.cover,
width: 100.0,
height: 100.0,
),
)
avatar被分配給_ips.picked,所以它是 Uint8List 型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/513293.html
標籤:扑网络
