mirror of
https://git.meshkee.com/applications/cssd.git
synced 2026-10-12 07:28:55 +03:30
2.2.0
This commit is contained in:
Regular → Executable
Regular → Executable
Regular → Executable
+3
-5
@@ -11,8 +11,6 @@ class Url {
|
||||
|
||||
static const String getUserInfo = '$baseUrl/GetInfo';
|
||||
|
||||
// static const String testResults = '$baseUrl/TestResults';
|
||||
|
||||
static const String filterItems = '$baseUrl/TestResults/ListFilterItems';
|
||||
|
||||
static const String labelItems = '$baseUrl/GetLabels';
|
||||
@@ -29,9 +27,9 @@ class Url {
|
||||
|
||||
static const String addImage = '$baseUrl/UploadFile';
|
||||
|
||||
// static String getUserMedicalCenterId(int id) {
|
||||
// return '$baseUrl/users?medical_center_id=$id';
|
||||
// }
|
||||
static const String exportItems = '$baseUrl/export/items';
|
||||
|
||||
static const String exportPackages = '$baseUrl/export/packages';
|
||||
|
||||
static String testResults(int id) {
|
||||
return '$baseUrl/TestResults?page=$id';
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
-1
@@ -24,7 +24,6 @@ class CycleDetailObject extends Equatable {
|
||||
final String description;
|
||||
final String createDate;
|
||||
final String hospitalName;
|
||||
|
||||
final String date;
|
||||
final String sterileId;
|
||||
final String cycleNumber;
|
||||
|
||||
Regular → Executable
+3
@@ -8,6 +8,7 @@ class ItemResultObject extends Equatable {
|
||||
final String userName;
|
||||
final int status;
|
||||
final String? batchId;
|
||||
final String? udi;
|
||||
|
||||
ItemResultObject({
|
||||
required this.id,
|
||||
@@ -16,6 +17,7 @@ class ItemResultObject extends Equatable {
|
||||
required this.userName,
|
||||
required this.status,
|
||||
this.batchId,
|
||||
this.udi,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -26,6 +28,7 @@ class ItemResultObject extends Equatable {
|
||||
userName,
|
||||
status,
|
||||
batchId!,
|
||||
udi!,
|
||||
];
|
||||
|
||||
@override
|
||||
|
||||
Regular → Executable
-1
@@ -26,7 +26,6 @@ class LabelDetailsObject extends Equatable {
|
||||
final String package;
|
||||
final String packageId;
|
||||
final String hospitalName;
|
||||
|
||||
final String createDate;
|
||||
final String expireDate;
|
||||
final String sterileDate;
|
||||
|
||||
Regular → Executable
+30
-9
@@ -1,3 +1,4 @@
|
||||
// ignore_for_file: public_member_api_docs, sort_constructors_first
|
||||
import 'package:equatable/equatable.dart';
|
||||
|
||||
class MyItemResultObject extends Equatable {
|
||||
@@ -5,20 +6,14 @@ class MyItemResultObject extends Equatable {
|
||||
final String name;
|
||||
final String size;
|
||||
final String? userName;
|
||||
final String? fromDate;
|
||||
final String? toDate;
|
||||
final String? requestId;
|
||||
final String? userHistory;
|
||||
|
||||
MyItemResultObject({
|
||||
required this.id,
|
||||
required this.name,
|
||||
required this.size,
|
||||
this.userName,
|
||||
this.fromDate,
|
||||
this.toDate,
|
||||
this.requestId,
|
||||
this.userHistory,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -27,10 +22,7 @@ class MyItemResultObject extends Equatable {
|
||||
name,
|
||||
size,
|
||||
userName!,
|
||||
fromDate!,
|
||||
toDate!,
|
||||
requestId!,
|
||||
userHistory!,
|
||||
];
|
||||
|
||||
@override
|
||||
@@ -66,3 +58,32 @@ class MyItemFilterObject extends Equatable {
|
||||
@override
|
||||
bool get stringify => true;
|
||||
}
|
||||
|
||||
class ItemHistoryObject extends Equatable {
|
||||
final String fromDate;
|
||||
final String toDate;
|
||||
final String userHistoryName;
|
||||
final String userHistoryId;
|
||||
final String userHistoryPhon;
|
||||
ItemHistoryObject({
|
||||
required this.fromDate,
|
||||
required this.toDate,
|
||||
required this.userHistoryName,
|
||||
required this.userHistoryId,
|
||||
required this.userHistoryPhon,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object> get props {
|
||||
return [
|
||||
fromDate,
|
||||
toDate,
|
||||
userHistoryName,
|
||||
userHistoryId,
|
||||
userHistoryPhon,
|
||||
];
|
||||
}
|
||||
|
||||
@override
|
||||
bool get stringify => true;
|
||||
}
|
||||
|
||||
Regular → Executable
+29
-9
@@ -5,20 +5,14 @@ class MyPackageResultObject extends Equatable {
|
||||
final String name;
|
||||
final String createdAt;
|
||||
final String? userName;
|
||||
final String? fromDate;
|
||||
final String? toDate;
|
||||
final String? requestId;
|
||||
final String? userHistory;
|
||||
|
||||
MyPackageResultObject({
|
||||
required this.id,
|
||||
required this.name,
|
||||
required this.createdAt,
|
||||
this.userName,
|
||||
this.fromDate,
|
||||
this.toDate,
|
||||
this.requestId,
|
||||
this.userHistory,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -27,10 +21,7 @@ class MyPackageResultObject extends Equatable {
|
||||
name,
|
||||
createdAt,
|
||||
userName!,
|
||||
fromDate!,
|
||||
toDate!,
|
||||
requestId!,
|
||||
userHistory!,
|
||||
];
|
||||
|
||||
@override
|
||||
@@ -60,3 +51,32 @@ class MyPackageFilterObject extends Equatable {
|
||||
@override
|
||||
bool get stringify => true;
|
||||
}
|
||||
|
||||
class PackageHistoryObject extends Equatable {
|
||||
final String fromDate;
|
||||
final String toDate;
|
||||
final String userHistoryName;
|
||||
final String userHistoryId;
|
||||
final String userHistoryPhon;
|
||||
PackageHistoryObject({
|
||||
required this.fromDate,
|
||||
required this.toDate,
|
||||
required this.userHistoryName,
|
||||
required this.userHistoryId,
|
||||
required this.userHistoryPhon,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object> get props {
|
||||
return [
|
||||
fromDate,
|
||||
toDate,
|
||||
userHistoryName,
|
||||
userHistoryId,
|
||||
userHistoryPhon,
|
||||
];
|
||||
}
|
||||
|
||||
@override
|
||||
bool get stringify => true;
|
||||
}
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
+4
@@ -277,6 +277,10 @@ class _CycleAddScreenState extends State<CycleAddScreen> {
|
||||
initialLabelValue:
|
||||
cycleProvider.initialLabelValue,
|
||||
index: index,
|
||||
hasRemoveButton:
|
||||
cycleProvider.labelValues.length > 1
|
||||
? true
|
||||
: false,
|
||||
),
|
||||
itemCount:
|
||||
cycleProvider.labelValues.length,
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
+21
@@ -249,6 +249,27 @@ class ItemResultFloatingButton extends StatelessWidget {
|
||||
return Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: <Widget>[
|
||||
// InkWell(
|
||||
// customBorder: CircleBorder(),
|
||||
// onTap: () {
|
||||
// Provider.of<ItemProvider>(context, listen: false).exportItems();
|
||||
// },
|
||||
// child: Container(
|
||||
// padding: EdgeInsets.all(_deviceBlockSize),
|
||||
// decoration: BoxDecoration(
|
||||
// shape: BoxShape.circle,
|
||||
// color: Colors.black,
|
||||
// ),
|
||||
// child: Icon(
|
||||
// Icons.import_export,
|
||||
// size: 10 * _deviceBlockSize,
|
||||
// color: Colors.white,
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// SizedBox(
|
||||
// width: 2 * _deviceBlockSize,
|
||||
// ),
|
||||
InkWell(
|
||||
customBorder: CircleBorder(),
|
||||
onTap: () {
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
+5
-18
@@ -30,9 +30,6 @@ class _LabelAddScreenState extends State<LabelAddScreen> {
|
||||
DateTime? dateTimeS;
|
||||
|
||||
final _form = GlobalKey<FormState>();
|
||||
|
||||
List<Map<String, String>> packageVals = [];
|
||||
List<String> packageValue = [];
|
||||
bool isInit = true;
|
||||
// String? packageId;
|
||||
// String? previousRoute;
|
||||
@@ -49,15 +46,7 @@ class _LabelAddScreenState extends State<LabelAddScreen> {
|
||||
@override
|
||||
void didChangeDependencies() async {
|
||||
if (isInit) {
|
||||
// final pastRoute = ModalRoute.of(context)!.settings.name;
|
||||
// previousRoute = pastRoute;
|
||||
// print(previousRoute);
|
||||
var labelProviderObject = Provider.of<LabelsProvider>(context);
|
||||
// var arguments = ModalRoute.of(context)!.settings.arguments;
|
||||
// if (arguments != null && arguments is Map<dynamic, dynamic>) {
|
||||
// packageId = arguments['id'];
|
||||
// }
|
||||
// print(packageId);
|
||||
labelProviderObject.resetPackageVals();
|
||||
labelProviderObject.getPackageFilters().then(
|
||||
(result) {
|
||||
@@ -68,7 +57,12 @@ class _LabelAddScreenState extends State<LabelAddScreen> {
|
||||
);
|
||||
},
|
||||
);
|
||||
var arguments = ModalRoute.of(context)!.settings.arguments;
|
||||
if (arguments != null && arguments is Map<dynamic, dynamic>) {
|
||||
labelProviderObject.packageId = arguments['id'];
|
||||
}
|
||||
}
|
||||
|
||||
super.didChangeDependencies();
|
||||
}
|
||||
|
||||
@@ -298,13 +292,6 @@ class _LabelAddScreenState extends State<LabelAddScreen> {
|
||||
),
|
||||
Consumer<LabelsProvider>(
|
||||
builder: (ctx, labelProvider, _) {
|
||||
// if (previousRoute ==
|
||||
// '/PackageDetailScreen') {
|
||||
// initialLabelValue = packageId!;
|
||||
// } else {
|
||||
// initialLabelValue =
|
||||
// labelProvider.initialPackageValue;
|
||||
// }
|
||||
return ListView.builder(
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
shrinkWrap: true,
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
+6
-4
@@ -218,10 +218,12 @@ class _MyItemsMineScreenState extends State<MyItemsMineScreen> {
|
||||
items:
|
||||
itemResults.hospitalItems?[index],
|
||||
push: () {
|
||||
Navigator.pushNamed(context,
|
||||
Routes.myItemsHistoryScreen,
|
||||
arguments: itemResults
|
||||
.hospitalItems?[index]);
|
||||
Navigator.pushNamed(
|
||||
context,
|
||||
Routes.myItemsHistoryScreen,
|
||||
arguments: itemResults
|
||||
.hospitalItems?[index],
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
+16
-11
@@ -2,6 +2,7 @@ import 'package:cssd/models/my_item_model.dart';
|
||||
import 'package:cssd/providers/auth.dart';
|
||||
import 'package:cssd/providers/my_items.dart';
|
||||
import 'package:cssd/widgets/MyItemsScreens/History/my_items_history_date_widget.dart';
|
||||
import 'package:cssd/widgets/MyItemsScreens/History/user_item_history_box.dart';
|
||||
import 'package:cssd/widgets/MyItemsScreens/Result/my_items_data_box_widget.dart';
|
||||
|
||||
import '../../config/routes.dart';
|
||||
@@ -26,6 +27,7 @@ class _MyItemsHistoryScreenState extends State<MyItemsHistoryScreen> {
|
||||
bool _isInit = true;
|
||||
ScrollController? sc;
|
||||
MyItemResultObject? itemData;
|
||||
ItemHistoryObject? historyData;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -117,8 +119,8 @@ class _MyItemsHistoryScreenState extends State<MyItemsHistoryScreen> {
|
||||
),
|
||||
Expanded(
|
||||
child: Consumer<MyItemProvider>(
|
||||
builder: (context, userResults, child) {
|
||||
return userResults.isloading
|
||||
builder: (context, itemResults, child) {
|
||||
return itemResults.isloading
|
||||
? Center(
|
||||
child: CircularProgressIndicator(
|
||||
color: Colors.black,
|
||||
@@ -132,15 +134,18 @@ class _MyItemsHistoryScreenState extends State<MyItemsHistoryScreen> {
|
||||
itemBuilder: (context, index) {
|
||||
return Column(
|
||||
children: [
|
||||
ItemHistoryDate(
|
||||
deviceBlockSize: _deviceBlockSize,
|
||||
items: itemData!,
|
||||
),
|
||||
SizedBox(
|
||||
height: 20.0,
|
||||
),
|
||||
Text(
|
||||
itemData!.userHistory.toString(),
|
||||
ItemHistoryDate(
|
||||
deviceBlockSize: _deviceBlockSize,
|
||||
items: itemResults
|
||||
.itemHistory![index],
|
||||
),
|
||||
UserItemDataBox(
|
||||
deviceBlockSize: _deviceBlockSize,
|
||||
user: itemResults
|
||||
.itemHistory![index],
|
||||
),
|
||||
SizedBox(
|
||||
height: 20.0,
|
||||
@@ -148,13 +153,13 @@ class _MyItemsHistoryScreenState extends State<MyItemsHistoryScreen> {
|
||||
],
|
||||
);
|
||||
},
|
||||
itemCount: userResults
|
||||
.originalItemHistory!.length,
|
||||
itemCount:
|
||||
itemResults.itemHistory!.length,
|
||||
shrinkWrap: true,
|
||||
);
|
||||
},
|
||||
),
|
||||
)
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
|
||||
Regular → Executable
Regular → Executable
+2
@@ -45,6 +45,7 @@ class _ItemsTransferScreenState extends State<ItemsTransferScreen> {
|
||||
itemData =
|
||||
ModalRoute.of(context)!.settings.arguments as ItemDetailObject?;
|
||||
var userResults = Provider.of<UsersProvider>(context);
|
||||
userResults.resetSelectedUser();
|
||||
userResults.setLoading();
|
||||
String medicalCenterId =
|
||||
await userResults.getUserMedicalCenter() as String;
|
||||
@@ -121,6 +122,7 @@ class _ItemsTransferScreenState extends State<ItemsTransferScreen> {
|
||||
text: 'user',
|
||||
text2: 'name or ID',
|
||||
deviceBlockSize: _deviceBlockSize,
|
||||
textInputType: TextInputType.name,
|
||||
onChanged: (value) {
|
||||
Provider.of<UsersProvider>(context, listen: false)
|
||||
.searchUsers(value);
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
+15
-12
@@ -2,6 +2,7 @@ import 'package:cssd/models/my_package_model.dart';
|
||||
import 'package:cssd/providers/auth.dart';
|
||||
import 'package:cssd/providers/my_packages.dart';
|
||||
import 'package:cssd/widgets/MyPackagesScreens/History/my_packages_history_date_widget.dart';
|
||||
import 'package:cssd/widgets/MyPackagesScreens/History/user_package_history_box.dart';
|
||||
import 'package:cssd/widgets/MyPackagesScreens/Result/my_packages_data_box_widget.dart';
|
||||
|
||||
import '../../config/routes.dart';
|
||||
@@ -118,8 +119,8 @@ class _MyPackagesHistoryScreenState extends State<MyPackagesHistoryScreen> {
|
||||
),
|
||||
Expanded(
|
||||
child: Consumer<MyPackageProvider>(
|
||||
builder: (context, userResults, child) {
|
||||
return userResults.isloading
|
||||
builder: (context, packageResults, child) {
|
||||
return packageResults.isloading
|
||||
? Center(
|
||||
child: CircularProgressIndicator(
|
||||
color: Colors.black,
|
||||
@@ -133,16 +134,18 @@ class _MyPackagesHistoryScreenState extends State<MyPackagesHistoryScreen> {
|
||||
itemBuilder: (context, index) {
|
||||
return Column(
|
||||
children: [
|
||||
PackageHistoryDate(
|
||||
deviceBlockSize: _deviceBlockSize,
|
||||
packages: packageData!,
|
||||
),
|
||||
SizedBox(
|
||||
height: 20.0,
|
||||
),
|
||||
Text(
|
||||
packageData!.userHistory
|
||||
.toString(),
|
||||
PackageHistoryDate(
|
||||
deviceBlockSize: _deviceBlockSize,
|
||||
packages: packageResults
|
||||
.packageHistory![index],
|
||||
),
|
||||
UserPackageDataBox(
|
||||
deviceBlockSize: _deviceBlockSize,
|
||||
user: packageResults
|
||||
.packageHistory![index],
|
||||
),
|
||||
SizedBox(
|
||||
height: 20.0,
|
||||
@@ -150,13 +153,13 @@ class _MyPackagesHistoryScreenState extends State<MyPackagesHistoryScreen> {
|
||||
],
|
||||
);
|
||||
},
|
||||
itemCount: userResults
|
||||
.originalPackageHistory!.length,
|
||||
itemCount:
|
||||
packageResults.packageHistory!.length,
|
||||
shrinkWrap: true,
|
||||
);
|
||||
},
|
||||
),
|
||||
)
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
|
||||
Regular → Executable
Regular → Executable
+3
-1
@@ -44,6 +44,7 @@ class _PackageTransferScreenState extends State<PackageTransferScreen> {
|
||||
packageData =
|
||||
ModalRoute.of(context)!.settings.arguments as PackageDetailObject?;
|
||||
var userResults = Provider.of<UsersProvider>(context);
|
||||
userResults.resetSelectedUser();
|
||||
userResults.setLoading();
|
||||
String medicalCenterId =
|
||||
await userResults.getUserMedicalCenter() as String;
|
||||
@@ -115,8 +116,9 @@ class _PackageTransferScreenState extends State<PackageTransferScreen> {
|
||||
ResultSearchBox(
|
||||
searchCTRL: searchCTRL,
|
||||
text: 'user',
|
||||
text2: 'name',
|
||||
text2: 'name or ID',
|
||||
deviceBlockSize: _deviceBlockSize,
|
||||
textInputType: TextInputType.name,
|
||||
onChanged: (value) {
|
||||
Provider.of<UsersProvider>(context, listen: false)
|
||||
.searchUsers(value);
|
||||
|
||||
Regular → Executable
+25
@@ -24,6 +24,7 @@ class _PackageAddScreenState extends State<PackageAddScreen> {
|
||||
// TextEditingController udiCTRL = new TextEditingController();
|
||||
TextEditingController nameCTRL = new TextEditingController();
|
||||
TextEditingController dateCTRL = new TextEditingController();
|
||||
|
||||
final _form = GlobalKey<FormState>();
|
||||
bool isInit = true;
|
||||
PackageFilterObject? filters;
|
||||
@@ -47,6 +48,23 @@ class _PackageAddScreenState extends State<PackageAddScreen> {
|
||||
(result) {
|
||||
setState(
|
||||
() {
|
||||
// itemVals = [
|
||||
// {'id': '', 'name-udi': ''}
|
||||
// ];
|
||||
// for (var item in result) {
|
||||
// itemVals.add(item);
|
||||
// packageProviderObject.itemVals = itemVals;
|
||||
// }
|
||||
// initialItemValue.text = itemVals[1]['name-udi'];
|
||||
// packageProviderObject.initialItemValue = initialItemValue.text;
|
||||
|
||||
// itemVals.forEach(
|
||||
// (item) {
|
||||
// if (item['id'] == '') {
|
||||
// selectedItemsCTRL.text = item['name']!;
|
||||
// }
|
||||
// },
|
||||
// );
|
||||
isInit = false;
|
||||
},
|
||||
);
|
||||
@@ -215,6 +233,13 @@ class _PackageAddScreenState extends State<PackageAddScreen> {
|
||||
initialItemValue:
|
||||
packageProvider.initialItemValue,
|
||||
index: index,
|
||||
filteredItems:
|
||||
packageProvider.filteredItems!,
|
||||
hasRemoveButton:
|
||||
packageProvider.itemValues.length >
|
||||
1
|
||||
? true
|
||||
: false,
|
||||
),
|
||||
itemCount:
|
||||
packageProvider.itemValues.length,
|
||||
|
||||
Regular → Executable
+10
-6
@@ -1,3 +1,4 @@
|
||||
import 'package:cssd/config/routes.dart';
|
||||
import 'package:cssd/models/package_model.dart';
|
||||
import 'package:cssd/providers/packages.dart';
|
||||
import 'package:cssd/widgets/PackageScreens/Details/package_detail_box.dart';
|
||||
@@ -8,12 +9,6 @@ import '../../providers/connectivity.dart';
|
||||
import '../../widgets/Global/internet_error.dart';
|
||||
|
||||
class PackageDetailScreen extends StatefulWidget {
|
||||
final String? testResultId;
|
||||
|
||||
PackageDetailScreen({
|
||||
this.testResultId,
|
||||
});
|
||||
|
||||
@override
|
||||
_PackageDetailScreenState createState() => _PackageDetailScreenState();
|
||||
}
|
||||
@@ -80,6 +75,15 @@ class _PackageDetailScreenState extends State<PackageDetailScreen> {
|
||||
: PackageDetailsDataBox(
|
||||
datas: datas!,
|
||||
deviceBlockSize: _deviceBlockSize,
|
||||
goToAddLabelPage: () {
|
||||
Navigator.pushNamed(
|
||||
context,
|
||||
Routes.labelAddScreen,
|
||||
arguments: {
|
||||
"id": datas!.id,
|
||||
},
|
||||
);
|
||||
},
|
||||
)
|
||||
: ConnectionErrorBox();
|
||||
},
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
+16
-8
@@ -11,7 +11,6 @@ import '../../widgets/Global/internet_error.dart';
|
||||
import '../../widgets/TestResultScreens/Add/selector_box.dart';
|
||||
|
||||
class TestResultAddScreen extends StatefulWidget {
|
||||
// static const route = '/TestResultAddScreen';
|
||||
@override
|
||||
State<StatefulWidget> createState() {
|
||||
return _TestResultAddScreenState();
|
||||
@@ -29,6 +28,7 @@ class _TestResultAddScreenState extends State<TestResultAddScreen> {
|
||||
if (isInit) {
|
||||
var testResultProviderObject =
|
||||
Provider.of<TestResultsProvider>(context, listen: false);
|
||||
testResultProviderObject.resetTests();
|
||||
testResultProviderObject.getFilterItems().then((result) {
|
||||
for (var testType in result[1].keys) {
|
||||
testTypeVals.add(testType);
|
||||
@@ -128,6 +128,10 @@ class _TestResultAddScreenState extends State<TestResultAddScreen> {
|
||||
} else if (result == 'access') {
|
||||
print('access');
|
||||
} else {
|
||||
Provider.of<TestResultsProvider>(
|
||||
context,
|
||||
listen: false,
|
||||
).testCode = result;
|
||||
Navigator.pushNamed(
|
||||
context,
|
||||
Routes.formTestResultScreen,
|
||||
@@ -174,14 +178,18 @@ class _TestResultAddScreenState extends State<TestResultAddScreen> {
|
||||
child: TextFormField(
|
||||
onChanged: (val) {
|
||||
if (val != '') {
|
||||
setState(() {
|
||||
testTypeCTRL.text = '';
|
||||
});
|
||||
setState(
|
||||
() {
|
||||
testTypeCTRL.text = '';
|
||||
},
|
||||
);
|
||||
} else {
|
||||
setState(() {
|
||||
testTypeCTRL.text =
|
||||
testTypeVals[0];
|
||||
});
|
||||
setState(
|
||||
() {
|
||||
testTypeCTRL.text =
|
||||
testTypeVals[0];
|
||||
},
|
||||
);
|
||||
}
|
||||
},
|
||||
controller: testCodeCTRL,
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
+24
-22
@@ -41,28 +41,30 @@ class _FormPageState extends State<FormPage> {
|
||||
setState(() {
|
||||
_isLoading = true;
|
||||
});
|
||||
prvObject.createTestResult(values, batchId).then((result) {
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
if (result == 'done') {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (ctx) => AlertDialog(
|
||||
content: Text('Test added.'),
|
||||
actions: <Widget>[
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
Navigator.of(ctx).pop();
|
||||
},
|
||||
child: Text('Ok'),
|
||||
)
|
||||
],
|
||||
),
|
||||
).then((value) =>
|
||||
Navigator.of(context).popAndPushNamed(Routes.testResultScreen));
|
||||
}
|
||||
});
|
||||
prvObject.createTestResult(values, batchId).then(
|
||||
(result) {
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
if (result == 'done') {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (ctx) => AlertDialog(
|
||||
content: Text('Test added.'),
|
||||
actions: <Widget>[
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
Navigator.of(ctx).pop();
|
||||
},
|
||||
child: Text('Ok'),
|
||||
)
|
||||
],
|
||||
),
|
||||
).then((value) =>
|
||||
Navigator.of(context).popAndPushNamed(Routes.testResultScreen));
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
+36
-40
@@ -183,26 +183,24 @@ class HomePage extends StatelessWidget {
|
||||
Divider(
|
||||
height: 2,
|
||||
),
|
||||
userData['roles']?.contains('User') ?? false
|
||||
? Container()
|
||||
: SelectionItem(
|
||||
firstLine: 'PACKAGES',
|
||||
secondLine: 'List, Details & Add a one',
|
||||
firstLineColor: kPurple,
|
||||
secondLineColor: kPurpleSub,
|
||||
onTap: () => Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) {
|
||||
return Consumer<Auth>(
|
||||
builder: (ctx, auth, _) {
|
||||
return PackageResultScreen();
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
SelectionItem(
|
||||
firstLine: 'PACKAGES',
|
||||
secondLine: 'List, Details & Add a one',
|
||||
firstLineColor: kPurple,
|
||||
secondLineColor: kPurpleSub,
|
||||
onTap: () => Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) {
|
||||
return Consumer<Auth>(
|
||||
builder: (ctx, auth, _) {
|
||||
return PackageResultScreen();
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
SelectionItem(
|
||||
firstLine: 'MY PACKAGES',
|
||||
secondLine: 'The Package that i possess',
|
||||
@@ -224,26 +222,24 @@ class HomePage extends StatelessWidget {
|
||||
Divider(
|
||||
height: 2,
|
||||
),
|
||||
userData['roles']?.contains('User') ?? false
|
||||
? Container()
|
||||
: SelectionItem(
|
||||
firstLine: 'ITEMS',
|
||||
secondLine: 'List, Details & Add a one',
|
||||
firstLineColor: kBlue,
|
||||
secondLineColor: kBlueSub,
|
||||
onTap: () => Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) {
|
||||
return Consumer<Auth>(
|
||||
builder: (ctx, auth, _) {
|
||||
return ItemResultScreen();
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
SelectionItem(
|
||||
firstLine: 'ITEMS',
|
||||
secondLine: 'List, Details & Add a one',
|
||||
firstLineColor: kBlue,
|
||||
secondLineColor: kBlueSub,
|
||||
onTap: () => Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) {
|
||||
return Consumer<Auth>(
|
||||
builder: (ctx, auth, _) {
|
||||
return ItemResultScreen();
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
SelectionItem(
|
||||
firstLine: 'MY ITEMS',
|
||||
secondLine: 'The Items that i possess',
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
+8
@@ -28,6 +28,14 @@ class CyclesProvider extends ChangeNotifier {
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
removeLabelVal() {
|
||||
curLabelVal -= 1;
|
||||
TextEditingController lbl = new TextEditingController();
|
||||
lbl.text = initialLabelValue;
|
||||
labelValues.removeLast();
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
changeLabelVal(String value, int index) {
|
||||
labelValues[index].text = value;
|
||||
notifyListeners();
|
||||
|
||||
Regular → Executable
Regular → Executable
+20
-5
@@ -93,13 +93,13 @@ class ItemProvider extends ChangeNotifier {
|
||||
|
||||
Future<String> addImage(String batchId, dynamic file, String fileName) async {
|
||||
var imageListInt = file.cast<int>();
|
||||
var dio = Dio();
|
||||
var dio = new Dio();
|
||||
dio.options.headers = {
|
||||
'Authorization': User.token,
|
||||
'X-Requested-With': 'XMLHttpRequest',
|
||||
'Content-Type': 'application/json',
|
||||
};
|
||||
FormData formData = FormData.fromMap(
|
||||
FormData formData = new FormData.fromMap(
|
||||
{
|
||||
"batch_id": batchId,
|
||||
'model_type': 'Item',
|
||||
@@ -111,6 +111,10 @@ class ItemProvider extends ChangeNotifier {
|
||||
Url.addImage,
|
||||
data: formData,
|
||||
);
|
||||
// print(response.statusCode);
|
||||
// print(response.statusMessage);
|
||||
// print(response.data);
|
||||
|
||||
return 'Added';
|
||||
}
|
||||
|
||||
@@ -122,7 +126,7 @@ class ItemProvider extends ChangeNotifier {
|
||||
note,
|
||||
batchId,
|
||||
) async {
|
||||
batchId = randomString(10);
|
||||
final batchId = randomString(10);
|
||||
|
||||
for (var image in catchImages) {
|
||||
await addImage(batchId, image.bytes, image.path!);
|
||||
@@ -264,12 +268,12 @@ class ItemProvider extends ChangeNotifier {
|
||||
},
|
||||
);
|
||||
|
||||
var testResultData = json.decode(response.body);
|
||||
var itemsData = json.decode(response.body);
|
||||
if (pageNumber == 1) {
|
||||
originalItems = [];
|
||||
}
|
||||
|
||||
for (var item in testResultData['data']['data']) {
|
||||
for (var item in itemsData['data']['data']) {
|
||||
originalItems!.add(
|
||||
ItemResultObject(
|
||||
name: item['name'],
|
||||
@@ -345,4 +349,15 @@ class ItemProvider extends ChangeNotifier {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> exportItems() async {
|
||||
var response = await http.get(
|
||||
Uri.parse(
|
||||
Url.exportItems,
|
||||
),
|
||||
headers: {'Authorization': User.token},
|
||||
);
|
||||
print(response.body);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Regular → Executable
+10
-8
@@ -14,23 +14,25 @@ class LabelsProvider extends ChangeNotifier {
|
||||
List<String> packageVals = [];
|
||||
List<TextEditingController> packageValues = [];
|
||||
String initialPackageValue = '';
|
||||
String? packageId;
|
||||
int curPackageVal = 1;
|
||||
|
||||
resetPackageVals() {
|
||||
packageVals = [];
|
||||
packageValues = [];
|
||||
initialPackageValue = '';
|
||||
packageId = null;
|
||||
curPackageVal = 1;
|
||||
// notifyListeners();
|
||||
}
|
||||
|
||||
addPackageVal() {
|
||||
curPackageVal += 1;
|
||||
TextEditingController lbl = new TextEditingController();
|
||||
lbl.text = initialPackageValue;
|
||||
packageValues.add(lbl);
|
||||
notifyListeners();
|
||||
}
|
||||
// addPackageVal() {
|
||||
// curPackageVal += 1;
|
||||
// TextEditingController lbl = new TextEditingController();
|
||||
// lbl.text = initialPackageValue;
|
||||
// packageValues.add(lbl);
|
||||
// notifyListeners();
|
||||
// }
|
||||
|
||||
changePackageVal(String value, int index) {
|
||||
packageValues[index].text = value;
|
||||
@@ -91,7 +93,7 @@ class LabelsProvider extends ChangeNotifier {
|
||||
result.add(package['id'].toString());
|
||||
}
|
||||
packageVals = result;
|
||||
initialPackageValue = packageVals[0];
|
||||
initialPackageValue = packageId ?? packageVals[0];
|
||||
TextEditingController newLbl = new TextEditingController();
|
||||
newLbl.text = initialPackageValue;
|
||||
packageValues.add(newLbl);
|
||||
|
||||
Regular → Executable
Regular → Executable
+16
-24
@@ -19,7 +19,7 @@ class MyItemProvider extends ChangeNotifier {
|
||||
List<MyItemResultObject>? originalMyItemsRequests;
|
||||
List<MyItemResultObject>? originalHospitalItemsRequests;
|
||||
|
||||
List<MyItemResultObject>? originalItemHistory;
|
||||
List<ItemHistoryObject>? itemHistory;
|
||||
|
||||
MyItemFilterObject? filters = MyItemFilterObject(
|
||||
id: '',
|
||||
@@ -120,7 +120,7 @@ class MyItemProvider extends ChangeNotifier {
|
||||
originalMyItems = [];
|
||||
}
|
||||
|
||||
for (var item in itemsData['data']) {
|
||||
for (var item in itemsData['data']['data']) {
|
||||
originalMyItems!.add(
|
||||
MyItemResultObject(
|
||||
name: item['name'],
|
||||
@@ -157,15 +157,13 @@ class MyItemProvider extends ChangeNotifier {
|
||||
headers: {'Authorization': User.token, "Accept": "application/json"},
|
||||
);
|
||||
|
||||
print(response.body);
|
||||
|
||||
var itemsData = json.decode(response.body);
|
||||
|
||||
if (pageNumber == 1) {
|
||||
originalHospitalItems = [];
|
||||
}
|
||||
|
||||
for (var item in itemsData['data']) {
|
||||
for (var item in itemsData['data']['data']) {
|
||||
originalHospitalItems!.add(
|
||||
MyItemResultObject(
|
||||
name: item['name'],
|
||||
@@ -188,28 +186,22 @@ class MyItemProvider extends ChangeNotifier {
|
||||
|
||||
var itemsData = json.decode(response.body)['data'];
|
||||
|
||||
String fromDate = '';
|
||||
String toDate = '';
|
||||
String userHistory = '';
|
||||
itemHistory = [];
|
||||
|
||||
for (var transfer in itemsData['transfers']) {
|
||||
fromDate =
|
||||
transfer['from_date'] != null ? transfer['from_date'].toString() : '';
|
||||
toDate =
|
||||
transfer['to_date'] != null ? transfer['to_date'].toString() : '';
|
||||
userHistory = transfer['user']['name'].toString();
|
||||
}
|
||||
if (itemsData.isNotEmpty) {
|
||||
originalItemHistory!.add(
|
||||
MyItemResultObject(
|
||||
name: itemsData['name'],
|
||||
id: itemsData['id'].toString(),
|
||||
size: itemsData['size'].toString(),
|
||||
fromDate: fromDate,
|
||||
toDate: toDate,
|
||||
userHistory: userHistory,
|
||||
itemHistory!.add(
|
||||
ItemHistoryObject(
|
||||
fromDate: transfer['from_date'] != null
|
||||
? transfer['from_date'].toString()
|
||||
: '',
|
||||
toDate: transfer['to_date'] != null
|
||||
? transfer['to_date'].toString()
|
||||
: 'Now',
|
||||
userHistoryName: transfer['user']['name'].toString(),
|
||||
userHistoryId: transfer['user']['id'].toString(),
|
||||
userHistoryPhon: transfer['user']['cell_number'].toString(),
|
||||
),
|
||||
);
|
||||
originalItemHistory!.reversed.toList();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Regular → Executable
+15
-20
@@ -19,7 +19,7 @@ class MyPackageProvider extends ChangeNotifier {
|
||||
List<MyPackageResultObject>? originalMyPackagesRequests;
|
||||
List<MyPackageResultObject>? originalHospitalPackagesRequests;
|
||||
|
||||
List<MyPackageResultObject>? originalPackageHistory;
|
||||
List<PackageHistoryObject>? packageHistory;
|
||||
|
||||
MyPackageFilterObject? filters = MyPackageFilterObject(
|
||||
id: '',
|
||||
@@ -210,29 +210,24 @@ class MyPackageProvider extends ChangeNotifier {
|
||||
);
|
||||
|
||||
var packagesData = json.decode(response.body)['data'];
|
||||
print(packagesData);
|
||||
|
||||
packageHistory = [];
|
||||
|
||||
String fromDate = '';
|
||||
String toDate = '';
|
||||
String userHistory = '';
|
||||
for (var transfer in packagesData['transfers']) {
|
||||
fromDate =
|
||||
transfer['from_date'] != null ? transfer['from_date'].toString() : '';
|
||||
toDate =
|
||||
transfer['to_date'] != null ? transfer['to_date'].toString() : '';
|
||||
userHistory = transfer['user']['name'].toString();
|
||||
}
|
||||
if (packagesData.isNotEmpty) {
|
||||
originalPackageHistory!.add(
|
||||
MyPackageResultObject(
|
||||
name: packagesData['name'],
|
||||
id: packagesData['id'].toString(),
|
||||
createdAt: packagesData['created_at'].toString(),
|
||||
fromDate: fromDate,
|
||||
toDate: toDate,
|
||||
userHistory: userHistory,
|
||||
packageHistory!.add(
|
||||
PackageHistoryObject(
|
||||
fromDate: transfer['from_date'] != null
|
||||
? transfer['from_date'].toString()
|
||||
: '',
|
||||
toDate: transfer['to_date'] != null
|
||||
? transfer['to_date'].toString()
|
||||
: 'Now',
|
||||
userHistoryName: transfer['user']['name'].toString(),
|
||||
userHistoryId: transfer['user']['id'].toString(),
|
||||
userHistoryPhon: transfer['user']['cell_number'].toString(),
|
||||
),
|
||||
);
|
||||
originalPackageHistory!.reversed.toList();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Regular → Executable
+39
-2
@@ -1,5 +1,6 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:cssd/models/item_model.dart';
|
||||
import 'package:cssd/models/package_model.dart';
|
||||
|
||||
import '../config/urls.dart';
|
||||
@@ -8,7 +9,10 @@ import 'package:flutter/material.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
|
||||
class PackageProvider extends ChangeNotifier {
|
||||
List<ItemResultObject>? filteredItems;
|
||||
// List<Map<String, dynamic>> itemVals = [];
|
||||
List<String> itemVals = [];
|
||||
|
||||
List<TextEditingController> itemValues = [];
|
||||
String initialItemValue = '';
|
||||
int curItemVal = 1;
|
||||
@@ -18,7 +22,6 @@ class PackageProvider extends ChangeNotifier {
|
||||
itemValues = [];
|
||||
initialItemValue = '';
|
||||
curItemVal = 1;
|
||||
// notifyListeners();
|
||||
}
|
||||
|
||||
addItemVal() {
|
||||
@@ -29,11 +32,28 @@ class PackageProvider extends ChangeNotifier {
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
removeItemVal() {
|
||||
curItemVal -= 1;
|
||||
TextEditingController lbl = new TextEditingController();
|
||||
lbl.text = initialItemValue;
|
||||
itemValues.removeLast();
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
changeItemVal(String value, int index) {
|
||||
itemValues[index].text = value;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
changeItemValByScan(String value, int index) {
|
||||
for (var item in filteredItems!) {
|
||||
if (item.udi == value) {
|
||||
itemValues[index].text = item.id;
|
||||
}
|
||||
}
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
String searchBoxValue = '';
|
||||
bool filterOn = false;
|
||||
List<PackageResultObject>? items;
|
||||
@@ -84,11 +104,28 @@ class PackageProvider extends ChangeNotifier {
|
||||
'Authorization': User.token,
|
||||
},
|
||||
);
|
||||
// List<Map<String, dynamic>> result = [];
|
||||
List<String> result = [];
|
||||
filteredItems = [];
|
||||
var filterData = json.decode(response.body);
|
||||
for (var item in filterData['data']) {
|
||||
// result.add("${item['name']} - ${item['udi'] != null ? item['udi'] : ''}");
|
||||
result.add(item['id'].toString());
|
||||
// result.add({
|
||||
// 'name-udi':
|
||||
// "${item['name']} - ${item['udi'] != null ? item['udi'] : ''}",
|
||||
// 'id': item['id'].toString()
|
||||
// });
|
||||
filteredItems!.add(
|
||||
ItemResultObject(
|
||||
name: item['name'],
|
||||
id: item['id'].toString(),
|
||||
size: item['size'].toString(),
|
||||
userName: item['user'] != null ? item['user']['name'] : '',
|
||||
status: item['status'],
|
||||
udi: item['udi'] != null ? item['udi'] : '',
|
||||
),
|
||||
);
|
||||
}
|
||||
itemVals = result;
|
||||
initialItemValue = itemVals[0];
|
||||
@@ -105,7 +142,7 @@ class PackageProvider extends ChangeNotifier {
|
||||
items,
|
||||
note,
|
||||
) async {
|
||||
List<Map<String, Object>> itms = [];
|
||||
List<Map<String, dynamic>> itms = [];
|
||||
for (var item in items) {
|
||||
itms.add({'id': item});
|
||||
}
|
||||
|
||||
Regular → Executable
+5
@@ -19,6 +19,11 @@ class TestResultsProvider with ChangeNotifier {
|
||||
String testType = '';
|
||||
String testCode = '';
|
||||
|
||||
resetTests() {
|
||||
testCode = '';
|
||||
testType = '';
|
||||
}
|
||||
|
||||
setImages() async {
|
||||
images = [];
|
||||
for (var image in catchImages) {
|
||||
|
||||
Regular → Executable
+4
@@ -36,6 +36,10 @@ class UsersProvider extends ChangeNotifier {
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void resetSelectedUser() {
|
||||
selectedUserIndex = null;
|
||||
}
|
||||
|
||||
void searchUsers(String value) {
|
||||
usersBox = [];
|
||||
searchBoxValue = value;
|
||||
|
||||
Regular → Executable
Regular → Executable
+128
-103
@@ -15,6 +15,7 @@ class AddLabelBox extends StatelessWidget {
|
||||
required this.index,
|
||||
required this.text,
|
||||
this.iconColor,
|
||||
required this.hasRemoveButton,
|
||||
}) : _deviceBlockSize = deviceBlockSize,
|
||||
super(key: key);
|
||||
|
||||
@@ -25,6 +26,7 @@ class AddLabelBox extends StatelessWidget {
|
||||
final int index;
|
||||
final String text;
|
||||
final Color? iconColor;
|
||||
final bool hasRemoveButton;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -67,119 +69,120 @@ class AddLabelBox extends StatelessWidget {
|
||||
Expanded(
|
||||
// width: MediaQuery.of(context).size.width - 70,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
Row(
|
||||
children: <Widget>[
|
||||
SizedBox(
|
||||
width: _deviceBlockSize,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
Row(
|
||||
children: <Widget>[
|
||||
SizedBox(
|
||||
width: _deviceBlockSize,
|
||||
),
|
||||
Text(
|
||||
text,
|
||||
style: TextStyle(
|
||||
fontSize: 3.5 * _deviceBlockSize,
|
||||
color: Colors.grey,
|
||||
fontWeight: FontWeight.w100,
|
||||
),
|
||||
Text(
|
||||
text,
|
||||
style: TextStyle(
|
||||
fontSize: 3.5 * _deviceBlockSize,
|
||||
color: Colors.grey,
|
||||
fontWeight: FontWeight.w100,
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
children: <Widget>[
|
||||
Container(
|
||||
width: MediaQuery.of(context).size.width -
|
||||
(40 * _deviceBlockSize),
|
||||
// height: 30,
|
||||
child: DropdownButtonFormField(
|
||||
decoration: InputDecoration(
|
||||
contentPadding: EdgeInsets.only(
|
||||
left: _deviceBlockSize,
|
||||
),
|
||||
border: InputBorder.none,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
children: <Widget>[
|
||||
Container(
|
||||
width: MediaQuery.of(context).size.width -
|
||||
(40 * _deviceBlockSize),
|
||||
// height: 30,
|
||||
child: DropdownButtonFormField(
|
||||
decoration: InputDecoration(
|
||||
contentPadding: EdgeInsets.only(
|
||||
left: _deviceBlockSize,
|
||||
iconSize: 7 * _deviceBlockSize,
|
||||
icon: Icon(
|
||||
FontAwesomeIcons.angleDown,
|
||||
color: Colors.black,
|
||||
),
|
||||
isExpanded: true,
|
||||
hint: Container(
|
||||
// width: 100,
|
||||
height: 70,
|
||||
padding:
|
||||
const EdgeInsets.symmetric(horizontal: 0),
|
||||
child: TextFormField(
|
||||
controller: values,
|
||||
decoration: InputDecoration(
|
||||
contentPadding: EdgeInsets.only(
|
||||
bottom: 12,
|
||||
),
|
||||
isDense: true,
|
||||
),
|
||||
border: InputBorder.none,
|
||||
),
|
||||
iconSize: 7 * _deviceBlockSize,
|
||||
icon: Icon(
|
||||
FontAwesomeIcons.angleDown,
|
||||
color: Colors.black,
|
||||
),
|
||||
isExpanded: true,
|
||||
hint: Container(
|
||||
// width: 100,
|
||||
height: 70,
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 0),
|
||||
child: TextFormField(
|
||||
controller: values,
|
||||
decoration: InputDecoration(
|
||||
contentPadding: EdgeInsets.only(
|
||||
bottom: 12,
|
||||
),
|
||||
isDense: true,
|
||||
),
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w700,
|
||||
color: Colors.black,
|
||||
fontSize: 5 * _deviceBlockSize,
|
||||
),
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w700,
|
||||
color: Colors.black,
|
||||
fontSize: 5 * _deviceBlockSize,
|
||||
),
|
||||
),
|
||||
isDense: true,
|
||||
items: vals.map((val) {
|
||||
return new DropdownMenuItem<String>(
|
||||
value: val,
|
||||
child: Container(
|
||||
child: Text(
|
||||
val,
|
||||
style: TextStyle(
|
||||
fontSize: 4 * _deviceBlockSize,
|
||||
),
|
||||
),
|
||||
isDense: true,
|
||||
items: vals.map((val) {
|
||||
return new DropdownMenuItem<String>(
|
||||
value: val,
|
||||
child: Container(
|
||||
child: Text(
|
||||
val,
|
||||
style: TextStyle(
|
||||
fontSize: 4 * _deviceBlockSize,
|
||||
),
|
||||
),
|
||||
);
|
||||
}).toList(),
|
||||
onChanged: (val) {
|
||||
Provider.of<CyclesProvider>(context,
|
||||
listen: false)
|
||||
.changeLabelVal(val!, index);
|
||||
},
|
||||
),
|
||||
),
|
||||
Spacer(),
|
||||
InkWell(
|
||||
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);
|
||||
Provider.of<CyclesProvider>(context,
|
||||
listen: false)
|
||||
.changeLabelVal(result, index);
|
||||
}
|
||||
},
|
||||
),
|
||||
);
|
||||
}).toList(),
|
||||
onChanged: (val) {
|
||||
Provider.of<CyclesProvider>(context,
|
||||
listen: false)
|
||||
.changeLabelVal(val!, index);
|
||||
},
|
||||
child: Container(
|
||||
padding: EdgeInsets.all(8),
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.black,
|
||||
),
|
||||
child: Icon(
|
||||
Icons.qr_code_scanner,
|
||||
size: 5 * _deviceBlockSize,
|
||||
color: Colors.white,
|
||||
),
|
||||
),
|
||||
),
|
||||
Spacer(),
|
||||
InkWell(
|
||||
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);
|
||||
Provider.of<CyclesProvider>(context,
|
||||
listen: false)
|
||||
.changeLabelVal(result, index);
|
||||
}
|
||||
},
|
||||
);
|
||||
},
|
||||
child: Container(
|
||||
padding: EdgeInsets.all(8),
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.black,
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
]),
|
||||
child: Icon(
|
||||
Icons.qr_code_scanner,
|
||||
size: 5 * _deviceBlockSize,
|
||||
color: Colors.white,
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
@@ -206,6 +209,28 @@ class AddLabelBox extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
),
|
||||
if (hasRemoveButton)
|
||||
Positioned(
|
||||
bottom: 15,
|
||||
right: 50,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
Provider.of<CyclesProvider>(context, listen: false)
|
||||
.removeLabelVal();
|
||||
},
|
||||
child: Container(
|
||||
padding: EdgeInsets.all(3),
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: iconColor,
|
||||
),
|
||||
child: Icon(
|
||||
Icons.remove,
|
||||
color: Colors.white,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
+3
-1
@@ -9,6 +9,7 @@ class ResultSearchBox extends StatelessWidget {
|
||||
required this.text,
|
||||
required this.onChanged,
|
||||
this.text2 = 'ID',
|
||||
this.textInputType = TextInputType.number,
|
||||
}) : _deviceBlockSize = deviceBlockSize,
|
||||
super(key: key);
|
||||
|
||||
@@ -17,6 +18,7 @@ class ResultSearchBox extends StatelessWidget {
|
||||
final String text;
|
||||
final String text2;
|
||||
final dynamic onChanged;
|
||||
final TextInputType textInputType;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -43,7 +45,7 @@ class ResultSearchBox extends StatelessWidget {
|
||||
fontWeight: FontWeight.w700,
|
||||
fontSize: 5 * _deviceBlockSize,
|
||||
),
|
||||
keyboardType: TextInputType.number,
|
||||
keyboardType: textInputType,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Regular → Executable
+56
-65
@@ -24,7 +24,6 @@ class _AppDrawerState extends State<AppDrawer> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final userData = Provider.of<Auth>(context, listen: false).user;
|
||||
return SafeArea(
|
||||
child: SizedBox(
|
||||
width: 250,
|
||||
@@ -193,39 +192,35 @@ class _AppDrawerState extends State<AppDrawer> {
|
||||
),
|
||||
),
|
||||
),
|
||||
userData['roles']?.contains('User') ?? false
|
||||
? Container()
|
||||
: InkWell(
|
||||
onTap: () {
|
||||
Navigator.of(context)
|
||||
.pushNamed(Routes.packageResultScreen);
|
||||
},
|
||||
child: Container(
|
||||
padding:
|
||||
EdgeInsets.symmetric(vertical: 5, horizontal: 15),
|
||||
margin: EdgeInsets.only(top: 10),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(5),
|
||||
),
|
||||
child: Row(
|
||||
children: <Widget>[
|
||||
Icon(
|
||||
Icons.all_inbox_rounded,
|
||||
color: Colors.white,
|
||||
),
|
||||
SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
Text(
|
||||
'Packages',
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
InkWell(
|
||||
onTap: () {
|
||||
Navigator.of(context).pushNamed(Routes.packageResultScreen);
|
||||
},
|
||||
child: Container(
|
||||
padding: EdgeInsets.symmetric(vertical: 5, horizontal: 15),
|
||||
margin: EdgeInsets.only(top: 10),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(5),
|
||||
),
|
||||
child: Row(
|
||||
children: <Widget>[
|
||||
Icon(
|
||||
Icons.all_inbox_rounded,
|
||||
color: Colors.white,
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
Text(
|
||||
'Packages',
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
InkWell(
|
||||
onTap: () {
|
||||
Navigator.of(context)
|
||||
@@ -256,39 +251,35 @@ class _AppDrawerState extends State<AppDrawer> {
|
||||
),
|
||||
),
|
||||
),
|
||||
userData['roles']?.contains('User') ?? false
|
||||
? Container()
|
||||
: InkWell(
|
||||
onTap: () {
|
||||
Navigator.of(context)
|
||||
.pushNamed(Routes.itemResultScreen);
|
||||
},
|
||||
child: Container(
|
||||
padding:
|
||||
EdgeInsets.symmetric(vertical: 5, horizontal: 15),
|
||||
margin: EdgeInsets.only(top: 10),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(5),
|
||||
),
|
||||
child: Row(
|
||||
children: <Widget>[
|
||||
Icon(
|
||||
Icons.book,
|
||||
color: Colors.white,
|
||||
),
|
||||
SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
Text(
|
||||
'Items',
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
InkWell(
|
||||
onTap: () {
|
||||
Navigator.of(context).pushNamed(Routes.itemResultScreen);
|
||||
},
|
||||
child: Container(
|
||||
padding: EdgeInsets.symmetric(vertical: 5, horizontal: 15),
|
||||
margin: EdgeInsets.only(top: 10),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(5),
|
||||
),
|
||||
child: Row(
|
||||
children: <Widget>[
|
||||
Icon(
|
||||
Icons.book,
|
||||
color: Colors.white,
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
Text(
|
||||
'Items',
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
InkWell(
|
||||
onTap: () {
|
||||
Navigator.of(context).pushNamed(Routes.myItemsResultScreen);
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
+38
-11
@@ -1,10 +1,14 @@
|
||||
import 'package:cssd/config/routes.dart';
|
||||
// ignore_for_file: invalid_use_of_visible_for_testing_member, deprecated_member_use
|
||||
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:cssd/providers/items.dart';
|
||||
import 'package:file_picker/file_picker.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:image_picker/image_picker.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class UploaderImage extends StatelessWidget {
|
||||
class UploaderImage extends StatefulWidget {
|
||||
final double deviceBlockSize;
|
||||
final ItemProvider providerObject;
|
||||
const UploaderImage({
|
||||
@@ -13,6 +17,11 @@ class UploaderImage extends StatelessWidget {
|
||||
required this.providerObject,
|
||||
});
|
||||
|
||||
@override
|
||||
State<UploaderImage> createState() => _UploaderImageState();
|
||||
}
|
||||
|
||||
class _UploaderImageState extends State<UploaderImage> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
@@ -24,18 +33,18 @@ class UploaderImage extends StatelessWidget {
|
||||
children: <Widget>[
|
||||
Container(
|
||||
margin: EdgeInsets.only(top: 20),
|
||||
height: providerObject.catchImages.length != 0 ? 60 : 0,
|
||||
height: widget.providerObject.catchImages.length != 0 ? 60 : 0,
|
||||
child: ImageBox(
|
||||
deviceBlockSize: deviceBlockSize,
|
||||
itemProvider: providerObject,
|
||||
deviceBlockSize: widget.deviceBlockSize,
|
||||
itemProvider: widget.providerObject,
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
height: providerObject.catchImages.length != 0 ? 10 : 0,
|
||||
height: widget.providerObject.catchImages.length != 0 ? 10 : 0,
|
||||
),
|
||||
InkWell(
|
||||
onTap: () async {
|
||||
await loadAssets(context);
|
||||
await loadAssetsFromFilePicker(context);
|
||||
},
|
||||
child: Container(
|
||||
width: MediaQuery.of(context).size.width - 40,
|
||||
@@ -57,9 +66,7 @@ class UploaderImage extends StatelessWidget {
|
||||
),
|
||||
InkWell(
|
||||
onTap: () async {
|
||||
await Navigator.of(context)
|
||||
.pushNamed(Routes.captureImageScreen);
|
||||
// await captureImage(context);
|
||||
await loadAssetsFromCamera(context);
|
||||
},
|
||||
child: Container(
|
||||
width: MediaQuery.of(context).size.width - 40,
|
||||
@@ -82,7 +89,7 @@ class UploaderImage extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> loadAssets(BuildContext context) async {
|
||||
Future<void> loadAssetsFromFilePicker(BuildContext context) async {
|
||||
var providerObject = Provider.of<ItemProvider>(context, listen: false);
|
||||
List<PlatformFile> files = providerObject.catchImages;
|
||||
try {
|
||||
@@ -98,6 +105,26 @@ class UploaderImage extends StatelessWidget {
|
||||
providerObject.setCatchImages(files);
|
||||
providerObject.setImages();
|
||||
}
|
||||
|
||||
Future<void> loadAssetsFromCamera(BuildContext context) async {
|
||||
var providerObject = Provider.of<ItemProvider>(context, listen: false);
|
||||
List<PlatformFile> _catchImages = [];
|
||||
var image = await ImagePicker.platform.pickImage(
|
||||
source: ImageSource.camera,
|
||||
);
|
||||
if (image != null) {
|
||||
_catchImages.add(
|
||||
PlatformFile(
|
||||
path: image.path,
|
||||
name: "item_image",
|
||||
bytes: File(image.path).readAsBytesSync(),
|
||||
size: File(image.path).lengthSync(),
|
||||
),
|
||||
);
|
||||
providerObject.setCatchImages(_catchImages);
|
||||
providerObject.setImages();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class ImageBox extends StatelessWidget {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user