🎮Cubit List<Map<String, dynamic>>

ui

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_lessons_in_the_evening/coffee_shop/cubit/coffee_cubit.dart';
import 'package:flutter_lessons_in_the_evening/coffee_shop/widget/app_bar_widget.dart';
import 'package:flutter_lessons_in_the_evening/coffee_shop/widget/product_card.dart';
import 'package:flutter_lessons_in_the_evening/coffee_shop/widget/text_form_filed_widget.dart';

class CoffeeScreen extends StatefulWidget {
  const CoffeeScreen({super.key});

  @override
  State<CoffeeScreen> createState() => _CoffeeScreenState();
}

class _CoffeeScreenState extends State<CoffeeScreen> {
  final TextEditingController controller = TextEditingController();

  // @override
  // void initState() {
  //   // TODO: implement initState
  //   getAllProducts();
  //   super.initState();
  // }

  @override
  void dispose() {
    // TODO: implement dispose
    super.dispose();
    controller.dispose();
  }

  void getAllProducts() {
    context.read<CoffeeCubit>().getAllProducts();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: PreferredSize(
        preferredSize: Size.fromHeight(100),
        child: AppBarWidget(count: 0),
      ),
      body: Padding(
        padding: const EdgeInsets.symmetric(horizontal: 10),
        child: BlocBuilder<CoffeeCubit, CoffeeState>(
          builder: (context, state) {
            return switch (state) {
              CoffeeInitial() => ElevatedButton(
                onPressed: () {
                  getAllProducts();
                },
                child: Text('Получить данные'),
              ),
              CoffeeLoading() => Center(
                child: CircularProgressIndicator(),
              ),
              CoffeeError(error: String error) => Center(
                child: Text(error),
              ),
              CoffeeSuccess(data: List<Map<String, dynamic>> data) =>
                SingleChildScrollView(
                  child: Column(
                    children: [
                      TextFormFiledWidget(controller: controller),
                      GridView.builder(
                        shrinkWrap: true,
                        itemCount: data.length,
                        physics: NeverScrollableScrollPhysics(),
                        gridDelegate:
                            SliverGridDelegateWithFixedCrossAxisCount(
                              crossAxisCount: 2,
                              mainAxisSpacing: 10,
                              crossAxisSpacing: 10,
                              childAspectRatio: 0.65,
                            ),
                        itemBuilder: (context, index) {
                          final newData = data[index];
                          return ProductCard(
                            like: newData['isLike'],
                            image: newData['image'],
                            title: newData['title'],
                            price: newData['price'],
                            count: newData['count'],
                            likePressed: () {},
                            remove: () {},
                            add: () {},
                          );
                        },
                      ),
                    ],
                  ),
                ),
            };
          },
        ),
      ),
    );
  }
}

cubit

repository

Last updated