۹ Morteza Moradi
خطای دایرکشن
جامعه فلاتر ایجاد شده در ۰۸ آبان ۱۴۰۱

سلام همونطوری که در تصویری که ارسال کردم میبینید برخی ایتم‌ها از چپ شروع میشن برای من و برخی درست هستند!

دلیلش چیه؟

سلام وقت بخیر

کد قسمت تکست پرداکت رو میفرستین؟ چون یادم هست یک باگی وجود داشت که برای خودم رفع کردم بفرستید میگم چیو باید حذف کنید فکر کنم 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),
                    ),
                  ),
                ]),
              );
            }),
      ),
    ]);
  }
}
Morteza Moradi ۰۸ آبان ۱۴۰۱، ۱۳:۵۶

بخش 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),
    );
  }
}
Morteza Moradi ۰۸ آبان ۱۴۰۱، ۱۴:۰۱

جواب مربوطه رو بالاتر فرستادم امیدوارم گم نکرده باشید.

متین عفتی ۰۸ آبان ۱۴۰۱، ۱۴:۰۶

بله درست هست اما من میخوام اون سه نقطه آخرش بیاد!

چه کار باید انجام دهم؟

Morteza Moradi ۰۸ آبان ۱۴۰۱، ۱۴:۱۱

سلام این مورد رو بررسی کردید؟


Morteza Moradi ۰۹ آبان ۱۴۰۱، ۰۵:۵۵

مورد رفع این مشکل در تجربیات بنده نبوده و سرچ هم کردم به نتیجه ای نرسیدم.

به منتور‌های دیگه اطلاع میدم اگر تجربه ای داشتن در اختیارتون بزارن.

متین عفتی ۱۰ آبان ۱۴۰۱، ۱۰:۱۵