settingsColumn function Null safety

Column settingsColumn(
  1. TextEditingController pathController,
  2. TextEditingController userController,
  3. dynamic context,
  4. dynamic item,
  5. dynamic statusMsg(
    1. String,
    2. {bool loading}
    ),
  6. String ip,
  7. String portsTcp,
  8. String portsTcp6,
  9. String portsUdp,
  10. String portsUdp6,
  11. bool isSyncing,
  12. Function setState
)

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(),
    ],
  );
}