与ScopedDecendentModel和自定义模型一起使用时,Scoped Model返回一个空列表小部件

时间:2019-01-09 04:33:08

标签: dart flutter flutter-dependencies

我一直在使用作用域类,但是它始终无法返回我的自定义Model类的特定列表,而后者又显示了我的占位符。此外,作用域模型不适用于任何地方。它仅在某些特定位置有效。

我将所有包导入重命名为“ import:'packages:...”“。 在使用ScopedModelDecendant之前,我还声明了Scoped Model,它可以呈现某些小部件,但没有返回和更新List。

这只是我使用作用域模型的代码的片段:

import 'package:flutter/material.dart';
import 'package:flutter_course/widgets/ty/products/product_card.dart'

  import 'package:flutter_course/scoped_models/products.dart';
  import 'package:flutter_course/models/product.dart';

  import 'package:scoped_model/scoped_model.dart';

  class Products extends StatelessWidget {

    Widget _buildProductList(List<Product> products, BuildContext context) {
      Widget productCards;
      if (products.length > 0) {
        productCards = ListView.builder(
          itemBuilder: (BuildContext context, int index) {
            return ProductCard(products[index], index, context);
          },
          itemCount: products.length,
        );
      } else {
        productCards = Container(child: Text('List is empty  bro!'));
      }
      print('product card just before returning main page list');
      return productCards;
    }

    @override
    Widget build(BuildContext context) {
      print('[Products Widget] build()');

    return ScopedModel<ProductsModel>(model: ProductsModel(),child: ScopedModelDescendant(builder: (BuildContext context,Widget child,ProductsModel model){
      print('building list '+model.products.toString());
      return  _buildProductList(model.products, context);
    }),);
    }
  }

1 个答案:

答案 0 :(得分:0)

在您的示例中,您正在创建一个新的作用域模型,并抛出此代码

 return ScopedModel<ProductsModel>(model: ProductsModel(),child: ScopedModelDescendant(builder: (BuildContext context,Widget child,ProductsModel model){
  print('building list '+model.products.toString());
  return  _buildProductList(model.products, context);
}),);
}

所以我相信您不会使用之前声明的主作用域模型,所以我建议您是否在代码之前就已经声明了 ScopedModel ,以免覆盖主作用域模型

return  ScopedModelDescendant(builder: (BuildContext context,Widget child,ProductsModel model){
      print('building list '+model.products.toString());
      return  _buildProductList(model.products, context);
    });
    }