Alou!
Na aula 4 do último módulo são criadas funções de boas maneiras. O jeito que o professor criou ficou bem verboso, então fiz a refatoração a seguir:
bool isThisManners() {
List<String> manners = ['oi', 'olá', 'obrigado', 'obrigada', 'bom', 'boa', 'tarde', 'noite', 'dia', 'de nada'];
manners.forEach((element) {
if (question.toLowerCase().contains(element)){
isThisGoodManners = true;
}
});
return isThisGoodManners;
}
Foi criada uma lista com os elementos e a lista foi percorrida com um forEach (há um tópico com uma solução igual de outro aluno). No laço, o elemento é jogado em lower case para diminuir a quantidade de itens da lista. Só que tem um pequeno problema... Na classe TimeQuestions há uma parte que verifica se o código possui alguma das palavras que também estão na classe GoodManners, então isso acaba atrapalhando na lógica de resposta do bot. Por exemplo, quando falamos "bom dia", ele diz que não entende e pergunta se queremos saber qual dia é hoje, então refatorei dessa forma a função isThisTime da classe TimeQuestions:
bool isThisTime() {
//verificar se estamos numa pergunta sobre Tempo
if (question.toLowerCase().contains('que') && question.toLowerCase().contains('horas')) {
isThisATimeQuestion = true;
print('Horas ' + question);
}
else if (question.toLowerCase().contains('qual') && question.toLowerCase().contains('dia')){
isThisATimeQuestion = true;
print('Dia atual ' + question);
}
else if ((question.toLowerCase().contains('qual') && question.toLowerCase().contains('ano'))
|| (question.toLowerCase().contains('que') && question.toLowerCase().contains('ano'))) {
isThisATimeQuestion = true;
print('Ano atual ' + question);
}
return isThisATimeQuestion;
}
Claro que ainda dá para melhorar, mas é só um exemplo.