Firebase Firestore, новая строка команды - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь использовать команду новой строки для создания новой строки в тексте.Из этой проблемы следует, что это невозможно: Команда новой строки (\ n) не работает со строками базы данных Firebase Firestore

Это все еще так?Предполагая, что так, Flutter предлагает какие-либо методы с функциональностью, аналогичной следующей, что позволило бы мне обойти это?Firestore string with line break

Затем я использую будущий строитель для вызова этого из Firestore, а затем передаю строку (в данном случае комментарий) в другой виджет.

return new SocialFeedWidget(
  filter: false,
  articleID: document['article'],
  article_header: document['article_title'],
  userName: document['author'],
  spectrumValue: document['spectrum_value'].toDouble(),
  comment: document['comment'],
  fullName: document['firstName'] + " " + document['lastName'],
  user_id: document['user_id'],
  postID: document.documentID,
  posterID: userID,
  );
}).toList(),

В новом виджете я передаю его в виде строки и передаю через текстовый виджет следующим образом:

new Text(
  comment,
  style: new TextStyle(
    color: Color.fromRGBO(74, 74, 74, 1.0),
    fontSize: 13.0,
  ),
),

Когда он появляется, он все еще имеет \ nвнутри строки.From the console

1 Ответ

0 голосов
/ 19 декабря 2018

В большинстве языков программирования, если вы включаете \n в строку, он интерпретирует два символа как (escape) последовательность и фактически сохраняет один непечатаемый символ с кодом ASCII 10.

Есливы буквально вводите \n в документ в консоли Firestore, он сохраняет это точное литеральное значение в строке.Так что это два символа \ и n.

Эти два не одно и то же.Фактически, если вы захотите ввести двухсимвольную последовательность в строку в большинстве языков программирования, вы получите "\\n".Это две обратные косые черты: первая для запуска escape-последовательности, вторая для обозначения литерала \, а затем литерала n.

Так что во Flutter, если вы сохранили литерал двесимволов \n в строке, и вы хотите отобразить ее как новую строку, вам нужно декодировать строку обратно в один символ перевода строки.К счастью, это довольно просто:

yourString.replaceAll("\\n", "\n");

Например, это то, что я только что протестировал в приложении.Мой документ в консоли Firestore показывает:

image\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

Похоже, непечатный \n в строке отображается как пробел в консоли.Я еще не нашел способ ввода новой строки в строку в консоли Firestore.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...