[英]How do you use CheckBoxListTile with PopupMenuButton in Flutter Web?
[英]How do you use SVG's on Flutter Web?
flutter_web 文檔說 dart:svg 已移植,但是您如何將其與 flutter 資產/小部件系統一起使用?
老實說,我發現的最佳解決方案是通過網絡加載網絡圖像。 將資產存儲在 CDN 上的某處,從 Web 版本的 CDN 中獲取它,然后在 iOS/Android 上從本地的資產中檢索它。
我使用這個庫創建了一個CrossPlatformSvg
小部件: https : CrossPlatformSvg
,類似於:
class CrossPlatformSvg {
static Widget asset(
String assetPath, {
double width,
double height,
BoxFit fit = BoxFit.contain,
Color color,
alignment = Alignment.center,
String semanticsLabel,
}) {
// `kIsWeb` is a special Flutter variable that just exists
// Returns true if we're on web, false for mobile
if (kIsWeb) {
return Image.network(
assetPath,
width: width,
height: height,
fit: fit,
color: color,
alignment: alignment,
);
} else {
return SvgPicture.network(
assetPath,
width: width,
height: height,
fit: fit,
color: color,
alignment: alignment,
placeholderBuilder: (_) => Container(
width: 30,
height: 30,
padding: EdgeInsets.all(30),
child: CircularIndicator(),
),
);
}
}
}
@aterenshkov 的方法對我有用(請參閱傑克回答下的評論)。 以下是實施的詳細信息...
iOS / 安卓
child: SvgPicture.asset('assets/yourimage.svg')
網絡
// remove assets folder reference
child: SvgPicture.asset('yourimage.svg')
將這兩個組合在一起......
import 'package:flutter/foundation.dart'; // provides kIsWeb property
...
child: kIsWeb ? SvgPicture.asset('yourimage.svg') : SvgPicture.asset('assets/yourimage.svg')
我的 Flutter Web 應用程序會在桌面 Web 瀏覽器中呈現 SVG,而不是使用flutter_svg的移動 Web 瀏覽器。 我發現有必要使用 canvaskit 支持進行構建,以便 SVG 在移動設備上呈現:
flutter build web --web-renderer canvaskit
然而,文檔指出 canvaskit 增加了大約 2MB 的下載大小,這對我來說是一個破壞者。 很遺憾,但在解決此問題之前,我將使用光柵圖像。
@RumbleFish 很好,但在許多情況下使用三元運算會使代碼變得混亂。
我對此的做法是:
assets/
。extension ForWeb on String { String forWeb({required bool web}) => web ? this.replaceFirst('assets/','') : this; }
SvgPicture.asset("assets/images/logo.png".forWeb(web: kIsWeb));
flutter_svg 1.0.0 版自 2021 年 12 月 2 日起發布,包括網絡支持。 因此,在 Flutter 項目中不再有使用 svg 圖像的阻止程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.