如何在 Flutter 中显示一段代码,保持所有缩进和换行符不变?



我正在制作一个小型编程应用程序,对于一些示例,我需要显示一些C代码片段。如何保留所有缩进和换行符(''(而不解析/弄乱它们,并像原始代码一样显示它们?

我尝试将它们括在三引号中,但缩进不可靠,它仍然解析换行符。我尝试过的最好的方法是制作一个水平滚动的 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");
}
}
'''),

会产生这样的东西:

显示的卡片示例

缩进在这个小代码中似乎很好,但换行符正在解析。克服此问题的一种方法是完全删除所有换行符,但这对于大型代码段来说很乏味。我只是想要一个更快的选择。

如果要将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");
}
}
'''),

最新更新