В большинстве языков программирования, если вы включаете \n
в строку, он интерпретирует два символа как (escape) последовательность и фактически сохраняет один непечатаемый символ с кодом ASCII 10.
Есливы буквально вводите \n
в документ в консоли Firestore, он сохраняет это точное литеральное значение в строке.Так что это два символа \
и n
.
Эти два не одно и то же.Фактически, если вы захотите ввести двухсимвольную последовательность в строку в большинстве языков программирования, вы получите "\\n"
.Это две обратные косые черты: первая для запуска escape-последовательности, вторая для обозначения литерала \
, а затем литерала n
.
Так что во Flutter, если вы сохранили литерал двесимволов \n
в строке, и вы хотите отобразить ее как новую строку, вам нужно декодировать строку обратно в один символ перевода строки.К счастью, это довольно просто:
yourString.replaceAll("\\n", "\n");
Например, это то, что я только что протестировал в приложении.Мой документ в консоли Firestore показывает:
\n sequence in a document in the Firestore console">
А затем мой код:
var doc = await Firestore.instance.collection("weather").document("sf").get();
var weather = doc.data["condition"]
print(weather);
print(weather.replaceAll("\\n", "\n"));
Это первое заявление print
,печатает:
Sunny\nI think
, а второй печатает:
Sunny
I think
Интересный факт: когда я запускаю этот код во Flutter:
Firestore.instance.collection("weather").document("test").setData({ 'condition': "nice\nand\nsunny" });
Он отображается так в консоли Firestore:
![Unprintable newlines show as space in Firestore console](https://i.stack.imgur.com/boaQf.png)
Похоже, непечатный \n
в строке отображается как пробел в консоли.Я еще не нашел способ ввода новой строки в строку в консоли Firestore.