#256 finalize translation service

This commit is contained in:
zjs81 2026-04-02 22:52:52 -07:00
parent 96d222a580
commit ba6d751346
3 changed files with 32 additions and 9 deletions

View file

@ -1387,7 +1387,7 @@ class _TranslationLanguageDialogContent extends StatefulWidget {
});
final String? currentLanguageCode;
final ValueChanged<String> onLanguageSelected;
final ValueChanged<String?> onLanguageSelected;
@override
State<_TranslationLanguageDialogContent> createState() =>
@ -1438,17 +1438,20 @@ class _TranslationLanguageDialogContentState
),
const SizedBox(height: 12),
Flexible(
child: RadioGroup<String>(
child: RadioGroup<String?>(
groupValue: widget.currentLanguageCode,
onChanged: (value) {
if (value == null) return;
widget.onLanguageSelected(value);
},
child: ListView(
shrinkWrap: true,
children: [
RadioListTile<String?>(
value: null,
title: Text(context.l10n.translation_useAppLanguage),
),
for (final option in _filtered)
RadioListTile<String>(
RadioListTile<String?>(
value: option.code,
title: Text(option.label),
subtitle: Text(option.code.toUpperCase()),

View file

@ -77,7 +77,10 @@ class TranslationService extends ChangeNotifier {
}
String? resolvedIncomingLanguageCode(String? fallbackLanguageCode) {
return _settings.languageOverride ?? fallbackLanguageCode ?? 'en';
return _settings.translationTargetLanguageCode ??
_settings.languageOverride ??
fallbackLanguageCode ??
'en';
}
bool shouldTranslateIncoming({

View file

@ -36,7 +36,7 @@ Future<void> showMessageTranslationSheet({
required bool enabled,
required String? selectedLanguageCode,
required ValueChanged<bool> onEnabledChanged,
required ValueChanged<String> onLanguageSelected,
required ValueChanged<String?> onLanguageSelected,
}) {
return showModalBottomSheet<void>(
context: context,
@ -54,7 +54,7 @@ class _MessageTranslationSheet extends StatefulWidget {
final bool enabled;
final String? selectedLanguageCode;
final ValueChanged<bool> onEnabledChanged;
final ValueChanged<String> onLanguageSelected;
final ValueChanged<String?> onLanguageSelected;
const _MessageTranslationSheet({
required this.enabled,
@ -145,9 +145,26 @@ class _MessageTranslationSheetState extends State<_MessageTranslationSheet> {
Flexible(
child: ListView.builder(
shrinkWrap: true,
itemCount: _filtered.length,
itemCount: _filtered.length + 1,
itemBuilder: (context, index) {
final option = _filtered[index];
if (index == 0) {
final selected = _localSelectedLanguageCode == null;
return ListTile(
contentPadding: EdgeInsets.zero,
leading: Icon(
selected
? Icons.radio_button_checked
: Icons.radio_button_unchecked,
),
title: Text(context.l10n.translation_useAppLanguage),
onTap: () {
setState(() => _localSelectedLanguageCode = null);
widget.onLanguageSelected(null);
Navigator.pop(context);
},
);
}
final option = _filtered[index - 1];
final selected = option.code == _localSelectedLanguageCode;
return ListTile(
contentPadding: EdgeInsets.zero,