سلام همونطوری که در تصویری که ارسال کردم میبینید برخی ایتمها از چپ شروع میشن برای من و برخی درست هستند!
دلیلش چیه؟
سلام وقت بخیر
کد قسمت تکست پرداکت رو میفرستین؟ چون یادم هست یک باگی وجود داشت که برای خودم رفع کردم بفرستید میگم چیو باید حذف کنید فکر کنم TextAlign بود
class HorizontalProductList extends StatelessWidget { final String title; final GestureTapCallback onTap; final List products; const HorizontalProductList({ Key? key, required this.title, required this.onTap, required this.products, }) : super(key: key); @override Widget build(BuildContext context) { return Column(children: [ Padding( padding: EdgeInsets.only(right: 15, left: 5), child: Row( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( title, style: Theme.of(context).textTheme.subtitle1, ), TextButton(onPressed: onTap, child: Text("مشاهده همه")) ], ), ), SizedBox( height: 310, child: ListView.builder( physics: defaultScrollPhysics, scrollDirection: Axis.horizontal, itemCount: products.length, itemBuilder: (context, index) { final ProductEntity product = products[index]; return Padding( padding: const EdgeInsets.only(left: 5, right: 5), child: Stack(children: [ SizedBox( width: 176, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ ImageLoadingService( url: product.imageUrl, borderRadius: BorderRadius.circular(12), ), const SizedBox(height: 8,), Padding( padding: const EdgeInsets.only(right: 10), child: Text(product.title,maxLines: 1,overflow: TextOverflow.ellipsis,)), const SizedBox(height: 8,), Padding( padding: const EdgeInsets.only(right: 10), child: Text(pricalbe(product.discount),style: Theme.of(context).textTheme.caption!.copyWith(decoration: TextDecoration.lineThrough))), const SizedBox(height: 4,), Padding( padding: const EdgeInsets.only(right: 10), child: Text(pricalbe(product.price))) ], ), ), Positioned( top: 10, right: 20, child: Container( alignment: Alignment.center, width: 32, height: 32, child: Icon(CupertinoIcons.heart), decoration: BoxDecoration( shape: BoxShape.circle, color: Colors.white), ), ), ]), ); }), ), ]); } }
بخش ProductItem منظورم هست
ببخشید فکر کردم شما به جداسازی فایلها رسیدید
Padding( padding: const EdgeInsets.all(8), child: Text( product.title, maxLines: 1, ), ),
قسمت عنوان محصول رو به این شکل بنویسید ببینید درست میشه؟
class ProductEntity { final int id; final String title; final String imageUrl; final int price; final int discount; final int previousPrice; ProductEntity(this.id, this.title, this.imageUrl, this.price, this.discount, this.previousPrice); ProductEntity.fromJson(Map json) : id = json['id'], title = json['title'], imageUrl = json['image'], price = json['price'], previousPrice = json['previous_price'] ?? json['price'], discount = json['discount']; Map toJson() { final Map data = {}; data['id'] = id; data['title'] = title; data['imageUrl'] = imageUrl; data['price'] = price; data['discount'] = discount; data['previousPrice'] = previousPrice; return data; } } class HomeScreen extends StatelessWidget { const HomeScreen({super.key}); @override Widget build(BuildContext context) { return BlocProvider( create: (context) { final homeBlock = HomeBloc( bannerRepository: bannerRepository, productRepository: productRepository); homeBlock.add(HomeStartedEvent()); return homeBlock; }, child: Scaffold( body: SafeArea( child: BlocBuilder( builder: (context, state) { if (state is HomeSuccessState) { return ListView.builder( itemCount: 5, itemBuilder: (context, index) { switch (index) { case 0: return Container( height: 56, alignment: Alignment.center, child: Image.asset( "assets/img/nike_logo.png", height: 32, fit: BoxFit.fitHeight, ), ); case 2: return BannerSlider( banners: state.banner, ); case 3: return HorizontalProductList( title: "جدیدترین", onTap: () {}, products: state.latestProducts, ); case 4: return HorizontalProductList( title: "پربازدیدترین", onTap: () {}, products: state.popularProducts, ); default: return Container(); } }); } else if (state is HomeLoadingState) { return const Center( child: CircularProgressIndicator(), ); } else if (state is HomeErrorState) { return Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Text(state.exception.message), ElevatedButton( onPressed: () { BlocProvider.of(context) .add(HomeRefreshEvent()); }, child: const Text("Try Again")) ], ), ); } else { throw Exception("state is not support"); } }, ), ), ), ); } } class HorizontalProductList extends StatelessWidget { final String title; final GestureTapCallback onTap; final List products; const HorizontalProductList({ Key? key, required this.title, required this.onTap, required this.products, }) : super(key: key); @override Widget build(BuildContext context) { return Column(children: [ Padding( padding: EdgeInsets.only(right: 15, left: 5), child: Row( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( title, style: Theme.of(context).textTheme.subtitle1, ), TextButton(onPressed: onTap, child: Text("مشاهده همه")) ], ), ), SizedBox( height: 310, child: ListView.builder( physics: defaultScrollPhysics, scrollDirection: Axis.horizontal, itemCount: products.length, itemBuilder: (context, index) { final ProductEntity product = products[index]; return Padding( padding: const EdgeInsets.only(left: 5, right: 5), child: Stack(children: [ SizedBox( width: 176, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ ImageLoadingService( url: product.imageUrl, borderRadius: BorderRadius.circular(12), ), const SizedBox(height: 8,), Padding( padding: const EdgeInsets.only(right: 10), child: Text(product.title,maxLines: 1,overflow: TextOverflow.ellipsis,)), const SizedBox(height: 8,), Padding( padding: const EdgeInsets.only(right: 10), child: Text(pricalbe(product.discount),style: Theme.of(context).textTheme.caption!.copyWith(decoration: TextDecoration.lineThrough))), const SizedBox(height: 4,), Padding( padding: const EdgeInsets.only(right: 10), child: Text(pricalbe(product.price))) ], ), ), Positioned( top: 10, right: 20, child: Container( alignment: Alignment.center, width: 32, height: 32, child: Icon(CupertinoIcons.heart), decoration: BoxDecoration( shape: BoxShape.circle, color: Colors.white), ), ), ]), ); }), ), ]); } } class ImageLoadingService extends StatelessWidget { final String url; final BorderRadius? borderRadius; const ImageLoadingService({ Key? key, required this.url, this.borderRadius, }) : super(key: key); @override Widget build(BuildContext context) { return Padding( padding: EdgeInsets.only(right: 10,left: 10), child: ClipRRect( borderRadius: borderRadius, child: CachedNetworkImage( fit: BoxFit.cover, imageUrl: url, ), ), ); } } class _Slide extends StatelessWidget { const _Slide({ Key? key, required this.banner, }) : super(key: key); final BannerEntity banner; @override Widget build(BuildContext context) { return ImageLoadingService( url: banner.image, borderRadius: BorderRadius.circular(15), ); } }
جواب مربوطه رو بالاتر فرستادم امیدوارم گم نکرده باشید.
بله درست هست اما من میخوام اون سه نقطه آخرش بیاد!
چه کار باید انجام دهم؟
سلام این مورد رو بررسی کردید؟
مورد رفع این مشکل در تجربیات بنده نبوده و سرچ هم کردم به نتیجه ای نرسیدم.
به منتورهای دیگه اطلاع میدم اگر تجربه ای داشتن در اختیارتون بزارن.