Перечень пунктов с блоком - PullRequest
0 голосов
/ 03 мая 2020

Добавление товара в список работает хорошо. Я хочу отобразить сохраненный список товаров в другом виджете. Но если я вернусь на home_screen, список продуктов сбрасывается. Как это решить?

class ProductUi extends StatelessWidget { 
 ProductTest productTest;
  ProductUi(this.productTest);

  @override
  Widget build(BuildContext context) {
    final  productBloc = BlocProvider.of<ProductBloc>(context);
    return Scaffold(
      body: Container(
          child: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(productTest.name),
            RaisedButton(
              onPressed: () {
                productBloc.add(AddToCart(productTest: productTest));
              },
              child: Text('add to cart'),
            ),
          ],
        ),
      )),
    );
  }
}

Функция

 class CartService {
     List<ProductTest> cartProduct = [];
      Future addProduct(ProductTest productTest) async {
        return cartProduct.add(productTest);      
      }
    }

ProductBlo c

class ProductBloc extends Bloc<ProductEvent, ProductState> {
      CartService cartService = CartService();
      ProductBloc({@required this.cartService});
      @override
      ProductState get initialState => ProductInitial();

      @override
      Stream<ProductState> mapEventToState(ProductEvent event) async* {
        if (event is AddToCart) {
          await cartService.addProduct(event.productTest);
        }
      }
    }

ProductEvent

class AddToCart extends ProductEvent {
      ProductTest productTest;   
      AddToCart({this.productTest});
      @override
      List<Object> get props => [];
    }

Главный экран, Категория, ProductList

 class HomeScreenTest extends StatefulWidget {
      @override
      _HomeScreenTestState createState() => _HomeScreenTestState();
    }

class _HomeScreenTestState extends State<HomeScreenTest> {
  CartService cartService = CartService();

  @override
  Widget build(BuildContext context) {    
    return Scaffold(
      body: CategoryTest(),
    );
  }
}




  class CategoryTest extends StatefulWidget {
      @override
      _CategoryTestState createState() => _CategoryTestState();
    }

class _CategoryTestState extends State<CategoryTest> {
  CartService cartService = CartService();
  @override
  Widget build(BuildContext context) {
    BlocProvider.of<ProductBloc>(context)..add(LoadCategoriesEvent());
    return Scaffold(
      body: SingleChildScrollView(
        child: Padding(
          padding: EdgeInsets.fromLTRB(20, 15, 20, 15),
          child: Column(
            children: <Widget>[
              BlocBuilder<ProductBloc, ProductState>(
                builder: (context, state) {
                  if (state is ProductLoaded) {
                    return categoryColumn(
                        state.categoriesTest, state.productTest);
                  } else {
                    return Container();
                  }
                },
              )
            ],
          ),
        ),
      ),
    );
  }

  Widget categoryColumn(
      List<CategoriesTest> categoriesTest, List<ProductTest> productTest) {
    return Column(
      children: categoriesTest.map((category) {
        return Card(
          child: InkWell(
            onTap: () {
              Navigator.push(
                  context,
                  MaterialPageRoute(
                      builder: (context) => BlocProvider(
                          create: (context) =>
                              ProductBloc(cartService: cartService),
                          child: ProductList(
                            categoriesTest: category,                               
                          ))));
            },
            child: Container(
              padding: EdgeInsets.all(20),
              child: Column(
                children: <Widget>[
                  Text(
                    category.categoryname,
                  ),
                ],
              ),
            ),
          ),
        );
      }).toList(),
    );
  }


class ProductList extends StatefulWidget {
  CategoriesTest categoriesTest;
  ProductList({@required this.categoriesTest});

  @override
  _ProductListState createState() => _ProductListState();
}

class _ProductListState extends State<ProductList> {
  CartService cartService = CartService();

  @override
  Widget build(BuildContext context) {
    BlocProvider.of<ProductBloc>(context)..add(LoadProductListEvent());
    return Scaffold(
      body: SingleChildScrollView(
        child: Padding(
          padding: EdgeInsets.fromLTRB(20, 30, 20, 15),
          child: Column(
            children: <Widget>[
              BlocBuilder<ProductBloc, ProductState>(
                builder: (context, state) {
                  if (state is ProductListLoaded) {
                    return tableListColumn(
                        state.productTest, widget.categoriesTest);
                  } else {
                    return Container();
                  }
                },
              )
            ],
          ),
        ),
      ),
    );
  }

  Widget tableListColumn(
      List<ProductTest> productTest, CategoriesTest categoriesTest) {
    return Column(
      children: productTest
          .where((product) => product.category == categoriesTest.categoryname)
          .map((product) {
        return Card(
          child: InkWell(
            onTap: () {
              Navigator.push(
                  context,
                  MaterialPageRoute(
                      builder: (context) => BlocProvider(
                          create: (context) =>
                              ProductBloc(cartService: cartService),
                          child: ProductUi(product))));
            },
            child: Container(
              padding: EdgeInsets.all(15),
              child: Column(
                children: <Widget>[
                  Image.network(product.image),
                  Text(product.name),
                ],
              ),
            ),
          ),
        );
      }).toList(),
    );
  }
}

Между виджетом «Категория» и виджетом «ProducList» список продуктов не сбрасывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...