小编Mak*_*ros的帖子

Flutter:ListView.builder 忽略 Container 子项的 BoxContrainst。始终应用完整的父级宽度

在聊天应用程序中构建聊天气泡。我无法控制 ListView.builder 的 Container 子项的宽度。子容器始终采用 ListView.builders 父容器的完整宽度:
扩展 -> 容器宽度。

我想要实现的目标:消息气泡宽度尽可能小,同时仍包含消息文本,但不大于屏幕宽度的 75%。

对于这个简化的示例,忽略文本换行。

chatBubble 在哪里以及为什么会获得这个全屏宽度?

超级简化的小部件布局示例:

@override
Widget build(BuildContext context) {
  return Container(
    height: safeHeight,
    child: Column(
      children: <Widget>[
        Expanded(
          child: ListView.builder(
            itemCount: messages.length,
            itemBuilder: (ctx, i) => chatBubble(messages[i]),
          )
        ),
        Container(
          height: 50,
          child: TextField(/* stuff */),
        )
      ]
    )
  );
}

chatBubble(Message msg) {
  return Padding(
    padding: EdgeInsets.all(8.0),
    child: Container(
      color: Colors.lightBlue,
      child: Text(msg.text),
      constraints: BoxConstraints(
        maxWidth: screenWidth * 0.75,
      ),
    )
  )
}
Run Code Online (Sandbox Code Playgroud)

结果: 在此输入图像描述

flutter

4
推荐指数
1
解决办法
1618
查看次数

Firebase 函数:Node.js:迭代存储在 firebase 文档字段中的映射

我正在努力寻找有关在我使用 Node.js 构建的函数触发器中使用从 firebase 中提取的地图的文档。每次我找到示例代码时,它都会使用我的 index.js 文件无法理解的函数。

数据库结构示例:
db.collection('users').doc('abc')
让 'abc' 保存一个名为 'uids' 的字段,该字段是一个 String、bool 的映射

我想在 Firebase 触发器函数中迭代“uids”map 以更新所有值为“false”的元素

我无法找出使用 index.js 中的地图进行任何操作/逻辑的适当方法。

这是我在网上找到的两个更连贯的片段:

db.collection('users').doc('abc').get().then((doc) => {
  var uids = doc.data().uids;

//try 1
  uids.forEach((value, key, map) => {
    //do stuff
  });

//try 2
  for (var uid in uids) {
    if (uid.val() == false)
      //do stuff
  }
});
Run Code Online (Sandbox Code Playgroud)

当搜索有关我的 index.js 代码的特定语法时,我是否错误地理解这是一个 Node.js 文件?我不明白为什么我要找到数十种方法来做同样的事情。似乎到处都张贴了完全随机的解决方案,但在我的文件中不起作用。

解决方案::感谢您的评论和回答以帮助解决此问题。我能够使用“Object.elemets(uids)”来投射 firebase 地图来提取键和值。

for (let [key, value] of Object.elements(uids)) {
  //do stuff
}
Run Code Online (Sandbox Code Playgroud)

javascript node.js google-cloud-functions google-cloud-firestore

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

Firebase:Cloud Firestore:listDocuments:文档读取成本 1 或 N?分布式计数器的可能替代方案?

构建社交媒体应用程序并应对 1write/doc/sec 限制。因此,将投票数据保留在邮寄文档中将无法大规模发挥作用。我已阅读“分布式计数器”,但文档读/写成本呈线性缩放。我一直在探索可用的 firebase 函数,并对“listDocuments()”感兴趣,它返回 DocumentReference 的列表

不幸的是,通过深入研究文档,我无法确定集合中 listDocument 的读取成本是 1 还是 1/doc。

我的计划是每个帖子有两个子集合,vote1/vote2。这大规模地消除了写入瓶颈。为了检索投票计数,我想在每个子集合上使用 listDocuments() 的长度。

我知道 firebase 有一些巧妙的索引技巧,但我也很好奇这是否是对数据库的低效操作。即用户在检索计数时会注意到延迟吗?

firebase google-cloud-firestore

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

Puppeteer:Element.hover() 不存在

我正在使用 puppeteer 从网站上抓取一些图像以及一些其他数据。要更改图像,我需要将鼠标悬停在列表项上。我不断遇到有关 .hover() 的文档,但没有成功。但是, .click() 非常适合我刮擦的另一部分。

const pptr = require('puppeteer');

async function scrapeProduct(productID) {
    const browser = await pptr.launch();
    const page = await browser.newPage();
    await page.goto(`https://someplace.com`);
    let scrapeData = await page.evaluate(async () => {
        let productMap = [];

        //scrape other data...

        const imageItems = document.querySelectorAll('ul[class="images-view-list"] > li > div');
        for (let image of imageItems) {
            await image.hover();
            productMap.push({
                'Image Src': document.querySelector('div[class="image-view-magnifier-wrap"] > img').getAttribute('src'),
            });
        }
        return productMap;
    });
    await browser.close();
    return scrapeData;
}
Run Code Online (Sandbox Code Playgroud)

我已经看到您通过先执行悬停来评估页面的解决方案。这很不方便,因为我收集了许多其他数据点,并希望在一个评估请求中保持我的解决方案干净。我对 .hover() 的理解不正确吗?

node.js puppeteer

2
推荐指数
1
解决办法
1140
查看次数