как исправить ошибку приведения строки profanity_filter

avatar
han da
9 августа 2021 в 04:41
103
1
0

Я пытаюсь использовать ProfanityFilter во флаттере, чтобы отфильтровать плохие слова в обзоре, который представляет собой строку. В ProfanityFilter есть список подвергнутых цензуре слов, который я хочу передать вместе со списком нецензурных слов, не включенных в список LDNOOBW. Однако, поскольку содержимое представляет собой строку, я использую приведение, а затем получаю сообщение об ошибке приведения: тип «ProfanityFilter» не является подтипом типа «String» в приведении типа.

TextFormField(
            decoration: InputDecoration(
              prefixIcon: Icon(Icons.comment_outlined, color: 
 Colors.white60, size: 20,),
              hintText: Languages
                  .of(context)
                  .revHint,
              focusedBorder: UnderlineInputBorder(),
            ),
            maxLines: null,
            onChanged: (val) {
              setState(() {
                val = ProfanityFilter.filterAdditionally(badString) as String;
                content = val;
                viewModel.setDescription(content);
              });
            }
          ),

Как мне передать строку в список, отсканировать и затем проанализировать подвергнутый цензуре список обратно в строку? Или есть лучший и простой способ подвергнуть цензуре плохие слова? Может карту? Благодарю вас! Совершенно новый для флаттера и кодирования.

Источник
GrahamD
9 августа 2021 в 08:45
0

Вы используете это поле textform для добавления новых нецензурных слов или пытаетесь проверить, содержит ли строка, введенная в поле textform, нецензурные слова?

han da
10 августа 2021 в 05:59
0

чтобы проверить, содержит ли введенная строка недопустимые слова.

Ответы (1)

avatar
GrahamD
10 августа 2021 в 06:24
0

Исходя из вашего ответа в комментариях, вы используете неправильный метод для этого. Вы должны использовать .hasProfanity.

Методы

hasProfanity — определяет, содержит ли строка ненормативную лексику

Используйте метод hasProfanity() экземпляра фильтра. Передайте строку для проверки.

Пример

final filter = ProfanityFilter();
String badString = 'you are an ass';
filter.hasProfanity(badString); //Returns true.

Если вы хотите получить список недопустимых слов в строке, используйте метод .getAllProfanity().

В вашем коде 'val' будет содержать строку, введенную пользователем, и это то, что вы передаете методу, а не 'badString'.

han da
10 августа 2021 в 09:28
0

о... Итак, если я хочу замаскировать всю ненормативную лексику в обзоре, я просто передаю: setState(() {content = filter.censor(val); viewModel.setDescription(content);});?. Благодарю вас! пробовал, цензуры нет...

GrahamD
10 августа 2021 в 09:36
0

Я никогда не упоминал метод цензуры и сам не использую пакет. Я просто читаю и интерпретирую информацию о пакете, размещенную в его файле readMe. Я думаю, вам нужно более внимательно изучить эту информацию и, возможно, посмотреть пример в репозитории github. Имхо все очень понятно описано.

GrahamD
10 августа 2021 в 09:42
0

Я думаю, что ваша проблема сейчас в том, как вы обрабатываете переменную 'content'. Думаю, цензор сработал. Вы можете проверить это, напечатав переменную на консоли после запуска метода или проверив ее значение с помощью отладчика.

han da
10 августа 2021 в 10:39
0

это работает. просто нужно было добавить некоторые условия if, else для некоторых слов. спасибо!

GrahamD
10 августа 2021 в 18:35
0

Отлично, рад, что помог.