如何更高效地编写这个 Flutter 代码?

     2023-02-23     117

关键词:

【中文标题】如何更高效地编写这个 Flutter 代码?【英文标题】:How to write this Flutter code more efficiently? 【发布时间】:2020-01-18 07:41:47 【问题描述】:

正如您在第一部分中看到的,我正在检查某个值是否包含在来自 Firestore 的文档中并返回一个布尔值。现在我在构建中调用该函数,并根据该返回值更改芯片颜色(第二部分)。

现在的问题可能是因为我在构建函数中调用它,所以它在构建过程中被连续调用,这让我在 Firestore 中读取了大量数据,或者该函数效率低下。我怎样才能更有效地写这个?

checkAtt(String name, id , date) async
   var ref = _db.collection('subjects').document(id).collection('Att').document(date);
   var docref = await ref.get();
      return docref.data.containsKey(name)
        ?true
        :false;
  

 class PresentChip extends StatefulWidget 
  final candidate;
  PresentChip(
    this.candidate, 
    Key key,
  ) : super(key: key);
  @override
  _PresentChipState createState() => _PresentChipState();


class _PresentChipState extends State<PresentChip> 
  var isSelected = false;
  var c = false;
  @override
  Widget build(BuildContext context) 
    final SelectSub selectSub = Provider.of<SelectSub>(context);
    final Date date = Provider.of<Date>(context);

  db.checkAtt(widget.candidate, selectSub.selectsub, date.datenew).then((result)
    print(result);
    setState(() 
     c = result; 
    );
  ); 

       return Container(
      child: ChoiceChip(
        label: Text('Present'),
        selected: isSelected,
        onSelected: (selected) 
          db.gibAtt(
              widget.candidate, selectSub.selectsub, date.datenew.toString());
          setState(() 
            isSelected = selected;
          );
        ,
        backgroundColor: !c ?Colors.red :Colors.green ,
        selectedColor: !c ?Colors.red :Colors.green ,
    ));
  


【问题讨论】:

您应该在问题中发布图片,而不是在问题的 cmets 中 @Durdu 这样吗? 你应该直接添加代码,而不是图像。 @Durdu 好的....已编辑 我已经编辑了这个问题。以前它被表述为“任何人都愿意做一些免费的工作”,我现在已经改变了它,所以重点是你,这个帖子的作者,如何能够达到预期的结果。差异可能是微妙的,但它可以解释四次投反对票。 【参考方案1】:

假设您只想从 firestore 读取一次,您需要一个 FutureBuilder。

return Container(
  child: FutureBuilder(
    future: db.checkAtt(widget.candidate, selectSub.selectsub, date.datenew),
    builder: (context, snapshot) 
      if(snapshot.hasData)
      return ChoiceChip(
        ...
        backgroundColor: !snapshot.data ?Colors.red :Colors.green,
        selectedColor: !snapshot.data ?Colors.red :Colors.green,
      );

      //Return another widget if the future has no data
      return Text('Future has no data');
    
  )
);

如果您需要您的 UI 对来自 Firestore 的更改做出反应,请使用 StreamBuilder。

您可以从构建方法中删除以下块:

db.checkAtt(widget.candidate, selectSub.selectsub, date.datenew).then((result)
  print(result);
  setState(() 
   c = result; 
  );
);

【讨论】:

如何使用make更高效地编译c文件

】如何使用make更高效地编译c文件【英文标题】:Howtocompilecfilesmoreefficentwithmake【发布时间】:2016-07-1219:05:17【问题描述】:我目前正在编写一个玩具操作系统。由于有很多c文件gcc命令不会改变(文件名除外),有没有办法自动... 查看详情

如何更优雅地编写这个 SQL 查询(加入 + 最大查询)

】如何更优雅地编写这个SQL查询(加入+最大查询)【英文标题】:HowtowritethisSQLquerymoreelegantly(joining+maxquery)【发布时间】:2021-03-1805:20:26【问题描述】:好的,我正在使用w3school中的以下示例https://www.w3schools.com/sql/trysql.asp?filename... 查看详情

如何在 C# 中高效地编写大型文本文件?

】如何在C#中高效地编写大型文本文件?【英文标题】:HowtoefficientlywritealargetextfileinC#?【发布时间】:2011-03-2508:20:09【问题描述】:我正在C#中创建一个方法,它为GoogleProductFeed生成一个文本文件。提要将包含超过30,000条记录,... 查看详情

《effectivec#》系列之(零)——概要

...授了许多在实际开发中非常有用的技巧和方法,例如:1.如何避免装箱和拆箱操作的性能损失;2.如何正确地重载运算符;3.如何使用yield关键字来简化迭代器的编写;4.如何正确地处理异步代码中的异常;5.如何避免死锁和竞态条... 查看详情

如何更轻松地实现一个 Flutter 布局?

】如何更轻松地实现一个Flutter布局?【英文标题】:Howtoimplementaflutterlayoutmoreeasily?【发布时间】:2019-06-0901:28:30【问题描述】:我有一个布局效果,不知道怎么实现更方便?我有六个或N个子小部件,放置在一个父小部件中,... 查看详情

如何在 C++ 中编写高效的遗传算法

】如何在C++中编写高效的遗传算法【英文标题】:HowtowriteefficientGeneticAlgorithmsinC++【发布时间】:2011-10-2523:50:09【问题描述】:我正在尝试为canonicalgeneticalgorithm编写一个C++程序,其中有一群长度为N的个体(染色体),其中每个... 查看详情

chatgpt编写模式:如何高效地将思维框架赋予ai?(代码片段)

如何理解Prompt?PromptEnginneeringprompt通常指的是一个输入的文本段落或短语,作为生成模型输出的起点或引导。prompt可以是一个问题、一段文字描述、一段对话或任何形式的文本输入,模型会基于prompt所提供的上下文和... 查看详情

如何使用 Laravel 高效地制作网页和移动游戏

】如何使用Laravel高效地制作网页和移动游戏【英文标题】:HowtoefficientlymakeagameforwebandmobilewithLaravel【发布时间】:2016-11-2509:40:15【问题描述】:几年前,我开始制作自己的浏览器游戏,使用原始PHP和一点Javascript。就是这样。但... 查看详情

如何使用 Ansible 官方模块更高效地向 VMware VM 主机添加磁盘?

】如何使用Ansible官方模块更高效地向VMwareVM主机添加磁盘?【英文标题】:HowtoadddisktoVMware\'sVMhostmoreefficientlybyusingAnsibleofficalmodule?【发布时间】:2020-03-0610:00:08【问题描述】:环境操作系统版本:CentOS7.5Ansible版本:2.8.4和python2.7... 查看详情

React:我怎样才能让这个 React 组件写得更好更高效?

】React:我怎样才能让这个React组件写得更好更高效?【英文标题】:React:HowcanImakethisReactComponentwrittenbettertobemoreefficient?【发布时间】:2021-11-0617:04:08【问题描述】:我觉得我在重复onIncrement中的代码,并且可以更好地重构它。max... 查看详情

如何编写更棒的代码

...优雅的代码,将来说不定会给你节省更多的时间。那么,如何编写更棒的代码,下面是11条基本规则:保 查看详情

编写高效的jquery代码

...更加的随心所欲,所以只有遵循良好的规范才会让代码更高效,更健壮。jQuery的编写原则:一、不要过度使用jQuery1.jQuery速度再快,也无法与原生的javascript方法相比,而且建立的jQuery对象包含的信息量很庞大。所以有原生方法可... 查看详情

阿里面试官:mysql如何设计索引更高效?(代码片段)

...评论的时候我发现有个网友的提问我觉得很有意思:帅丙如何设计一个索引?你们都是怎么设计索引的?怎么设计更高效?我一想索引我写过很多了呀,没 查看详情

如何写好flutter代码?

本文着重分享闲鱼Flutter团队在基础代码规范方面所做的一些实践。缘起代码规范作为一个研发团队的核心基因,怎样在团队中高效传承是一个挑战。Flutter作为移动端持续火热的新型框架,正吸引越来越多的研发同学进入... 查看详情

如何在 Flutter 中将按钮图标更改为动画文本?

】如何在Flutter中将按钮图标更改为动画文本?【英文标题】:HowtoChangeButtonIcontoAnimatedTextinFlutter?【发布时间】:2021-07-1116:46:16【问题描述】:我在这个主题上遇到了一些问题。我有一个材质按钮。正如您在下面的代码中看到的... 查看详情

STRAPI 是不是有助于开发 REST api 以轻松且经济高效地连接 Flutter 应用程序

】STRAPI是不是有助于开发RESTapi以轻松且经济高效地连接Flutter应用程序【英文标题】:DoesSTRAPIhelpfultodevelopRESTapitoconnectFlutterappeasilyandcosteffectivelySTRAPI是否有助于开发RESTapi以轻松且经济高效地连接Flutter应用程序【发布时间】:2020... 查看详情

提升你的技能:编写干净高效的javascript的7个技巧

编写干净的代码对每个开发人员来说都是必不可少的,因为它使代码易于阅读、理解和维护。干净的代码使团队中每个人的生活更轻松,您的代码更不容易出错,并且更容易添加新功能。在本教程中,我将介绍7个技巧,以便您... 查看详情

如何更好地理解如何阅读 Flutter 代码? [关闭]

】如何更好地理解如何阅读Flutter代码?[关闭]【英文标题】:HowdoIgetabetterunderstandingonhowtoreadFluttercode?[closed]【发布时间】:2021-10-1618:09:08【问题描述】:问题是我对程序的工作流程感到困惑,然后是我们导航到的页面以及我们从... 查看详情