Flutter 如何将编码为 SQFL 数据库的字符串的列表简洁地转换回列表?

Flutter how to turn Lists encoded as Strings for a SQFL database back to Lists concisely?

恐怕我正在尝试在这里重新发明轮子。我将对象放入我的 SQFL 数据库中: https://pub.dev/packages/sqflite

一些对象字段是整数列表,其他是字符串列表。我将这些编码为纯字符串,以放置在我的 SQFL 数据库中的文本字段中。

在某些时候我将不得不把它们转回去,我在 Google 上找不到任何东西,这很令人惊讶,因为这在 SQFL

中一定很常见

我已经开始编写 'decoding',但它是新手飞镖。有什么我应该使用的高性能产品吗?

包含代码以证明我不是完全懒惰,无需查看,边缘情况会导致失败。

  List<int> listOfInts = new List<int>();

  String testStringOfInts = "[1,2,4]";
  List<String> intermediateStep2 = testStringOfInts.split(',');

  int numListElements = intermediateStep2.length;

  print("intermediateStep2: $intermediateStep2, numListElements: $numListElements");
  for (int i = 0; i < numListElements; i++) {
    if (i == 0) {
      listOfInts.add(int.parse(intermediateStep2[i].substring(1)));
      continue;
    }
    else if ((i) == (numListElements - 1)) {
      print('final element: ${intermediateStep2[i]}');
      listOfInts.add(int.parse(intermediateStep2[i].substring(0, intermediateStep2[i].length - 1)));
      continue;
    }
    else listOfInts.add(int.parse(intermediateStep2[i]));
  }
  print('Output: $listOfInts');

  /* DECODING LISTS OF STRINGS */
  String testString = "['element1','element2','element23']";
  List<String> intermediateStep = testString.split("'");
  List<String> output = new List<String>();

  for (int i = 0; i < intermediateStep.length; i++) {
    if (i % 2 == 0) {
      continue;
    } else {
      print('adding a value to output: ${intermediateStep[i]}');
      //print('value is a: ${(intermediateStep[i]).runtimeType}');
      output.add(intermediateStep[i]);
    }
  }
  print('Output: $output');
}

对于整数,您可以像这样进行解析:

void main() {
  print(parseStringAsIntList("[1,2,4]")); // [1, 2, 4]
}

List<int> parseStringAsIntList(String stringOfInts) => stringOfInts
    .substring(1, stringOfInts.length - 1)
    .split(',')
    .map(int.parse)
    .toList();

我需要更多关于字符串在某些极端情况下如何保存的信息,比如它们是否包含 , and/or ',因为这将改变解析的方式。但是,如果字符串中的两个字符都有效(尤其是 ,),我会建议您将存储格式更改为 JSON,这样可以更轻松地 encode/decode 并且没有风险使用会给您带来问题的字符)。

但是如果我们知道每个字符串不包含 ,:

void main() {
  print(parseStringAsStringList("['element1','element2','element23']"));
  // [element1, element2, element23]
}

List<String> parseStringAsStringList(String stringOfStrings) => stringOfStrings
    .substring(1, stringOfStrings.length - 1)
    .split(',')
    .map((string) => string.substring(1, string.length - 1))
    .toList();