Implementation
Widget settingsList(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
settingsWidget(context,
title: 'defaultdistrolocation-text'.i18n(),
name: 'Default Distro Location',
tooltip: 'distropath-text'.i18n(),
suffix: IconButton(
icon: const Icon(FluentIcons.open_folder_horizontal, size: 15.0),
onPressed: () async {
String? path = await FilePicker.platform.getDirectoryPath(
initialDirectory: prefs.getString("DistroPath") ?? defaultPath,
);
if (path != null &&
_settings['Default Distro Location'] != null) {
_settings['Default Distro Location']!.text = path;
} else {
// User canceled the picker
}
},
),
placeholder: prefs.getString("DistroPath") ?? defaultPath),
Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Expander(
header: Text('showdockershort-text'.i18n(),
style: const TextStyle(fontWeight: FontWeight.w500)),
content: Padding(
padding: const EdgeInsets.only(bottom: 8.0, top: 4.0),
child: Row(
children: [
Tooltip(
message: 'showdockershort-text'.i18n(),
child: ToggleSwitch(
checked: showDocker,
onChanged: (value) {
setState(() {
showDocker = value;
prefs.setBool('showDocker', value);
});
},
)),
const SizedBox(
width: 10.0,
),
Text('showdockerlong-text'.i18n()),
],
),
),
),
),
]),
Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Expander(
header: Text('language-text'.i18n(),
style: const TextStyle(fontWeight: FontWeight.w500)),
content: Padding(
padding: const EdgeInsets.only(bottom: 8.0, top: 4.0),
child: Tooltip(
message: 'language-text'.i18n(),
// Menu
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'languagechange-text'.i18n(),
),
const SizedBox(
height: 20.0,
),
Builder(
builder: (context) {
var lang =
Localizations.localeOf(context).languageCode;
var selectedLanguage =
prefs.getString('language') ?? lang;
// Language menu
return ComboBox<String>(
value: selectedLanguage,
items: supportedLocalesList
.map((e) => ComboBoxItem(
value: e.languageCode,
child: Text(e.toString())))
.toList(),
onChanged: (language) {
String curLanguage = language ?? lang;
prefs.setString('language', curLanguage);
setState(() {
selectedLanguage = curLanguage;
});
});
},
),
],
)),
),
),
),
// Padding(
// padding: const EdgeInsets.all(8.0),
// child: Expander(
// header: Text('dockerrepo-text'.i18n(),
// style: const TextStyle(fontWeight: FontWeight.w500)),
// content: Padding(
// padding: const EdgeInsets.only(bottom: 8.0, top: 4.0),
// child: Tooltip(
// message: 'dockerrepo-text'.i18n(),
// child: TextBox(
// controller: _dockerrepoController,
// placeholder: 'https://registry-1.docker.io',
// ),
// ),
// ),
// ),
// ),
Padding(
padding: const EdgeInsets.all(8.0),
child: Expander(
header: Text('syncipaddress-text'.i18n(),
style: const TextStyle(fontWeight: FontWeight.w500)),
content: Padding(
padding: const EdgeInsets.only(bottom: 8.0, top: 4.0),
child: Tooltip(
message: 'syncipaddress-text'.i18n(),
child: TextBox(
controller: _syncIpTextController,
placeholder: '192.168.1.20',
),
),
),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Expander(
header: Text('repofordistro-text'.i18n(),
style: const TextStyle(fontWeight: FontWeight.w500)),
content: Padding(
padding: const EdgeInsets.only(bottom: 8.0, top: 4.0),
child: Tooltip(
message: 'repofordistro-text'.i18n(),
child: TextBox(
controller: _repoTextController,
placeholder: defaultRepoLink,
),
),
),
),
),
]),
const Padding(
padding: EdgeInsets.only(top: 8.0, bottom: 8.0),
child: Divider(),
),
Center(
child: Text("globalconfiguration-text".i18n()),
),
Padding(
padding: const EdgeInsets.all(10.0),
child: Text(
'globalconfigurationinfo-text'.i18n(),
style: const TextStyle(fontSize: 12.0, fontStyle: FontStyle.italic),
),
),
settingsWidget(context,
title: 'kernel',
tooltip: 'absolutewindowspath-text'.i18n(),
placeholder: ''),
settingsWidget(context,
title: 'memory',
tooltip: 'memoryinfo-text'.i18n(),
type: SettingsType.size,
sizePostfix: 'GB',
sizeMin: 1,
sizeMax:
(SysInfo.getTotalPhysicalMemory() ~/ 1024 ~/ 1024 ~/ 1024) + 1,
placeholder: ''),
settingsWidget(context,
title: 'processors',
tooltip: 'processorinfo-text'.i18n(),
type: SettingsType.size,
sizeMin: 1,
sizeMax: SysInfo.cores.length,
placeholder: ''),
settingsWidget(context,
title: 'localhostForwarding',
tooltip: 'wildcardinfo-text'.i18n(),
type: SettingsType.bool),
settingsWidget(context,
title: 'kernelCommandLine',
tooltip: 'kernelcmdinfo-text'.i18n(),
placeholder: ''),
settingsWidget(context,
title: 'swap', tooltip: 'swapinfo-text'.i18n(), placeholder: ''),
settingsWidget(context,
title: 'swapFile', tooltip: 'vhdinfo-text'.i18n(), placeholder: ''),
settingsWidget(context,
title: 'pageReporting',
tooltip: 'unusedmemoryinfo-text'.i18n(),
type: SettingsType.bool),
settingsWidget(context,
title: 'guiApplications',
tooltip: 'guiinfo-text'.i18n(),
type: SettingsType.bool),
settingsWidget(context,
title: 'debugConsole',
tooltip: 'consoleinfo-text'.i18n(),
type: SettingsType.bool),
settingsWidget(context,
title: 'nestedVirtualization',
tooltip: 'nestedvirtinfo-text'.i18n(),
type: SettingsType.bool),
settingsWidget(context,
title: 'vmIdleTimeout',
tooltip: 'vmidleinfo-text'.i18n(),
placeholder: ''),
],
);
}