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

时间:2018-10-01 18:29:19

标签: flutter

我正在制作一个小型编程应用程序,对于某些示例,我需要显示一些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");
       }
    }
'''),

会产生这样的东西:

example of the card displayed

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

1 个答案:

答案 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");
       }
    }
'''),