小编Pan*_*rld的帖子

颤振孤岛与未来

我可能会对Isolate和Future有错误的想法,请帮我清理一下.以下是我对两个科目的理解.

隔离:在自己的事件循环中隔离运行代码,并且每个事件可以在嵌套的微任务队列中运行较小的任务.

未来:未来用于表示将来某个时间可用的潜在价值或错误.

我的困惑是:

  1. 文档说Isolate有它自己的循环?我觉得拥有自己的事件队列对我来说更有意义,我错了吗?

  2. 未来是否会在主Isolate上异步运行?我假设未来的任务实际上被放置在事件队列的末尾,所以如果它将来会循环执行.如我错了请纠正我.

  3. 为什么在有未来的时候使用Isolate?我看到一些使用Isolate的例子用于一些繁重的任务,而不是Future.但为什么?当将来在主隔离队列上异步执行时,它才对我有意义.

谢谢大家,感谢您的回复.

future dart dart-isolates flutter

12
推荐指数
3
解决办法
2889
查看次数

android构建工具默认在生成的apk中将v4限定符添加到可绘制文件夹

我已经困惑很长一段时间了.

在构建工具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)

我的问题是:

  1. 为什么默认情况下为可绘制文件夹添加了v4后缀?目前,应用程序通常基于更高版本的API构建.我觉得不需要添加v4限定符.
  2. 为什么从v21.0.0开始?我已经完成了几乎所有版本的构建工具,这只发生在v21.0.0之后.
  3. 未来还会有其他资格赛如v6,v9等吗?

非常感谢你提前.

android qualifiers build-tools aapt suffix

6
推荐指数
0
解决办法
1362
查看次数

Dart:多个等待相同的未来

我最近看到了一些像下面这样的代码示例

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)

future dart dart-async

6
推荐指数
1
解决办法
1447
查看次数

flutter json_serialized tojson 无法正常工作

我查看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 没有做这么简单的事情,或者我错过了什么?谢谢。

flutter json-serialization

6
推荐指数
2
解决办法
5359
查看次数

Flutter Column 底部溢出像素

我正在尝试使用以下格式在 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)

overflow flutter

5
推荐指数
1
解决办法
2716
查看次数

get() 和 getAfter() 之间的 Firebase 安全规则差异

在文档中,它说:

使用 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() 函数在事务或批量写入完成之后但在事务或批量提交之前访问文档的状态。

我可能还没有完全理解这个概念。我的问题是:

  1. 为什么事务或批量写入必须专门使用getAfter(),我们可以只使用get()吗?
  2. 如果您必须使用 getAfter() 进行事务或批量写入,是否意味着您仍然需要 get() 进行正常写入?它们是如何同时存在的?

谢谢。

firebase firebase-security google-cloud-firestore

3
推荐指数
1
解决办法
781
查看次数