fluffychat/lib/pangea/choreographer/it/word_data_card.dart
2025-12-04 16:36:04 -05:00

68 lines
2.1 KiB
Dart

import 'package:flutter/material.dart';
import 'package:async/async.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pangea/bot/utils/bot_style.dart';
import 'package:fluffychat/pangea/choreographer/it/contextual_definition_repo.dart';
import 'package:fluffychat/pangea/choreographer/it/contextual_definition_request_model.dart';
import 'package:fluffychat/pangea/common/widgets/content_loading_indicator.dart';
import 'package:fluffychat/pangea/languages/language_constants.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/matrix.dart';
class WordDataCard extends StatelessWidget {
final String word;
final String fullText;
final String langCode;
const WordDataCard({
super.key,
required this.word,
required this.fullText,
required this.langCode,
});
ContextualDefinitionRequestModel get _request =>
ContextualDefinitionRequestModel(
fullText: fullText,
word: word,
fullTextLang: langCode,
wordLang: langCode,
feedbackLang: MatrixState.pangeaController.userController.userL1Code ??
LanguageKeys.defaultLanguage,
);
Future<Result<String>> _fetchDefinition() {
return ContextualDefinitionRepo.get(
MatrixState.pangeaController.userController.accessToken,
_request,
).timeout(
const Duration(seconds: 10),
onTimeout: () => Result.error("Timeout getting definition"),
);
}
@override
Widget build(BuildContext context) {
return Center(
child: FutureBuilder<Result<String>>(
future: _fetchDefinition(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return const ContentLoadingIndicator();
}
final result = snapshot.data!;
if (result.isError) {
return Text(
L10n.of(context).sorryNoResults,
style: BotStyle.text(context),
textAlign: TextAlign.center,
);
}
return Text(result.result!, style: BotStyle.text(context));
},
),
);
}
}