Как использовать один виджет с несколькими провайдерами? - PullRequest
0 голосов
/ 09 мая 2020
  1. Мое приложение - это магазин электронной коммерции с приборной панелью, имеет несколько списков: LatestProducts, DiscountProducts, MostViewedProduct, ...

  2. Я создаю Multi Поставщики: LatestProductProvider, DiscountProductProvider, MostViewedProductProvider (фактически те же поставщики с параметром фильтра, которые получают разные отсортированные продукты)

  3. Я не хочу создавать несколько виджетов для каждого списка продуктов . Мой основной виджет повторно использует этот единственный класс виджетов:

     class _ProductsWidget extends StatelessWidget {
      const _ProductsWidget({ Key key, @required this.filter,}) : super(key: key);
      final String filter;
    
     @override
    Widget build(BuildContext context) {
       dynamic productProvider = null;
       if (filter == '0') productProvider = Provider.of<LatestProductProvider>(context);
       if (filter == '1') productProvider = Provider.of<DiscountProductProvider>(context);
       if (filter == '2') productProvider = Provider.of<MostViewedProductProvider>(context);
       return SliverToBoxAdapter(
         child: ...
            ...
            //use matched productProvider
    

Как кодировать сценарий выше? Когда я тестирую свои коды, мои списки загружают параллельные данные. это изображение - мой результат:

Результат в изображении

1 Ответ

0 голосов
/ 10 мая 2020

Отфильтруйте новейшие продукты, товары со скидкой и самые популярные продукты в вашей модели. Затем вы должны создать объект storeproducts.

class StoreProducts{
final List<Product> latest;
final List<Product> mostViewed;
final List<Product> discounted;
//if needed
final List<Product> otherProducts;

StoreProducts(this.latest,this.mostViewed,this.discounted);
}
...