Files
fcs/lib/pages/package_search/package_serach.dart

165 lines
5.3 KiB
Dart
Raw Normal View History

2020-10-07 02:33:06 +06:30
import 'package:fcs/domain/entities/package.dart';
import 'package:fcs/helpers/theme.dart';
import 'package:fcs/pages/package/model/package_model.dart';
import 'package:fcs/pages/package/package_list_row.dart';
2020-10-11 02:17:23 +06:30
import 'package:fcs/pages/widgets/barcode_scanner.dart';
2024-01-25 17:40:35 +06:30
import 'package:flutter/cupertino.dart';
2020-09-18 04:04:21 +06:30
import 'package:flutter/material.dart';
2021-09-10 12:00:08 +06:30
import 'package:flutter_vector_icons/flutter_vector_icons.dart';
2020-09-18 04:04:21 +06:30
import 'package:provider/provider.dart';
2021-09-10 12:00:08 +06:30
Future<Package?> searchPackage(BuildContext context,
{CallbackPackageSelect? callbackPackageSelect}) async =>
2020-09-18 04:04:21 +06:30
await showSearch<Package>(
context: context,
delegate:
PackageSearchDelegate(callbackPackageSelect: callbackPackageSelect),
);
class PackageSearchDelegate extends SearchDelegate<Package> {
2021-09-10 12:00:08 +06:30
final CallbackPackageSelect? callbackPackageSelect;
2020-09-18 04:04:21 +06:30
PackageSearchDelegate({this.callbackPackageSelect});
@override
2020-09-18 21:33:41 +06:30
String get searchFieldLabel => 'Search by Tracking ID/Customer Name';
2020-09-18 04:04:21 +06:30
@override
ThemeData appBarTheme(BuildContext context) {
final ThemeData theme = Theme.of(context);
return theme.copyWith(
2021-09-13 11:10:17 +06:30
appBarTheme: AppBarTheme(color: primaryColor),
2024-01-25 17:40:35 +06:30
iconButtonTheme: IconButtonThemeData(
style: ButtonStyle(
iconColor: MaterialStateProperty.all<Color>(Colors.white))),
2020-09-18 04:04:21 +06:30
inputDecorationTheme: InputDecorationTheme(
2021-09-13 10:17:04 +06:30
border: InputBorder.none,
2024-01-25 17:40:35 +06:30
hintStyle: TextStyle(color: Colors.grey, fontSize: 14)),
2021-09-13 11:10:17 +06:30
textTheme: TextTheme(
2024-01-25 17:40:35 +06:30
displayLarge: TextStyle(
color: theme.primaryTextTheme.displayLarge?.color,
2021-09-13 11:10:17 +06:30
fontSize: 16,
backgroundColor: primaryColor)),
2020-09-18 04:04:21 +06:30
primaryColor: primaryColor,
);
}
@override
List<Widget> buildActions(BuildContext context) {
return [
2020-09-18 21:33:41 +06:30
IconButton(
icon: Icon(MaterialCommunityIcons.barcode_scan,
size: 30, color: Colors.white),
onPressed: () => _scan(context),
),
2020-09-18 04:04:21 +06:30
IconButton(
icon: Icon(Icons.clear),
onPressed: () => query = '',
),
];
}
@override
Widget buildLeading(BuildContext context) {
return IconButton(
2024-01-25 17:40:35 +06:30
icon: Icon(CupertinoIcons.back),
2021-09-10 12:00:08 +06:30
onPressed: () => close(context, new Package()),
2020-09-18 04:04:21 +06:30
);
}
@override
Widget buildResults(BuildContext context) {
final packageModel = Provider.of<PackageModel>(context);
return FutureBuilder(
future: packageModel.searchPackage(query),
builder: (context, AsyncSnapshot<List<Package>> snapshot) {
if (snapshot.hasData) {
2021-09-10 12:00:08 +06:30
if (snapshot.data!.length == 0) {
2020-09-18 04:04:21 +06:30
return Container(
child: Center(
child: Text(
"No result found",
textAlign: TextAlign.center,
),
),
);
}
return Container(
padding: EdgeInsets.only(top: 15),
child: ListView(
2021-09-10 12:00:08 +06:30
children: snapshot.data!
2020-09-18 21:33:41 +06:30
.map((u) => PackageListRow(
2020-09-18 04:04:21 +06:30
package: u,
callbackPackageSelect: callbackPackageSelect,
))
.toList(),
),
);
} else if (snapshot.hasError) {
return Container(
child: Center(
child: Text(
'${snapshot.error}',
textAlign: TextAlign.center,
),
),
);
} else {
return Container(
child: Center(
child: CircularProgressIndicator(
valueColor:
new AlwaysStoppedAnimation<Color>(primaryColor)),
),
);
}
});
}
@override
Widget buildSuggestions(BuildContext context) {
return Container(
child: Center(
child: Opacity(
opacity: 0.2,
2020-09-18 21:33:41 +06:30
child: Icon(Octicons.package, size: 200, color: primaryColor)),
2020-09-18 04:04:21 +06:30
),
);
}
2020-09-18 21:33:41 +06:30
_scan(BuildContext context) async {
2021-09-10 12:00:08 +06:30
// PermissionStatus permission =
// await PermissionHandler().checkPermissionStatus(PermissionGroup.camera);
// if (permission != PermissionStatus.granted) {
// Map<PermissionGroup, PermissionStatus> permissions =
// await PermissionHandler()
// .requestPermissions([PermissionGroup.camera]);
// if (permissions[PermissionGroup.camera] != PermissionStatus.granted) {
// showMsgDialog(context, "Error", "Camera permission is not granted");
// return null;
// }
// }
2020-09-18 21:33:41 +06:30
try {
2020-10-09 02:42:21 +06:30
// PickedFile pickedFile =
// await ImagePicker().getImage(source: ImageSource.camera);
// FirebaseVisionImage visionImage =
// FirebaseVisionImage.fromFile(File(pickedFile.path));
// final BarcodeDetector barcodeDetector =
// FirebaseVision.instance.barcodeDetector();
// final List<Barcode> barcodes =
// await barcodeDetector.detectInImage(visionImage);
// Barcode bc = barcodes.firstWhere((element) => true);
// String barcode;
// if (bc != null) barcode = bc.rawValue;
2021-09-10 17:14:59 +06:30
String? barcode = await scanBarcode();
2020-09-18 21:33:41 +06:30
if (barcode != null) {
query = barcode;
showResults(context);
}
} catch (e) {
print('error: $e');
}
}
2020-09-18 04:04:21 +06:30
}