This commit is contained in:
erfan
2021-01-06 11:57:21 +03:30
parent 20cc775bc1
commit 2c045f43f1
12 changed files with 302 additions and 119 deletions
+2 -4
View File
@@ -20,7 +20,6 @@ class _ForgetPassScreenState extends State<ForgetPassScreen> {
bool _isLoading = false;
final cellNumberController = TextEditingController();
@override
void initState() {
cellNumberController.text = '';
@@ -59,7 +58,7 @@ class _ForgetPassScreenState extends State<ForgetPassScreen> {
_isLoading = true;
});
// try {
await Provider.of<Auth>(context)
await Provider.of<Auth>(context, listen: false)
.requestCode(
cellNumberController.text,
)
@@ -72,7 +71,7 @@ class _ForgetPassScreenState extends State<ForgetPassScreen> {
_isLoading = false;
},
);
} else{
} else {
// _showDialog('User or password incorrect!');
Navigator.of(context).popAndPushNamed(Routes.sendCodeScreen);
// setState(
@@ -153,7 +152,6 @@ class _ForgetPassScreenState extends State<ForgetPassScreen> {
),
keyboardType: TextInputType.phone,
textInputAction: TextInputAction.next,
onSaved: (value) {
cellNumberController.text = value;
},
+229 -29
View File
@@ -1,7 +1,10 @@
import 'package:barcode_scan/platform_wrapper.dart';
import 'package:double_back_to_close_app/double_back_to_close_app.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_phoenix/flutter_phoenix.dart';
import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart';
import './my_info_screen.dart';
import '../providers/auth.dart';
@@ -19,7 +22,8 @@ class HomePage extends StatelessWidget {
// static const route = '/HomeScreen';
@override
Widget build(BuildContext context) {
final userData = Provider.of<Auth>(context,listen: false).user;
final userData = Provider.of<Auth>(context, listen: false).user;
// print(userData['roles']);
return Scaffold(
resizeToAvoidBottomPadding: false,
@@ -53,7 +57,7 @@ class HomePage extends StatelessWidget {
child: Text('Yes'),
onPressed: () {
Navigator.of(ctx).pop();
Provider.of<Auth>(context).logout();
Provider.of<Auth>(context, listen: false).logout();
Phoenix.rebirth(context);
},
),
@@ -106,35 +110,75 @@ class HomePage extends StatelessWidget {
endColor: Color(0xFFFFECD2),
firstLine: 'My INFO',
secondLine: 'List, Details & Add a one',
onTap: Consumer<Auth>(
builder: (ctx, auth, _) {
return MyInfoScreen();
},
onTap: () => Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return Consumer<Auth>(
builder: (ctx, auth, _) {
return MyInfoScreen();
},
);
},
),
),
),
SelectionItem(
startColor: Color(0xFFD5F5FD),
endColor: Color(0xFFE9FFF7),
firstLine: 'TEST RESULTS',
secondLine: 'List, Details & Add a one',
onTap: TestResultScreen()
// MyTestResult(
// isAdmin: false,
// ),
startColor: Color(0xFFD5F5FD),
endColor: Color(0xFFE9FFF7),
firstLine: 'TEST RESULTS',
secondLine: 'List, Details & Add a one',
onTap: () => Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return Consumer<Auth>(
builder: (ctx, auth, _) {
return TestResultScreen();
},
);
},
),
),
// MyTestResult(
// isAdmin: false,
// ),
),
SelectionItem(
startColor: Color(0xFFE2D2C4),
endColor: Color(0xFFFAF7F5),
firstLine: 'LABELS',
secondLine: 'List, Details & Add a one',
onTap: LabelResultScreen(),
onTap: () => Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return Consumer<Auth>(
builder: (ctx, auth, _) {
return LabelResultScreen();
},
);
},
),
),
),
SelectionItem(
startColor: Color(0xFFA7CCE1),
endColor: Color(0xFFECF7ED),
firstLine: 'CYCLES',
secondLine: 'List, Details & Add a one',
onTap: CycleResultScreen(),
onTap: () => Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return Consumer<Auth>(
builder: (ctx, auth, _) {
return CycleResultScreen();
},
);
},
),
),
),
// SelectionItem(
// startColor: Color(0xFFA7CCE1),
@@ -149,9 +193,21 @@ class HomePage extends StatelessWidget {
startColor: Color(0xFFA7CCE1),
endColor: Color(0xFFECF7ED),
firstLine: 'TEST TO VERIFY',
secondLine: 'List, Details & Add a one',
onTap: TestVerifyScreen(),
secondLine: 'Verify and reject Test Results',
onTap: () => Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return Consumer<Auth>(
builder: (ctx, auth, _) {
return TestVerifyScreen();
},
);
},
),
),
),
BarcodeSelectionItem(),
],
),
),
@@ -163,12 +219,33 @@ class HomePage extends StatelessWidget {
}
}
Future<String> scan() async {
try {
var barcode = await BarcodeScanner.scan();
if (barcode.type.name == 'Cancelled') {
return 'cancel';
} else if (barcode.type.name == 'Failed') {
return 'error';
}
try {
var id = barcode.rawContent;
return id;
} catch (_) {
return 'null';
}
} on PlatformException catch (_) {
return 'access';
} catch (_) {
return 'error';
}
}
class SelectionItem extends StatelessWidget {
final Color startColor;
final Color endColor;
final String firstLine;
final String secondLine;
final Widget onTap;
final Function onTap;
SelectionItem(
{this.startColor,
@@ -196,16 +273,7 @@ class SelectionItem extends StatelessWidget {
),
child: InkWell(
splashColor: Colors.red,
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return onTap;
},
),
);
},
onTap: onTap,
child: ListTile(
title: Column(
crossAxisAlignment: CrossAxisAlignment.start,
@@ -258,3 +326,135 @@ class SelectionItem extends StatelessWidget {
);
}
}
class BarcodeSelectionItem extends StatelessWidget {
@override
Widget build(BuildContext context) {
final _media = MediaQuery.of(context);
// final double _pixelRatio = (_media.size.height / _media.size.width * 7 / 5);
final double _devicewidth = _media.size.width;
final double _deviceBlockSize = _devicewidth / 100;
return Container(
margin: EdgeInsets.symmetric(vertical: 10),
padding: EdgeInsets.symmetric(vertical: 5),
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [Colors.black, Colors.black87],
),
borderRadius: BorderRadius.all(
Radius.circular(3),
),
),
child: InkWell(
splashColor: Colors.red,
onTap: () => scan().then(
(String result) {
if (result == 'cancel') {
print('cancel');
} else if (result == 'error') {
print('error');
} else if (result == 'access') {
print('access');
} else {
print(result);
showDialog(
context: context,
child: AlertDialog(
title: Text(
'نتیجه ی اسکن',
textDirection: TextDirection.rtl,
textAlign: TextAlign.right,
style: TextStyle(
fontSize: 2.75 * _deviceBlockSize,
),
),
content: Text(
result,
textDirection: TextDirection.rtl,
style: TextStyle(
fontSize: 4 * _deviceBlockSize,
),
),
actions: <Widget>[
FlatButton(
onPressed: () async {
await launch(result);
Navigator.of(context).pop();
},
child: Text(
'بازکردن در مرورگر',
style: TextStyle(
fontFamily: 'montserrat',
),
),
)
],
),
);
}
},
),
child: ListTile(
title: Row(
children: [
Icon(
Icons.qr_code_scanner,
color: Colors.white,
size: 8 * _deviceBlockSize,
),
SizedBox(
width: 2 * _deviceBlockSize,
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Text(
'SCANNER',
style: TextStyle(
color: Colors.white,
fontSize: 5 * _deviceBlockSize,
letterSpacing: 3.5,
),
),
Text(
'Scan a Bar or QR code',
style: TextStyle(
color: Colors.white,
fontSize: 3.5 * _deviceBlockSize,
),
),
],
)
],
),
trailing: Icon(
Icons.arrow_forward_ios,
color: Colors.white,
),
),
// Column(
// children: <Widget>[
// ListTile(
// title: Text(
// firstLine,
// textAlign: TextAlign.start,
// style: TextStyle(color: Colors.black),
// ),
// ),
// ListTile(
// title: Text(
// secondLine,
// style: TextStyle(color: Colors.black, fontSize: 20),
// ),
// trailing: Icon(
// Icons.arrow_forward_ios,
// color: Colors.black,
// ),
// ),
// ],
// ),
),
);
}
}
+1 -1
View File
@@ -64,7 +64,7 @@ class _LoginScreenState extends State<LoginScreen> {
_isLoading = true;
});
// try {
await Provider.of<Auth>(context)
await Provider.of<Auth>(context, listen: false)
.login(
map['cellNumber'],
map['password'],
+5 -4
View File
@@ -37,7 +37,7 @@ class _RePassScreenState extends State<RePassScreen> {
super.didChangeDependencies();
}
Future<void> _showDialog(String message) async{
Future<void> _showDialog(String message) async {
await showDialog(
context: context,
builder: (ctx) => AlertDialog(
@@ -62,11 +62,12 @@ class _RePassScreenState extends State<RePassScreen> {
setState(() {
_isLoading = true;
});
await Provider.of<Auth>(context)
await Provider.of<Auth>(context, listen: false)
.sendRePass(passwordController.text, token)
.then((value) async{
.then((value) async {
if (value == 'done') {
await _showDialog('Password changed successfully.Now login to your account.');
await _showDialog(
'Password changed successfully.Now login to your account.');
Navigator.of(context).pop();
}
});
+2 -2
View File
@@ -71,7 +71,7 @@ class _FormPageState extends State<FormPage> {
setState(() {
_isLoading = true;
});
Provider.of<Inputs>(context)
Provider.of<Inputs>(context, listen: false)
.getInputs(
testResultId: this.widget.testResultId ?? "",
name: this.widget.name ?? "",
@@ -186,6 +186,6 @@ class _FormPageState extends State<FormPage> {
formatData(input['children']);
}
}
print(values);
// print(values);
}
}
+1 -2
View File
@@ -20,7 +20,6 @@ class _VerifyPassScreenState extends State<VerifyPassScreen> {
bool _isLoading = false;
final codeCTRL = TextEditingController();
@override
void initState() {
codeCTRL.text = '';
@@ -59,7 +58,7 @@ class _VerifyPassScreenState extends State<VerifyPassScreen> {
_isLoading = true;
});
// try {
await Provider.of<Auth>(context)
await Provider.of<Auth>(context, listen: false)
.sendCode(
codeCTRL.text,
)
+6 -12
View File
@@ -62,12 +62,10 @@ class Auth with ChangeNotifier {
// return 'Done';
// }
print(responseData);
if (responseData['status']=='Faild') {
if (responseData['status'] == 'Faild') {
return 'wrong';
}
else{
return responseData['access_token'];
} else {
return responseData['access_token'];
}
}
@@ -81,10 +79,7 @@ class Auth with ChangeNotifier {
'password': password,
'password_confirmation': password,
},
headers: {
'Authorization': token,
'X-Requested-With': 'XMLHttpRequest'
},
headers: {'Authorization': token, 'X-Requested-With': 'XMLHttpRequest'},
// headers: {'X-Requested-With': 'XMLHttpRequest'},
);
final responseData = json.decode(response.body);
@@ -94,10 +89,9 @@ class Auth with ChangeNotifier {
// return 'Done';
// }
print(responseData);
if (responseData['status']=='Success') {
if (responseData['status'] == 'Success') {
return 'done';
}
else{
} else {
return 'error';
}
}
+15 -11
View File
@@ -13,14 +13,14 @@ class Inputs with ChangeNotifier {
String name = "",
String uniqueCode = "",
String testTypeId = ""}) async {
print(
{
'test_type_id': testTypeId,
'test_result_id': testResultId,
'name': name,
'unique_code': uniqueCode,
},
);
// print(
// {
// 'test_type_id': testTypeId,
// 'test_result_id': testResultId,
// 'name': name,
// 'unique_code': uniqueCode,
// },
// );
var response = await http.post(
Url.getInputs,
body: {
@@ -41,8 +41,10 @@ class Inputs with ChangeNotifier {
}
final responseData = json.decode(response.body);
// print(responseData);
// print(responseData['data']['inputs']);
// for (var item in responseData['data']['testType'].keys) {
// print(item);
// }
Map<String, dynamic> values;
if (testResultId.isNotEmpty) {
response = await http.get(Url.testResultFormValues(testResultId),
@@ -72,11 +74,12 @@ class Inputs with ChangeNotifier {
'value': general['id']
});
// print(responseData['data']['inputs']);
inputItems.add({
'type': 'Text',
'key': 'device_id',
'name': general['device_label'],
'value': deviceLabel
'value': deviceLabel,
});
inputItems.add(
{'type': 'Date', 'key': 'date', 'name': 'date', 'value': dateTime});
@@ -86,6 +89,7 @@ class Inputs with ChangeNotifier {
setValues(inputs, values);
for (var input in inputs) {
inputItems.add(input as Map<String, dynamic>);
// print(input);
}
inputItems.add({
'type': 'Image',
+4 -3
View File
@@ -190,6 +190,7 @@ class TestResultsProvider with ChangeNotifier {
url,
headers: {
'Authorization': User.token,
// 'X-Requested-With': 'XMLHttpRequest',
},
);
@@ -200,11 +201,11 @@ class TestResultsProvider with ChangeNotifier {
items = [];
}
for (var item in testResultData['data']['data']) {
// print(item);
print(item);
originalItems.add(
TestResultObject(
id: item['id'].toString(),
name: item['test_type']['name'],
name: item['test_type'] != null ? item['test_type']['name'] : '',
deviceId: item['device_id'].toString(),
result: item['result'] == 'Accept' ? 'Accepted' : 'Not Accepted',
date: item['created_at'].toString().substring(0, 10),
@@ -246,7 +247,7 @@ class TestResultsProvider with ChangeNotifier {
"file": di.MultipartFile.fromBytes(imageListInt, filename: fileName)
});
var response = await dio.post(
await dio.post(
Url.addImage,
data: formData,
);
@@ -167,7 +167,7 @@ class _FormCreatorState extends State<FormCreator> {
}
if (item['type'] == "Text") {
print(item['name']);
// print(item['require_scanner'].toString());
TextEditingController idCTRL = new TextEditingController();
final _media = MediaQuery.of(context);
// final double _pixelRatio = (_media.size.height / _media.size.width * 7 / 5);
@@ -176,7 +176,7 @@ class _FormCreatorState extends State<FormCreator> {
listWidgets.add(
Padding(
padding: const EdgeInsets.all(8.0),
child: item['name'] != 'Autoclave ID'
child: item['require_scanner'].toString() != '1'
? TextFormField(
controller: idCTRL,
decoration: InputDecoration(
@@ -184,7 +184,7 @@ class _FormCreatorState extends State<FormCreator> {
border: UnderlineInputBorder(),
contentPadding: EdgeInsets.all(0),
),
initialValue: item['value'] ?? '',
// initialValue: item['value'] ?? '',
onChanged: (String value) {
formItems[count]['value'] = value;
_handleChanged();
@@ -202,7 +202,7 @@ class _FormCreatorState extends State<FormCreator> {
border: UnderlineInputBorder(),
contentPadding: EdgeInsets.all(0),
),
initialValue: item['value'] ?? '',
// initialValue: item['value'] ?? '',
onChanged: (String value) {
formItems[count]['value'] = value;
_handleChanged();
@@ -340,7 +340,7 @@ class _FormCreatorState extends State<FormCreator> {
border: UnderlineInputBorder(),
contentPadding: EdgeInsets.all(0),
),
initialValue: item['value'] ?? '',
// initialValue: item['value'] ?? '',
onChanged: (String value) {
formItems[count]['value'] = value;
_handleChanged();