我有一个应用程序,可让用户在中键入和保存文本TextField
。如果输入的文本TextField
是一个连续行,则效果很好。如果用户按下Return / Enter键在中创建新行,TextField
则不会正确保存到JSON文件中。有没有一种方法可以将多行文本从中保存TextField
到JSON文件中?
Flexible(
child: TextField(
controller: _notesController,
obscureText: false,
maxLines: null,
onChanged: (value) {
// updates playterNotes to the text inputed
playerList.players[index].playerNotes = value;
// updates JSON file
writePlayerData(playerList);
},
style: TextStyle(
color: Color.fromRGBO(255, 174, 3, 1.0),
letterSpacing: 2.0,
fontSize: 14.0,
fontFamily: 'Smash'
),
),
)
编辑:如果JSON文件未正确保存,则加载占位符JSON。
这是初始“单行”后打印出的JSON
I/flutter ( 4058): {"players":[{"id": "GitHub Test","setCount": "0 - 0","characters": {"char1": "cloud","char2": ""},"notes": "single line"}]}
这是“多行”后打印出的JSON
I/flutter ( 4058): {"players":[{"id": "GitHub Test","setCount": "0 - 0","characters": {"char1": "cloud","char2": ""},"notes": "single line
I/flutter ( 4058): multi line"}]}
Future<File> writePlayerData(PlayerList playerList) async {
final file = await _localFile;
return file.writeAsString(PlayerListtoJson(playerList));
}
哪个调用:
String PlayerListtoJson(PlayerList playerList) {
String playerJson = "";
if (playerList.players.length > 0 ) {
playerJson = '{"players":[${playerToJson(playerList.players)}]}';
}
return playerJson;
}
String playerToJson(List<Player> players) {
String playerString = "";
for(int i = 0; i < players.length; i++) {
playerString += '{"id": "${players[i].playerId}",'
'"setCount": "${players[i].playerSetCount}",'
'"characters": ${characterToJson(players[i].playerChars)}'
'"notes": "${players[i].playerNotes}"}';
if (!(i == players.length - 1)) {
playerString += ',';
}
}
return playerString;
}
String characterToJson (Characters characters) {
String playerCharacters = '{"char1": "${characters.char1}",'
'"char2": "${characters.char2}"},';
return playerCharacters;
}
参考JSON:
{
"players": [
{
"id": "Filler Character",
"setCount": "0 - 0",
"characters": {
"char1": "",
"char2": ""
},
"notes": "Lorem ipsum dolor sit amet, consectetur."
}
]
}
使用来转义新行,\
以便编码器不会在产生的JSON中插入新行
String s = 'A\nB\nC';
print('$s');
//A
//B
//C
//escaping the new line with a additional "\"
s = s.split('\n').join('\\n');
//or
//s.replaceAll('\n', '\\n');
print('$s');
//A\nB\nC
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句