Flutter Listview Builder导致重新加载消费者在颤振中

Flutter Listview Builder导致重新加载消费者在颤振中,flutter,dart,flutter-provider,Flutter,Dart,Flutter Provider,我在消费者内部使用Listview,当我向下滚动时,它会重新加载消费者提供者 这是我的完整代码 class UnitScreen extends StatefulWidget { @override _UnitScreenState createState() => _UnitScreenState(); } class _UnitScreenState extends State<UnitScreen> { Future<void> _getUnit

我在消费者内部使用Listview,当我向下滚动时,它会重新加载消费者提供者

这是我的完整代码

class UnitScreen extends StatefulWidget {
  @override
  _UnitScreenState createState() => _UnitScreenState();
}

class _UnitScreenState extends State<UnitScreen> {
  Future<void> _getUnits(BuildContext context) async {
    return Provider.of<UnitProvider>(context, listen: false).getUnits();
  }

  Widget _buildUnits(List<Unit> units) {
    return ListView.builder(
      itemCount: units.length,
      itemBuilder: (BuildContext ctx, index) => DisplayItem(
        title: units[index].name,
        id: units[index].id
      ),
    );
  }

  @override
  void initState() {
    Future.delayed(Duration.zero, () {
      _getUnits(context);
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    print('inside build');
    return Scaffold(
        appBar: SearchableAppBar(
          title: "Unit"
        ),
        drawer: AppDrawer(),
        body: RefreshIndicator(
            onRefresh: () => _getUnits(context),
            child: Consumer<UnitProvider>(builder: (ctx, snapshot, child) {
              print('inside consumer');
              switch (snapshot.unitList.status) {
                case Status.LOADING:
                  return Center(child: CircularProgressIndicator());
                  break;
                case Status.COMPLETED:
                  return _buildUnits(snapshot.unitList.data);
                  break;
                default:
                  return ErrorWithRetry();
              }
            }));
  }
}
在加载单元之后,当我向下滚动时,它会重新加载消费者,正如你们所看到的,我已经在消费者内部调用了print方法,我可以在调试控制台中多次看到消费者内部


我不熟悉flifter,所以这是默认行为还是我在这里做错了什么?

我认为最好这样做,将实例添加到类中,并直接从类中调用方法:

小部件构建上下文上下文{ 返回ChangeNotifierProvider create:context=>UnitProvider.instance, 孩子:脚手架 appBar:SearchableAppBar 标题:单位 , 出票人:AppDrawer, 正文:Consumerbuilder:上下文、快照、子{ 返回刷新指示器 onRefresh:=>snapshot.getUnitscontext, 儿童:
现在,您可以将视图和模型完全分离,这是非常干净的代码,并且您尊重MVC、MVVM或。。。