在 flutter 中创建具有动态页面数的综合浏览量

tin*_*hew 6 flutter flutter-dependencies flutter-layout

请找到我创建的代码。我面临的问题是,当我增加页面视图的项目计数时,第三个项目被称为 thrise。如果有任何解决办法,请告诉我。我认为这是由于 setState 重建小部件而发生的。如果我评论 setState 它将起作用,但动态页面创建不起作用。让我知道解决这个问题的方法。

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

import '../sub_screens/single_article_item.dart';
import '../sub_screens/two_article_item.dart';
import '../sub_screens/three_article_item.dart';

class ArticleScreen extends StatefulWidget {
  @override
  _ArticleScreenState createState() => _ArticleScreenState();
}

class _ArticleScreenState extends State<ArticleScreen> {
  var homeDataList = List<Home>();
  int _pageNo = 3;

  void setPageNo(int page) {
    setState(() {
      _pageNo = page;
    });

    //notifyListeners();
  }

  @override
  Widget build(BuildContext context) {
    final vm = Provider.of<HomeViewModel>(context, listen: false);
    homeDataList.add(Home("First Article Screen"));
    homeDataList.add(Home("Second Article Screen"));
    homeDataList.add(Home("Other type Article Screen"));

    PageController controller = PageController(
      keepPage: false,
      initialPage: 0,
    );
    var currentPageValue = 0.0;

//     return ChangeNotifierProvider(create: (ctx)=> LocationProvider(),child:MaterialApp(
//       home: Scaffold(body: Container(child: LocationScreen(),)),
//     ));
//   }
// }

    return MaterialApp(
      home: SafeArea(
        child: Scaffold(
          body: Container(
            child: PageView.builder(
              controller: controller,
              itemBuilder: (context, position) {
                if (position == 0) {
                  //vm.fetchHomeData(":::third page");
                  print('first article');
                  return SingleArticleItem();
                } else if (position == 1) {
                  print('two article');
                  return TwoArticleItem();
                } else {
                  print("third article " +
                      _pageNo.toString() +
                      "::" +
                      position.toString());
                  return ThreeArticleItem(vm.getPageNo, vm.getHomeData);
                }
              },
              onPageChanged: (index) {
                if (index >= 1) {
                  //  print('onPageChanged - two article');
                  controller.addListener(() {
                    setState(() {
                      currentPageValue = controller.page;
                      _pageNo = _pageNo + 1;
                      //  print('onPageChanged - three article');
                    });
                  });
                }
              },
              // itemCount: vm.getPageNo,
              itemCount: vm.getPageNo,
              scrollDirection: Axis.vertical,
            ),
          ),
        ),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)