Implementation
Column settingsColumn(
TextEditingController pathController,
TextEditingController userController,
context,
item,
Function(String, {bool loading}) statusMsg,
String ip,
String portsTcp,
String portsTcp6,
String portsUdp,
String portsUdp6,
bool isSyncing,
Function setState) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.only(bottom: 8.0),
child: Text('save-text'.i18n()),
),
Tooltip(
message: 'startdirectorypath-text'.i18n(),
child: TextBox(
controller: pathController,
placeholder: '/home/user/project',
),
),
Padding(
padding: const EdgeInsets.only(bottom: 8.0, top: 8.0),
child: Text('startuser-text'.i18n()),
),
Tooltip(
message: 'wsldefaultuser-text'.i18n(),
child: TextBox(
controller: userController,
placeholder: 'root',
),
),
Padding(
padding: const EdgeInsets.only(bottom: 8.0, top: 8.0),
child: Text('emptyfieldsfordefault-text'.i18n()),
),
const SizedBox(
height: 8.0,
),
SizedBox(
width: MediaQuery.of(context).size.width,
child: Builder(builder: (childcontext) {
List<MenuFlyoutItem> actions = [];
List<String>? quickSettingsTitles =
prefs.getStringList("quickSettingsTitles");
List<String>? quickSettingsContents =
prefs.getStringList("quickSettingsContents");
if (quickSettingsContents != null && quickSettingsTitles != null) {
for (int i = 0; i < quickSettingsTitles.length; i++) {
actions.add(MenuFlyoutItem(
leading: const MouseRegion(
cursor: SystemMouseCursors.click,
child: Padding(
padding: EdgeInsets.all(8.0),
child: Icon(FluentIcons.play),
),
),
onPressed: () async {
plausible.event(page: 'use_action');
setState(() {
cmds = '';
});
await Future.delayed(const Duration(milliseconds: 500));
// Add new
setState(() {
cmds = quickSettingsContents[i];
});
},
text: MouseRegion(
cursor: SystemMouseCursors.click,
child: Text(quickSettingsTitles[i])),
));
}
}
return actions.isNotEmpty
? MouseRegion(
cursor: SystemMouseCursors.click,
child: DropDownButton(
buttonStyle: ButtonStyle(
padding: ButtonState.all(const EdgeInsets.only(
left: 15.0, right: 15.0, top: 10.0, bottom: 10.0))),
leading: const Icon(FluentIcons.code),
title: Text('runquickaction-text'.i18n()),
items: actions,
),
)
: const SizedBox();
}),
),
const SizedBox(
height: 12.0,
),
cmds.isNotEmpty
? Padding(
padding: const EdgeInsets.only(bottom: 8.0),
child: Console(
item: item,
cmds: cmds,
afterInit: () {
cmds = '';
},
),
)
: Container(),
Container(
width: MediaQuery.of(context).size.width,
color: themeData.activeColor.withOpacity(0.1),
child: Padding(
padding: const EdgeInsets.all(4.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SelectableText('eth0 IPv4: ${ip.replaceAll('\n', ' ')}'),
SelectableText('TCP ${'ports-text'.i18n()}: $portsTcp'),
SelectableText('TCP6 ${'ports-text'.i18n()}: $portsTcp6'),
SelectableText('UDP ${'ports-text'.i18n()}: $portsUdp'),
SelectableText('UDP6 ${'ports-text'.i18n()}: $portsUdp6'),
],
),
),
),
const SizedBox(
height: 12.0,
),
Sync().hasPath(item)
? MouseRegion(
cursor: SystemMouseCursors.click,
child: Tooltip(
message: 'upload-text'.i18n(),
child: Button(
style: ButtonStyle(
padding: ButtonState.all(const EdgeInsets.only(
left: 15.0, right: 15.0, top: 10.0, bottom: 10.0))),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text('startstopserving-text'.i18n()),
const Icon(FluentIcons.upload),
]),
onPressed: () {
plausible.event(name: "network_uploaded");
Sync sync = Sync.instance(item, statusMsg);
if (!isSyncing) {
isSyncing = true;
sync.startServer();
statusMsg('startedserving-text'.i18n([item]));
} else {
isSyncing = false;
sync.stopServer();
statusMsg('stoppedserving-text'.i18n([item]));
}
},
),
),
)
: Container(),
const SizedBox(height: 8.0),
Sync().hasPath(item)
? MouseRegion(
cursor: SystemMouseCursors.click,
child: Tooltip(
message: 'download-text'.i18n(),
child: Button(
style: ButtonStyle(
padding: ButtonState.all(const EdgeInsets.only(
left: 15.0, right: 15.0, top: 10.0, bottom: 10.0))),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text('downloadoverride-text'.i18n()),
const Icon(FluentIcons.download),
]),
onPressed: () {
plausible.event(name: "network_downloaded");
syncDialog(context, item, statusMsg);
},
),
),
)
: Container(),
],
);
}