You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
357 lines
19 KiB
Dart
357 lines
19 KiB
Dart
import 'package:diplomaticquarterapp/config/size_config.dart';
|
|
import 'package:diplomaticquarterapp/core/viewModels/pharmacy_categorise_view_model.dart';
|
|
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
|
|
import 'package:diplomaticquarterapp/pages/pharmacies/screens/product-details/product-detail.dart';
|
|
// import 'package:diplomaticquarterapp/pages/pharmacies/product_detail.dart';
|
|
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
|
|
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
|
import 'package:diplomaticquarterapp/uitl/utils.dart';
|
|
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
|
|
import 'package:diplomaticquarterapp/widgets/input/text_field.dart';
|
|
import 'package:diplomaticquarterapp/widgets/others/StarRating.dart';
|
|
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_pharmacy_widget.dart';
|
|
import 'package:diplomaticquarterapp/widgets/others/network_base_view.dart';
|
|
import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart';
|
|
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter/services.dart';
|
|
import 'package:provider/provider.dart';
|
|
|
|
import 'base/base_view.dart';
|
|
import 'package:intl/intl.dart' as international;
|
|
|
|
class SearchProductsPage extends StatefulWidget {
|
|
@override
|
|
_SearchProductsPageState createState() => _SearchProductsPageState();
|
|
}
|
|
|
|
class _SearchProductsPageState extends State<SearchProductsPage> {
|
|
final textController = TextEditingController();
|
|
final _formKey = GlobalKey<FormState>();
|
|
String msg = '';
|
|
String validText = "";
|
|
bool isTextValid = true;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
ProjectViewModel projectProvider = Provider.of(context);
|
|
return BaseView<PharmacyCategoriseViewModel>(
|
|
onModelReady: (model) => model.clearSearchList(),
|
|
builder: (BuildContext context, PharmacyCategoriseViewModel model,
|
|
Widget child) =>
|
|
PharmacyAppScaffold(
|
|
appBarTitle: TranslationBase.of(context).search,
|
|
isBottomBar: false,
|
|
isShowAppBar: true,
|
|
backgroundColor: Colors.white,
|
|
isShowDecPage: false,
|
|
//baseViewModel: model,
|
|
body: SingleChildScrollView(
|
|
child: Container(
|
|
height: SizeConfig.screenHeight,
|
|
child: Column(
|
|
children: [
|
|
Padding(
|
|
padding: EdgeInsets.all(8.0),
|
|
child: Row(
|
|
children: [
|
|
Container(
|
|
width: MediaQuery.of(context).size.width * 0.70,
|
|
child: Form(
|
|
key: _formKey,
|
|
child: TextFields(
|
|
autoFocus: true,
|
|
hintText: TranslationBase.of(context).search,
|
|
fontSize: 14.5,
|
|
prefixIcon: Icon(Icons.search),
|
|
inputAction: TextInputAction.search,
|
|
onSaved: (value) {
|
|
//searchMedicine(model, context);
|
|
},
|
|
onSubmit: (value) {
|
|
searchMedicine(model, context);
|
|
// msg = 'No Result Found';
|
|
msg = TranslationBase.of(context).noSearchResultFound;
|
|
},
|
|
controller: textController,
|
|
),
|
|
// SizedBox(
|
|
// width: 10.0,
|
|
// ),
|
|
// if(!isTextValid)
|
|
// AppText( TranslationBase.of(context)
|
|
// .noArabicLetters, color: Colors.red,),
|
|
// ],
|
|
// ),
|
|
),
|
|
),
|
|
|
|
SizedBox(
|
|
width: 10.0,
|
|
),
|
|
InkWell(
|
|
child: Texts(
|
|
TranslationBase.of(context).cancel,
|
|
fontSize: 17.0,
|
|
fontWeight: FontWeight.w500,
|
|
),
|
|
onTap: () {
|
|
Navigator.pop(context);
|
|
},
|
|
),
|
|
|
|
// child: Container(
|
|
// child: Button(
|
|
// backgroundColor: Colors.green,
|
|
// loading: model.state == ViewState.BusyLocal,
|
|
// label: 'Search',
|
|
// onTap: () {
|
|
// searchMedicine(model, context);
|
|
// }),
|
|
// width: MediaQuery.of(context).size.width * 0.09,
|
|
// ),
|
|
],
|
|
),
|
|
),
|
|
Center(
|
|
child: NetworkBaseView(
|
|
baseViewModel: model,
|
|
child: model.searchList.isNotEmpty
|
|
? InkWell(
|
|
child: Container(
|
|
height: MediaQuery.of(context).size.height * 0.80,
|
|
child: GridView.builder(
|
|
//physics: NeverScrollableScrollPhysics(),
|
|
gridDelegate:
|
|
SliverGridDelegateWithFixedCrossAxisCount(
|
|
crossAxisCount: 2,
|
|
crossAxisSpacing: 0.5,
|
|
mainAxisSpacing: 2.0,
|
|
childAspectRatio: 1.0,
|
|
),
|
|
itemCount: model.searchList.length,
|
|
itemBuilder: (BuildContext context, int index) {
|
|
return InkWell(
|
|
child: Card(
|
|
color: model.searchList[index]
|
|
.discountName !=
|
|
null
|
|
? Color(0xffFFFF00)
|
|
: Colors.white,
|
|
elevation: 0,
|
|
shape: Border(
|
|
right: BorderSide(
|
|
color: Colors.grey.shade300,
|
|
width: 1,
|
|
),
|
|
left: BorderSide(
|
|
color: Colors.grey.shade300,
|
|
width: 1,
|
|
),
|
|
bottom: BorderSide(
|
|
color: Colors.grey.shade300,
|
|
width: 1,
|
|
),
|
|
top: BorderSide(
|
|
color: Colors.grey.shade300,
|
|
width: 1,
|
|
),
|
|
),
|
|
margin: EdgeInsets.symmetric(
|
|
horizontal: 8,
|
|
vertical: 4,
|
|
),
|
|
child: Container(
|
|
decoration: BoxDecoration(
|
|
borderRadius: BorderRadius.only(
|
|
topLeft: Radius.circular(110.0),
|
|
),
|
|
color: Colors.white,
|
|
),
|
|
padding:
|
|
EdgeInsets.symmetric(horizontal: 0),
|
|
width:
|
|
MediaQuery.of(context).size.width /
|
|
3,
|
|
child: Column(
|
|
crossAxisAlignment:
|
|
CrossAxisAlignment.start,
|
|
children: [
|
|
Stack(
|
|
children: [
|
|
Container(
|
|
margin: EdgeInsets.fromLTRB(
|
|
0, 16, 0, 0),
|
|
alignment: Alignment.center,
|
|
child: Image.network(
|
|
model.searchList[index]
|
|
.images.isNotEmpty
|
|
? model
|
|
.searchList[index]
|
|
.images[0]
|
|
.thumb
|
|
: 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/6c/No_image_3x4.svg/1200px-No_image_3x4.svg.png',
|
|
fit: BoxFit.cover,
|
|
height: 80,
|
|
),
|
|
),
|
|
Container(
|
|
width: model.searchList[index]
|
|
.rxMessage !=
|
|
null
|
|
? MediaQuery.of(context)
|
|
.size
|
|
.width /
|
|
5
|
|
: 0,
|
|
padding: EdgeInsets.all(4),
|
|
decoration: BoxDecoration(
|
|
color: Color(0xffb23838),
|
|
borderRadius:
|
|
BorderRadius.only(
|
|
topLeft:
|
|
Radius.circular(
|
|
6)),
|
|
),
|
|
child: model.searchList[index]
|
|
.rxMessage !=
|
|
null
|
|
? Texts(
|
|
projectProvider
|
|
.isArabic
|
|
? model
|
|
.searchList[
|
|
index]
|
|
.rxMessagen
|
|
: model
|
|
.searchList[
|
|
index]
|
|
.rxMessage,
|
|
color: Colors.white,
|
|
regular: true,
|
|
fontSize: 10,
|
|
fontWeight:
|
|
FontWeight.w400,
|
|
)
|
|
: Texts(""),
|
|
// Texts(
|
|
// model.searchList[index]
|
|
// .rxMessage !=
|
|
// null
|
|
// ? model
|
|
// .searchList[index]
|
|
// .rxMessage
|
|
// : "",
|
|
// color: Colors.white,
|
|
// regular: true,
|
|
// fontSize: 10,
|
|
// fontWeight: FontWeight.w400,
|
|
// ),
|
|
),
|
|
],
|
|
),
|
|
Container(
|
|
margin: EdgeInsets.symmetric(
|
|
horizontal: 6,
|
|
vertical: 0,
|
|
),
|
|
child: Column(
|
|
crossAxisAlignment:
|
|
CrossAxisAlignment.start,
|
|
children: [
|
|
Texts(
|
|
projectProvider.isArabic
|
|
? model
|
|
.searchList[index]
|
|
.namen
|
|
: model
|
|
.searchList[index]
|
|
.name,
|
|
|
|
// model.searchList[index].name,
|
|
regular: true,
|
|
fontSize: 12,
|
|
fontWeight: FontWeight.w400,
|
|
),
|
|
Padding(
|
|
padding:
|
|
const EdgeInsets.only(
|
|
top: 4, bottom: 4),
|
|
child: Texts(
|
|
"SAR ${model.searchList[index].price}",
|
|
bold: true,
|
|
fontSize: 14,
|
|
),
|
|
),
|
|
Row(
|
|
children: [
|
|
StarRating(
|
|
totalAverage: model
|
|
.searchList[
|
|
index]
|
|
.approvedRatingSum >
|
|
0
|
|
? (model
|
|
.searchList[
|
|
index]
|
|
.approvedRatingSum
|
|
.toDouble() /
|
|
model
|
|
.searchList[
|
|
index]
|
|
.approvedRatingSum
|
|
.toDouble())
|
|
.toDouble()
|
|
: 0,
|
|
forceStars: true),
|
|
Texts(
|
|
"(${model.searchList[index].approvedTotalReviews})",
|
|
regular: true,
|
|
fontSize: 10,
|
|
fontWeight:
|
|
FontWeight.w400,
|
|
)
|
|
],
|
|
),
|
|
],
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
onTap: () => {
|
|
Navigator.push(
|
|
context,
|
|
FadePage(
|
|
page: ProductDetailPage(
|
|
model.searchList[index]),
|
|
)),
|
|
},
|
|
);
|
|
},
|
|
),
|
|
),
|
|
)
|
|
: Texts(msg),
|
|
),
|
|
)
|
|
],
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
bool isRTL(String text) {
|
|
return international.Bidi.detectRtlDirectionality(text);
|
|
}
|
|
|
|
searchMedicine(PharmacyCategoriseViewModel model, BuildContext context) {
|
|
Utils.hideKeyboard(context);
|
|
if (_formKey.currentState.validate())
|
|
model.searchProducts(productName: textController.text);
|
|
}
|
|
}
|