Как отобразить фрагмент кода во Flutter, сохранив все отступы и переводы строк как есть? - PullRequest
0 голосов
/ 01 октября 2018

Я делаю небольшое приложение для программирования, и для некоторых примеров мне нужно отобразить некоторые фрагменты кода 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");
       }
    }
'''),

будет выглядеть примерно так:

пример отображаемой карты

В этом небольшом коде отступы кажутся хорошими, но переводы строк переводятся.Один из способов преодолеть это - полностью удалить все новые строки, но это утомительно для больших кусков кода.Я просто хотел более быструю альтернативу.

1 Ответ

0 голосов
/ 01 октября 2018

Если вы хотите отобразить \n как \n, то вам нужно либо сделать строку необработанной строкой, чтобы escape-последовательности не были разрешены, либо использовать двойную обратную косую черту (\\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");
       }
    }
'''),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...