1. 在哪里放置分辨率相关的图片文件?
虽然 Android 区分对待资源文件 (resources) 和资产文件 (assets),但是 Flutter 应用只有资产文件 (assets)。所有原本在 Android 中应该放在 res/drawable-* 文件夹中的资源文件,在 Flutter 中都放在一个 assets 文件夹中。
Flutter 遵循一个简单的类似 iOS 的密度相关的格式。文件可以是一倍 (1.0x)、两倍 (2.0x)、三倍 (3.0x) 或其它的任意倍数。 Flutter 没有 dp 单位,但是有逻辑像素尺寸,基本和设备无关的像素尺寸是一样的。名称为 devicePixelRatio 的尺寸表示在单一逻辑像素标准下设备物理像素的比例。
和 Android 的密度分类的对照表如下:
| Android 密度修饰符 | Flutter 像素比例 |
|---|---|
| ldpi | 0.75x |
| mdpi | 1.0x |
| hdpi | 1.5x |
| xhdpi | 2.0x |
| xxhdpi | 3.0x |
| xxxhdpi | 4.0x |
文件放置于任意文件夹中—Flutter 没有预先定义好的文件夹结构。你在 pubspec.yaml 文件中定义文件(包括位置信息),Flutter 负责找到它们。
需要注意的是,在 Flutter 1.0 beta 2 之前,在 Flutter 中定义的文件不能被原生端访问,反之亦然。原生端定义的资产文件 (assets) 和资源文件 (resources) 也无法被 Flutter 访问,因为它们是放置于不同的文件夹中的。
至于 Flutter beta 2,文件是放置于原生端的 asset 文件夹中,所以可以被原生端的 AssetManager 访问:
val flutterAssetStream = assetManager.open("flutter_assets/assets/my_flutter_asset.png")
然而对于 Flutter beta 2,Flutter 依然无法访问原生资源文件 (resources),也无法访问原生资产文件 (assets)。
如果你要向 Flutter 项目中添加一个新的叫 my_icon.png 的图片资源,并且将其放入我们随便起名的叫做 images 的文件夹中,你需要将基础图片(1.0x)放在 images 文件夹中,并将其它倍数的图片放入以特定倍数作为名称的子文件夹中:
images/my_icon.png // Base: 1.0x image
images/2.0x/my_icon.png // 2.0x image
images/3.0x/my_icon.png // 3.0x image
接下来,你需要在 pubspec.yaml 文件中定义这些图片:
assets:
- images/my_icon.jpeg
然后你就可以使用 AssetImage 访问你的图片了:
return AssetImage("images/my_icon.jpeg");
或者通过 Image widget 直接访问:
@override
Widget build(BuildContext context) {
return Image.asset("images/my_image.png");
}
2. 字符串储存在哪里?如何处理本地化?
Flutter 当下并没有一个特定的管理字符串的资源管理系统。目前来讲,最好的办法是将字符串作为静态域存放在类中,并通过类访问它们。例如:
class Strings {
static String welcomeMessage = "Welcome To Flutter";
}
接着在你们的代码中,你可以这样访问你的字符串:
Text(Strings.welcomeMessage)
Flutter 在 Android 上提供无障碍的基本支持,但是这个功能当下仍在开发。
我们鼓励 Flutter 开发者使用 intl 包 进行国际化和本地化。
3. Gradle 文件的对应物是什么?我该如何添加依赖?
在 Android 中,你在 Gradle 构建脚本中添加依赖。Flutter 使用 Dart 自己的构建系统以及 Pub 包管理器。构建工具会将原生 Android 和 iOS 壳应用的构建代理给对应的构建系统。
虽然在你的 Flutter 项目的 android 文件夹下有 Gradle 文件,但是它们只用于给对应平台的集成添加原生依赖。一般来说,在 pubspec.yaml 文件中定义在 Flutter 里使用的外部依赖。pub.dev 是查找 Flutter packages 的好地方。