You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
fluffychat/lib/pangea/learning_settings/pages/settings_learning.dart

157 lines
5.0 KiB
Dart

import 'package:flutter/material.dart';
import 'package:country_picker/country_picker.dart';
import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart';
import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart';
import 'package:fluffychat/pangea/learning_settings/models/language_model.dart';
import 'package:fluffychat/pangea/learning_settings/pages/settings_learning_view.dart';
import 'package:fluffychat/pangea/learning_settings/utils/language_list_util.dart';
import 'package:fluffychat/pangea/spaces/models/space_model.dart';
import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart';
import 'package:fluffychat/pangea/user/models/user_model.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/matrix.dart';
class SettingsLearning extends StatefulWidget {
const SettingsLearning({super.key});
@override
SettingsLearningController createState() => SettingsLearningController();
}
class SettingsLearningController extends State<SettingsLearning> {
PangeaController pangeaController = MatrixState.pangeaController;
late Profile _profile;
final tts = TtsController();
final GlobalKey<FormState> formKey = GlobalKey<FormState>();
@override
void initState() {
super.initState();
_profile = pangeaController.userController.profile.copy();
tts.setupTTS().then((_) => setState(() {}));
}
@override
void dispose() {
tts.dispose();
super.dispose();
}
Future<void> submit() async {
if (formKey.currentState!.validate()) {
await showFutureLoadingDialog(
context: context,
future: () async => pangeaController.userController.updateProfile(
(_) => _profile,
waitForDataInSync: true,
),
);
Navigator.of(context).pop();
}
}
Future<void> setSelectedLanguage({
LanguageModel? sourceLanguage,
LanguageModel? targetLanguage,
}) async {
if (sourceLanguage != null) {
_profile.userSettings.sourceLanguage = sourceLanguage.langCode;
}
if (targetLanguage != null) {
_profile.userSettings.targetLanguage = targetLanguage.langCode;
}
if (mounted) setState(() {});
}
void setPublicProfile(bool isPublic) {
_profile.userSettings.publicProfile = isPublic;
if (mounted) setState(() {});
}
void setCefrLevel(LanguageLevelTypeEnum? cefrLevel) {
_profile.userSettings.cefrLevel = cefrLevel ?? LanguageLevelTypeEnum.a1;
if (mounted) setState(() {});
}
void changeCountry(Country? country) {
_profile.userSettings.country = country?.name;
if (mounted) setState(() {});
}
void updateToolSetting(ToolSetting toolSetting, bool value) {
switch (toolSetting) {
case ToolSetting.interactiveTranslator:
_profile.toolSettings.interactiveTranslator = value;
break;
case ToolSetting.interactiveGrammar:
_profile.toolSettings.interactiveGrammar = value;
break;
case ToolSetting.immersionMode:
_profile.toolSettings.immersionMode = value;
break;
case ToolSetting.definitions:
_profile.toolSettings.definitions = value;
break;
case ToolSetting.autoIGC:
_profile.toolSettings.autoIGC = value;
break;
case ToolSetting.enableTTS:
_profile.toolSettings.enableTTS = value;
break;
}
if (mounted) setState(() {});
}
bool getToolSetting(ToolSetting toolSetting) {
final toolSettings = _profile.toolSettings;
switch (toolSetting) {
case ToolSetting.interactiveTranslator:
return toolSettings.interactiveTranslator;
case ToolSetting.interactiveGrammar:
return toolSettings.interactiveGrammar;
case ToolSetting.immersionMode:
return toolSettings.immersionMode;
case ToolSetting.definitions:
return toolSettings.definitions;
case ToolSetting.autoIGC:
return toolSettings.autoIGC;
case ToolSetting.enableTTS:
return toolSettings.enableTTS;
}
}
LanguageModel? get selectedSourceLanguage {
return userL1 ?? pangeaController.languageController.systemLanguage;
}
LanguageModel? get selectedTargetLanguage {
return userL2 ??
((selectedSourceLanguage?.langCode != 'en')
? PangeaLanguage.byLangCode('en')!
: PangeaLanguage.byLangCode('es')!);
}
LanguageModel? get userL1 => _profile.userSettings.sourceLanguage != null
? PangeaLanguage.byLangCode(_profile.userSettings.sourceLanguage!)
: null;
LanguageModel? get userL2 => _profile.userSettings.targetLanguage != null
? PangeaLanguage.byLangCode(_profile.userSettings.targetLanguage!)
: null;
bool get publicProfile => _profile.userSettings.publicProfile;
LanguageLevelTypeEnum get cefrLevel => _profile.userSettings.cefrLevel;
Country? get country =>
CountryService().findByName(_profile.userSettings.country);
@override
Widget build(BuildContext context) {
return SettingsLearningView(this);
}
}