diff --git a/packages/chicken/lib/presentation/pages/buy_in_province/logic.dart b/packages/chicken/lib/presentation/pages/buy_in_province/logic.dart new file mode 100644 index 0000000..3df5e79 --- /dev/null +++ b/packages/chicken/lib/presentation/pages/buy_in_province/logic.dart @@ -0,0 +1,15 @@ +import 'package:get/get.dart'; + +class BuyInProvinceLogic extends GetxController { + @override + void onReady() { + // TODO: implement onReady + super.onReady(); + } + + @override + void onClose() { + // TODO: implement onClose + super.onClose(); + } +} diff --git a/packages/chicken/lib/presentation/pages/buy_in_province/view.dart b/packages/chicken/lib/presentation/pages/buy_in_province/view.dart new file mode 100644 index 0000000..ae222d6 --- /dev/null +++ b/packages/chicken/lib/presentation/pages/buy_in_province/view.dart @@ -0,0 +1,16 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +import 'logic.dart'; + +class BuyInProvincePage extends GetView { + const BuyInProvincePage({super.key}); + + @override + Widget build(BuildContext context) { + + return Container( + color: Colors.amberAccent, + ); + } +} diff --git a/packages/chicken/lib/presentation/widget/search/logic.dart b/packages/chicken/lib/presentation/widget/search/logic.dart new file mode 100644 index 0000000..4379a4a --- /dev/null +++ b/packages/chicken/lib/presentation/widget/search/logic.dart @@ -0,0 +1,21 @@ +import 'package:rasadyar_core/core.dart'; + +class SearchLogic extends GetxController { + final RxBool isSearchSelected = false.obs; + + final RxnString searchValue = RxnString(); + + void setSearchCallback(void Function(String)? onSearchChanged) { + debounce(searchValue, (val) { + if (val != null && val.trim().isNotEmpty) { + onSearchChanged?.call(val); + } + }, time: const Duration(milliseconds: 600)); + } + + void toggleSearch() { + isSearchSelected.value = !isSearchSelected.value; + } + + +} diff --git a/packages/chicken/lib/presentation/widget/search/view.dart b/packages/chicken/lib/presentation/widget/search/view.dart new file mode 100644 index 0000000..e0f088e --- /dev/null +++ b/packages/chicken/lib/presentation/widget/search/view.dart @@ -0,0 +1,55 @@ +import 'package:flutter/material.dart'; +import 'package:rasadyar_core/core.dart'; + +import 'logic.dart'; + +class SearchWidget extends StatefulWidget { + const SearchWidget({super.key, this.onSearchChanged}); + + final void Function(String)? onSearchChanged; + + @override + State createState() => _SearchWidgetState(); +} + +class _SearchWidgetState extends State { + late final SearchLogic controller; + + @override + void initState() { + super.initState(); + controller = Get.find(); + controller.setSearchCallback(widget.onSearchChanged); + } + + @override + Widget build(BuildContext context) { + return ObxValue((data) { + return AnimatedContainer( + duration: const Duration(milliseconds: 300), + padding: const EdgeInsets.only(top: 5), + curve: Curves.easeInOut, + height: data.value ? 50 : 0, + child: Visibility( + visible: data.value, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 8), + child: RTextField( + suffixIcon: Padding( + padding: const EdgeInsets.all(12.0), + child: Assets.vec.searchSvg.svg( + width: 10, + height: 10, + colorFilter: ColorFilter.mode(AppColor.blueNormal, BlendMode.srcIn), + ), + ), + hintText: 'جستجو', + controller: TextEditingController(), + onChanged: (val) => controller.searchValue.value = val, + ), + ), + ), + ); + }, controller.isSearchSelected); + } +} diff --git a/packages/core/lib/presentation/widget/empty_widget.dart b/packages/core/lib/presentation/widget/empty_widget.dart new file mode 100644 index 0000000..b727b41 --- /dev/null +++ b/packages/core/lib/presentation/widget/empty_widget.dart @@ -0,0 +1,21 @@ +import 'package:flutter/material.dart'; +import 'package:rasadyar_core/core.dart'; + +class EmptyWidget extends StatelessWidget { + const EmptyWidget({super.key}); + + @override + Widget build(BuildContext context) { + return Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Row(), + Assets.icons.empty.svg(width: 156.w, height: 156.h), + Text('داده ای یافت نشد', style: AppFonts.yekan20.copyWith(color: AppColor.textColor)), + ], + ), + ); + } +} diff --git a/packages/core/lib/presentation/widget/list_view/list_view.dart b/packages/core/lib/presentation/widget/list_view/list_view.dart new file mode 100644 index 0000000..5336777 --- /dev/null +++ b/packages/core/lib/presentation/widget/list_view/list_view.dart @@ -0,0 +1,3 @@ + +export 'r_shimmer_list.dart'; +export 'r_paginated_list_view.dart'; diff --git a/packages/core/lib/presentation/widget/loading_widget.dart b/packages/core/lib/presentation/widget/loading_widget.dart new file mode 100644 index 0000000..d514e49 --- /dev/null +++ b/packages/core/lib/presentation/widget/loading_widget.dart @@ -0,0 +1,14 @@ +import 'package:flutter/material.dart'; +import 'package:rasadyar_core/core.dart'; + +class LoadingWidget extends StatelessWidget { + const LoadingWidget({super.key}); + + @override + Widget build(BuildContext context) { + return Expanded(child: Center(child: Assets.anim.loading.lottie( + width: 120.w, + height: 120.h, + ))); + } +}