如果匹配 FLUTTER 中的特定字符,则替换字符串中的字符
Posted
技术标签:
【中文标题】如果匹配 FLUTTER 中的特定字符,则替换字符串中的字符【英文标题】:replace characters in string if they matched specific chars in 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 我已经用代码更新了你的问题。希望这将有助于理解问题。谢谢你的时间。如有任何困惑,请不要犹豫: 【参考方案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<Product>
:
List<Product> modeledProducts =
List.generate(originalProducts.length, (i) => Product.fromDynamic(originalProducts[i]));
接下来我创建一个临时的List<String>
,我将在其中保存找到的所有重复产品(它们的名称),并创建最终的List<Products>
,其中将包含独特的产品及其价格:
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”。我们需要将名称存储为键,将价格存储为值。它会在找到密钥后分配一个新值。谢谢。以上是关于如果匹配 FLUTTER 中的特定字符,则替换字符串中的字符的主要内容,如果未能解决你的问题,请参考以下文章