我正在制作一个小型编程应用程序,对于某些示例,我需要显示一些C代码。如何保留所有缩进和换行符('\ n')而不进行解析/处理,并像原始代码一样显示它们?
我尝试将它们括在三引号中,但缩进并不可靠,并且仍然解析换行符。我尝试过的最好的办法是制作一个水平滚动的SingleChildScrollView来显示比视口更长的线,并且除上述格式问题外,它的效果都很好。
我正在使用的小部件的一些代码:
class CodeCard extends StatelessWidget {
const CodeCard({
Key key,
this.title,
this.code,
}) : super(key: key);
final String title;
final String code;
@override
Widget build(BuildContext context) {
return Container(
color: Color.fromRGBO(211, 211, 211, 0.6),
margin: EdgeInsets.fromLTRB(15.0, 5.0, 15.0, 5.0),
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Container(
width: 600.0,
margin: EdgeInsets.fromLTRB(15.0, 15.0, 5.0, 15.0),
child: new RichText(
text: new TextSpan(
children: <TextSpan>[
new TextSpan(
text: title,
style: _titleListStyle,
),
new TextSpan(
text: code,
style: _codeStyle,
),
],
),
),
),
),
);
}
}
例如,此代码:
CodeCard(code: '''
void push(int value){
if(top == SIZE-1)
printf("\nOverflow error. Stack is Full");
else{
top++;
stack[top] = value;
printf("\nInsertion was successful");
}
}
'''),
会产生这样的东西:
在这个小代码中缩进似乎很好,但是正在解析换行符。解决此问题的一种方法是完全删除所有换行符,但这对于大量代码而言是乏味的。我只是想要一个更快的选择。
答案 0 :(得分:0)
如果要将\n
显示为\n
,则需要将字符串设置为原始字符串,以便不解析转义序列,或使用双反斜杠(\\n
)以逃避反斜杠以使其按原样呈现。
可以使用
CodeCard(code: r'''
void push(int value){
if(top == SIZE-1)
printf("\nOverflow error. Stack is Full");
else{
top++;
stack[top] = value;
printf("\nInsertion was successful");
}
}
'''),
(原始字符串不支持字符串插值)
或
CodeCard(code: '''
void push(int value){
if(top == SIZE-1)
printf("\\nOverflow error. Stack is Full");
else{
top++;
stack[top] = value;
printf("\\nInsertion was successful");
}
}
'''),