Как заставить строку сдвигаться назад на каждую букву - PullRequest
1 голос
/ 27 апреля 2020

Я заканчиваю некоторые функции в проекте флаттера.

void code_shift_backward() {
  var input_string = controller.text;
  List<String> output_list = [];

  var input_runes = input_string.runes.toList();
  for (var rune in input_runes) {
    var mutatedRune = rune--;
    output_list.add(String.fromCharCode(mutatedRune));
  }

  var output_string = output_list.join("");
  setState(() {
    text_in_tree = output_string;
  });
}

Я даю ему слово wiggle, и я ожидаю vhffkd, но он продолжает давать wiggle

Ответы [ 3 ]

0 голосов
/ 27 апреля 2020

Вы можете исправить это, переместив -- в начало rune .. Это происходит потому, что установка - после переменной только обновляет переменную после этой строки.

void code_shift_backward() {
  var input_string = controller.text;
  List<String> output_list = [];

  var input_runes = input_string.runes.toList();
  for (var rune in input_runes) {
    var mutatedRune = --rune;
    output_list.add(String.fromCharCode(mutatedRune));
  }

  var output_string = output_list.join("");
  setState(() {
    text_in_tree = output_string;
  });
}
0 голосов
/ 27 апреля 2020

Для размера, может быть:

String shiftBack(String input) =>
    String.fromCharCodes([for (var c in input.runes) c - 1]);
0 голосов
/ 27 апреля 2020

Вы должны изменить:

var mutatedRune = rune--;

на:

var mutatedRune = --rune;

Объяснение:

руна - назначает значение руны сначала mutatedRune, затем уменьшает значение на единицу. Это означает, что mutatedRune и rune имеют одно и то же значение.

- руна сначала уменьшает значение, а затем присваивает.

Подробнее о Dart arithmeti c операторов читайте .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...