【问题标题】:replace characters in string if they matched specific chars in FLUTTER如果匹配 FLUTTER 中的特定字符,则替换字符串中的字符
【发布时间】:2022-01-20 17:34:43
【问题描述】:

我正在创建一个 POS,我想将购买的商品显示为文本,并且我也打算将这些商品存储为文本。我用 '\n' 字符分隔每个项目。

现在的问题是我不知道如何检查与某个产品特别匹配的文本。我尝试过使用 string.contains 方法,但这不是我想要的。

例如:我的产品名称如下:

  • 鸡肉奶酪

现在这是两种不同的产品,但每一种鸡肉奶酪都会含有鸡肉。

那么,我该如何更换产品

产品在一个列表中,是地图的一部分。 但是,对于这个问题;您可以假设所有项目都存储为列表,示例如下:

['chicken', 120],

['chicken Cheeze', 150],

['chicken Cheeze Pizza', 180],

.......................

然后,在代码中,我将这些产品保存为字符串(点击时)。

// Gesture Detector is inside a Galleryview which is further part of a row and expanded widgets,
GestureDetector(
     onTap: () {
     //bill items is a string Storing all products.
          billItems += (item[0] +
                    ' :   ' +
                    item[1].toString() + '\n');
               },

P.s:我想要做的就是做类似的事情:“鸡 * 3”如果鸡被订购 3 次而不是打印 3 次。谢谢

【问题讨论】:

  • 我没有关注你,你必须在项目描述栏旁边加上一个数量框。现在如果鸡与不同的项目匹配很好,你应该根据第一个字母而不是它自己的单词进行过滤,所以如果你以C开头,所有C项目都会出现,依此类推,直到你找到正确的chiken单词,然后一旦你用 c 跟随鸡肉,它就会过滤奶酪。这就是你想要的吗?
  • 如果你想看看我是怎么做到的,我可以分享一个我已经做过的页面
  • 你也可以使用条码扫描器来抓取物品
  • 你能分享一些代码吗?特别是您在哪里填充购买的物品。
  • @esentis 我已经用代码更新了你的问题。希望这将有助于理解问题。谢谢你的时间。如有任何困惑,请不要犹豫:

标签: flutter dart flutter-web


【解决方案1】:

所以,我想出了一个解决方案,虽然我不知道它有多优化或多快。

我首先创建一个产品模型来序列化它:

class Product {
  String name;
  double price;
  int count;

  Product({required this.name, required this.price,this.count=0});

  factory Product.fromDynamic(List product) =>
      Product(name: product[0], price: product[1]);

  Map<String, dynamic> toJson() {
    return {"name": name, "price": price,"count":count,};
  }
}

所以假设我们的产品是这种形式:

  final originalProducts = [
    ['chicken', 120],
    ['chicken', 135],
    ['chicken', 140],
    ['chicken Cheeze', 150],
    ['chicken Cheeze Pizza', 180],
  ];

我创建了一个List&lt;Product&gt;

  List<Product> modeledProducts =
      List.generate(originalProducts.length, (i) => Product.fromDynamic(originalProducts[i]));

接下来我创建一个临时的List&lt;String&gt;,我将在其中保存找到的所有重复产品(它们的名称),并创建最终的List&lt;Products&gt;,其中将包含独特的产品及其价格:

  List<String> duplicates = [];

  List<Product> finalProducts = [];

然后我们遍历modeledProducts 以查找重复项并进行必要的操作:

  for (final product in modeledProducts) {
    if (!duplicates.contains(product.name)) {
      duplicates.add(product.name);
      finalProducts.add(product);
    } else {
      finalProducts.firstWhere((p) => p.name == product.name).price +=
          product.price;
      finalProducts.firstWhere((p) => p.name == product.name).count++;
    }
  }

现在您可以使用您的数据了:

  for (final fProduct in finalProducts) {
    print(fProduct.toJson());
  }

上面将打印:

{name: chicken, price: 395, count: 3}
{name: chicken Cheeze, price: 150, count: 1}
{name: chicken Cheeze Pizza, price: 180, count: 1}

【讨论】:

  • 您好 Esentis,感谢您的回答。我认为克服这个问题是一种复杂且计算/资源昂贵的方法。
  • 我花了一段时间才弄明白。完成任务的最佳方式是使用“MAP”。我们需要将名称存储为键,将价格存储为值。它会在找到密钥后分配一个新值。谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-07-11
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
相关资源
最近更新 更多