mirror of
https://github.com/DefinedNet/mobile_nebula.git
synced 2025-01-30 00:47:04 +00:00
Clean up enrollment screen (#234)
## Android Blank form: |Before|After| |--|--| |<img width="395" alt="image" src="https://github.com/user-attachments/assets/5c8a8e26-d030-4b14-b91a-9cbf5e1b2e50" />|<img width="393" alt="Android Studio 2025-01-24 11 34 32" src="https://github.com/user-attachments/assets/408c8003-9bc0-4e09-af58-44f5728dcb59" />| Text entered: |Before|After| |--|--| |<img width="397" alt="Arc 2025-01-24 11 47 19" src="https://github.com/user-attachments/assets/d5e8bc70-1786-488c-aa1c-c45ddf9a92de" />|<img width="393" alt="image" src="https://github.com/user-attachments/assets/5765e9c3-cf50-4913-b4d1-78780918f35d" />| Submitted empty: |Before|After| |--|--| |<img width="395" alt="image" src="https://github.com/user-attachments/assets/37b8b9c8-760f-479e-b39f-3502367567ec" />|<img width="397" alt="Android Studio 2025-01-24 11 34 47" src="https://github.com/user-attachments/assets/c381725e-f449-43de-961f-768205b60028" />| Submitted invalid: |Before|After| |--|--| |<img width="388" alt="image" src="https://github.com/user-attachments/assets/3a3859e1-eff7-4111-9dd0-15edbd3bb998" />|<img width="389" alt="image" src="https://github.com/user-attachments/assets/1ab811df-e3ff-4a1f-9d3d-a2869cbc1877" />| Unchanged: <img width="388" alt="image" src="https://github.com/user-attachments/assets/f2719677-a73f-435d-b3c6-a0a4fd64759b" /> ## iOS Blank form: |Before|After| |--|--| |<img width="454" alt="image" src="https://github.com/user-attachments/assets/9afed9d1-c63b-4fcf-80a8-c2a9d2c18e76" />|<img width="454" alt="image" src="https://github.com/user-attachments/assets/c185b7f1-a2b3-4e9b-a49f-fb9790214c3a" />| Text entered: |Before|After| |--|--| |<img width="452" alt="image" src="https://github.com/user-attachments/assets/d3be265d-9076-4a19-865b-413dfad79ed4" />|<img width="466" alt="image" src="https://github.com/user-attachments/assets/c23e99eb-1001-4f80-b88f-62ffa8c8f7dd" />| Submitted empty: (note it says invalid before) |Before|After| |--|--| |<img width="463" alt="image" src="https://github.com/user-attachments/assets/e26c0642-e6cc-4e97-885d-b0309e58ace6" />|<img width="455" alt="image" src="https://github.com/user-attachments/assets/95b8f975-41b5-48a0-b75a-9cb6a9acc50e" />| Submitted invalid: |Before|After| |--|--| |<img width="484" alt="image" src="https://github.com/user-attachments/assets/1daf3c2e-5fbb-477c-b0c7-66689170d97a" />|<img width="463" alt="image" src="https://github.com/user-attachments/assets/8bef248f-a607-4373-9e9e-6ff08f402b4a" />|
This commit is contained in:
parent
382e2bbbf7
commit
21d8265f42
1 changed files with 56 additions and 22 deletions
|
@ -1,4 +1,5 @@
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:flutter/gestures.dart';
|
import 'package:flutter/gestures.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
@ -6,8 +7,12 @@ import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_platform_widgets/flutter_platform_widgets.dart';
|
import 'package:flutter_platform_widgets/flutter_platform_widgets.dart';
|
||||||
|
|
||||||
import 'package:mobile_nebula/components/SimplePage.dart';
|
import 'package:mobile_nebula/components/SimplePage.dart';
|
||||||
|
import 'package:mobile_nebula/components/buttons/PrimaryButton.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
|
||||||
|
import '../components/config/ConfigItem.dart';
|
||||||
|
import '../components/config/ConfigSection.dart';
|
||||||
|
|
||||||
class EnrollmentScreen extends StatefulWidget {
|
class EnrollmentScreen extends StatefulWidget {
|
||||||
final String? code;
|
final String? code;
|
||||||
final StreamController? stream;
|
final StreamController? stream;
|
||||||
|
@ -105,7 +110,7 @@ class _EnrollmentScreenState extends State<EnrollmentScreen> {
|
||||||
Padding(
|
Padding(
|
||||||
child: SelectableText(
|
child: SelectableText(
|
||||||
'There was an issue while attempting to enroll this device. Contact your administrator to obtain a new enrollment code.'),
|
'There was an issue while attempting to enroll this device. Contact your administrator to obtain a new enrollment code.'),
|
||||||
padding: EdgeInsets.symmetric(vertical: 20)),
|
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 20)),
|
||||||
Padding(
|
Padding(
|
||||||
child: SelectableText.rich(TextSpan(children: [
|
child: SelectableText.rich(TextSpan(children: [
|
||||||
TextSpan(text: 'If the problem persists, please let us know at '),
|
TextSpan(text: 'If the problem persists, please let us know at '),
|
||||||
|
@ -121,9 +126,9 @@ class _EnrollmentScreenState extends State<EnrollmentScreen> {
|
||||||
),
|
),
|
||||||
TextSpan(text: ' and provide the following error:'),
|
TextSpan(text: ' and provide the following error:'),
|
||||||
])),
|
])),
|
||||||
padding: EdgeInsets.only(bottom: 10)),
|
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 10)),
|
||||||
Container(
|
Container(
|
||||||
child: Padding(child: SelectableText(this.error!), padding: EdgeInsets.all(10)),
|
child: Padding(child: SelectableText(this.error!), padding: EdgeInsets.all(16)),
|
||||||
color: Theme.of(context).colorScheme.errorContainer,
|
color: Theme.of(context).colorScheme.errorContainer,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
@ -151,30 +156,59 @@ class _EnrollmentScreenState extends State<EnrollmentScreen> {
|
||||||
]));
|
]));
|
||||||
}
|
}
|
||||||
|
|
||||||
return SimplePage(
|
return SimplePage(title: Text('Enroll with Managed Nebula'), child: child, alignment: alignment);
|
||||||
title: Text('Enroll with Managed Nebula', style: TextStyle(fontWeight: FontWeight.bold)),
|
|
||||||
child: Padding(child: child, padding: EdgeInsets.symmetric(horizontal: 10)),
|
|
||||||
alignment: alignment);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _codeEntry() {
|
Widget _codeEntry() {
|
||||||
|
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
|
||||||
|
|
||||||
|
String? validator(String? value) {
|
||||||
|
if (value == null || value.isEmpty) {
|
||||||
|
return 'Code or link is required';
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> onSubmit() async {
|
||||||
|
final bool isValid = _formKey.currentState?.validate() ?? false;
|
||||||
|
if (!isValid) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setState(() {
|
||||||
|
code = EnrollmentScreen.parseCode(enrollInput.text);
|
||||||
|
error = null;
|
||||||
|
_enroll();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
final input = Padding(
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 16),
|
||||||
|
child: PlatformTextFormField(
|
||||||
|
controller: enrollInput,
|
||||||
|
validator: validator,
|
||||||
|
hintText: 'from admin.defined.net',
|
||||||
|
cupertino: (_, __) => CupertinoTextFormFieldData(
|
||||||
|
prefix: Text("Code or link"),
|
||||||
|
),
|
||||||
|
material: (_, __) => MaterialTextFormFieldData(
|
||||||
|
decoration: const InputDecoration(labelText: 'Code or link'),
|
||||||
|
),
|
||||||
|
));
|
||||||
|
|
||||||
|
final form = Form(
|
||||||
|
key: _formKey,
|
||||||
|
child: Platform.isAndroid ? input : ConfigSection(children: [input]),
|
||||||
|
);
|
||||||
|
|
||||||
return Column(children: [
|
return Column(children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.only(top: 20),
|
padding: EdgeInsets.symmetric(vertical: 32),
|
||||||
child: PlatformTextField(
|
child: form,
|
||||||
hintText: 'defined.net enrollment code or link',
|
),
|
||||||
controller: enrollInput,
|
Padding(
|
||||||
)),
|
padding: EdgeInsets.symmetric(horizontal: 16),
|
||||||
PlatformTextButton(
|
child: Row(children: [Expanded(child: PrimaryButton(child: Text('Submit'), onPressed: onSubmit))]))
|
||||||
child: Text('Submit'),
|
|
||||||
onPressed: () {
|
|
||||||
setState(() {
|
|
||||||
code = EnrollmentScreen.parseCode(enrollInput.text);
|
|
||||||
error = null;
|
|
||||||
_enroll();
|
|
||||||
});
|
|
||||||
},
|
|
||||||
)
|
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue