| .. | .. |
|---|
| 18 | 18 | class _SettingsScreenState extends ConsumerState<SettingsScreen> { |
|---|
| 19 | 19 | final _formKey = GlobalKey<FormState>(); |
|---|
| 20 | 20 | late final TextEditingController _localHostController; |
|---|
| 21 | + late final TextEditingController _vpnHostController; |
|---|
| 21 | 22 | late final TextEditingController _remoteHostController; |
|---|
| 22 | 23 | late final TextEditingController _portController; |
|---|
| 23 | 24 | late final TextEditingController _macController; |
|---|
| .. | .. |
|---|
| 30 | 31 | final config = ref.read(serverConfigProvider); |
|---|
| 31 | 32 | _localHostController = |
|---|
| 32 | 33 | TextEditingController(text: config?.localHost ?? ''); |
|---|
| 34 | + _vpnHostController = |
|---|
| 35 | + TextEditingController(text: config?.vpnHost ?? ''); |
|---|
| 33 | 36 | _remoteHostController = |
|---|
| 34 | 37 | TextEditingController(text: config?.host ?? ''); |
|---|
| 35 | 38 | _portController = |
|---|
| .. | .. |
|---|
| 43 | 46 | @override |
|---|
| 44 | 47 | void dispose() { |
|---|
| 45 | 48 | _localHostController.dispose(); |
|---|
| 49 | + _vpnHostController.dispose(); |
|---|
| 46 | 50 | _remoteHostController.dispose(); |
|---|
| 47 | 51 | _portController.dispose(); |
|---|
| 48 | 52 | _macController.dispose(); |
|---|
| .. | .. |
|---|
| 59 | 63 | localHost: _localHostController.text.trim().isEmpty |
|---|
| 60 | 64 | ? null |
|---|
| 61 | 65 | : _localHostController.text.trim(), |
|---|
| 66 | + vpnHost: _vpnHostController.text.trim().isEmpty |
|---|
| 67 | + ? null |
|---|
| 68 | + : _vpnHostController.text.trim(), |
|---|
| 62 | 69 | macAddress: _macController.text.trim().isEmpty |
|---|
| 63 | 70 | ? null |
|---|
| 64 | 71 | : _macController.text.trim(), |
|---|
| .. | .. |
|---|
| 153 | 160 | ), |
|---|
| 154 | 161 | const SizedBox(height: 16), |
|---|
| 155 | 162 | |
|---|
| 163 | + // VPN address |
|---|
| 164 | + Text('VPN Address', |
|---|
| 165 | + style: Theme.of(context).textTheme.bodyMedium), |
|---|
| 166 | + const SizedBox(height: 4), |
|---|
| 167 | + TextFormField( |
|---|
| 168 | + controller: _vpnHostController, |
|---|
| 169 | + decoration: const InputDecoration( |
|---|
| 170 | + hintText: '10.8.0.1 (OpenVPN static IP)', |
|---|
| 171 | + ), |
|---|
| 172 | + keyboardType: TextInputType.url, |
|---|
| 173 | + ), |
|---|
| 174 | + const SizedBox(height: 16), |
|---|
| 175 | + |
|---|
| 156 | 176 | // Remote address |
|---|
| 157 | 177 | Text('Remote Address', |
|---|
| 158 | 178 | style: Theme.of(context).textTheme.bodyMedium), |
|---|