我可能会对Isolate和Future有错误的想法,请帮我清理一下.以下是我对两个科目的理解.
隔离:在自己的事件循环中隔离运行代码,并且每个事件可以在嵌套的微任务队列中运行较小的任务.
未来:未来用于表示将来某个时间可用的潜在价值或错误.
我的困惑是:
文档说Isolate有它自己的循环?我觉得拥有自己的事件队列对我来说更有意义,我错了吗?
未来是否会在主Isolate上异步运行?我假设未来的任务实际上被放置在事件队列的末尾,所以如果它将来会循环执行.如我错了请纠正我.
为什么在有未来的时候使用Isolate?我看到一些使用Isolate的例子用于一些繁重的任务,而不是Future.但为什么?当将来在主隔离队列上异步执行时,它才对我有意义.
谢谢大家,感谢您的回复.
我已经困惑很长一段时间了.
在构建工具v21.0.0之前,打包的apk包含drawable文件夹结构,如下所示:
res/drawable-hdpi
res/drawable-ldpi
res/drawable-mdpi
res/drawable-hdpi
Run Code Online (Sandbox Code Playgroud)
但是,自v21.0.0以来发生了变化,unzip文件夹结构带有后缀:
res/drawable-hdpi-v4
res/drawable-ldpi-v4
res/drawable-mdpi-v4
res/drawable-hdpi-v4
Run Code Online (Sandbox Code Playgroud)
我的问题是:
非常感谢你提前.
我最近看到了一些像下面这样的代码示例
Future<Null> ensureLogin() {...}
var login = ensureLogin();
Future functionA() async {
await login;
print("FunctionA finished");
}
Future functionB() async {
await login;
print("FunctionB finished");
}
void main() {
functionA();
functionB()
}
Run Code Online (Sandbox Code Playgroud)
当 future 完成时,它会打印如下:
FunctionA finished
FunctionB finished
Run Code Online (Sandbox Code Playgroud)
看起来我们可以对同一个未来对象有多个等待?但这到底是如何运作的呢?它相当于 Future 是什么?也许像下面这样?
login.then(functionA).then(fucntionB)
Run Code Online (Sandbox Code Playgroud) 我查看Order类示例,发现 Item 类未转换为 Map。
class Order {
int count;
int itemNumber;
bool isRushed;
Item item;
Map<String, dynamic> toJson() => _$OrderToJson(this);
}
Run Code Online (Sandbox Code Playgroud)
生成的 .g 文件具有以下内容:
Map<String, dynamic> _$OrderToJson(Order instance) {
...
writeNotNull('item', instance.item);
...
return val;
}
Run Code Online (Sandbox Code Playgroud)
订单地图中的项目仍然是项目类型,但我希望它也能自动转换为地图。生成的 .g 文件应该有这样的内容
writeNotNull('item', instance.item.toJson());
Run Code Online (Sandbox Code Playgroud)
我不想手动添加它,因为重新生成 .g 文件时它将被覆盖。为什么 json_serialized lib 没有做这么简单的事情,或者我错过了什么?谢谢。
我正在尝试使用以下格式在 Gridview 中显示一个项目:价格文本 -> 项目图像 -> 标题文本
我使用一列来实现它,似乎 GridView 中的 tile 具有固定的高度,因此当图像太大时会导致底部溢出。
所以我的问题是,有没有办法保留价格和标题文本而只挤压中间图像?类似于 android/iOS 布局约束的东西?谢谢你们。
[更新] 我也粘贴了代码片段。
我尝试过的另一件事是设置具有固定高度和宽度的图像并且它可以工作,但这需要我仔细找到合适的范围,这对我来说并不是很灵活。而且 GridTile 也没有真正给我想要的布局。我真的没有办法用 Column 挤压中间视图(在这种情况下是图像)吗?
@override
Widget build(BuildContext context) {
final imageUrl = doc['main_image']['downloadURL'];
Widget image;
if (imageUrl != null) {
image = Image.network(
imageUrl,
fit: BoxFit.scaleDown,
);
} else {
image = Container(
color: Colors.grey,
);
}
String price = '\$' + doc[FIREBASE_COL_PRICE].toString();
return Card(
child: Column(
children: <Widget>[
Align(
alignment: Alignment.centerRight,
child: Text(
price,
maxLines: 1,
),
),
Container(
padding: const …Run Code Online (Sandbox Code Playgroud) 在文档中,它说:
使用 get() 和 exists() 函数,您的安全规则可以针对数据库中的其他文档评估传入请求。
这对我来说没问题,这个例子对我来说很有意义:
service cloud.firestore {
match /databases/{database}/documents {
match /cities/{city} {
// Make sure a 'users' document exists for the requesting user before allowing any writes to the 'cities' collection
allow create: if exists(/databases/$(database)/documents/users/$(request.auth.uid))
// Allow the user to delete cities if their user document has the
// 'admin' field set to 'true'
allow delete: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是然后它说
对于写入,您可以使用 getAfter() 函数在事务或批量写入完成之后但在事务或批量提交之前访问文档的状态。
我可能还没有完全理解这个概念。我的问题是:
谢谢。
flutter ×3
dart ×2
future ×2
aapt ×1
android ×1
build-tools ×1
dart-async ×1
firebase ×1
overflow ×1
qualifiers ×1
suffix ×1