Flutter : Issue with to display CategoryWise Newslist Dynamic in TabBarView by passing CategoryId?

Viewed 20

eg:details about the questions...................................................... I want to display newslist when i change the tabs . I've create Tabs dynamic but the problem with to pass that Category_id to get Newslist in TabBarView and i've also addListener to TabController not working perfect.i've two api one for category and another is for categorywise newslist. Problem with handle controller. Below i've attached the codes . Please find and help me out with this issues.

DashboardActivity

import 'package:double_back_to_close_app/double_back_to_close_app.dart';
import 'package:flutter/material.dart';
import 'package:newsbell/Controller/catwise_newslist_controller.dart';
import 'package:newsbell/ModelClass/category_model.dart';
import 'package:newsbell/ModelClass/catwise_newslist_model.dart';
import 'package:newsbell/NavDrawer/NavDrawer.dart';
import 'package:newsbell/Controller/news_category_controller.dart';
import 'package:newsbell/Utils/MySeparator.dart';
import 'package:newsbell/style/colors.dart';
import 'package:progress_dialog/progress_dialog.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../ModelClass/catwise_newslist_model.dart';

late ProgressDialog pd;
var Category_id;

class DashboardActivity extends StatefulWidget {
  @override
  _TabsDemoState createState() => _TabsDemoState();
}

class _TabsDemoState extends State<DashboardActivity>
    with TickerProviderStateMixin {
  var lang_name;
  List<categoty>? category = [];
  List<Pages>? news_list = [];
  int _currentIndex = 0;
  late TabController _controller;

  @override
  void initState() {
    super.initState();

    news_category_controller.getcategory().then((category_list) {
      category = category_list;
      //  filteredCoins = coins;
    });

    catwise_newslist_controller.getnewslist(Category_id).then((News_list) {
      news_list = News_list;
      //filteredCoins = coins;
    });

/*
    _tabController = TabController(vsync: this, length: choices.length)
      ..addListener(() {
        if(_tabController.indexIsChanging) {
          print("tab is animating. from active (getting the index) to inactive(getting the index) ");
        }else {
          //tab is finished animating you get the current index
          //here you can get your index or run some method once.
          print(_tabController.index);
        }
      });
*/
/*
    _controller = TabController(vsync: this, length: category?.length ?? 0);
    _controller.addListener(_handleTabSelection);
*/

/*    catwise_newslist_controller.getnewslist(Category_id).then((News_list) {
      news_list = News_list;
      //  filteredCoins = coins;
    });*/
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext ctxt) {
    pd = ProgressDialog(context);
    return Scaffold(
        floatingActionButton: FloatingActionButton(
          backgroundColor: Color(0xFFF03a3c),
          child: ImageIcon(
            AssetImage("assets/bell.png"),
            size: 24,
          ),
          onPressed: () {
            OpenChangeLanguageDialog();
          },
        ),
        drawer: NavDrawer(),
        appBar: new AppBar(
          title: Row(
            mainAxisSize: MainAxisSize.min,
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Image.asset(
                'assets/ic_bell_two.png',
                fit: BoxFit.contain,
                height: 32,
              ),
              SizedBox(
                width: 15,
              ),
              Text(
                'News Bell',
                style: TextStyle(color: Colors.black),
              ),
            ],
          ),
          iconTheme: IconThemeData(color: Colors.black),
          centerTitle: true,
          titleSpacing: 0,
        ),
        //  body: buildBody(),
        body: DoubleBackToCloseApp(
          child: Column(mainAxisAlignment: MainAxisAlignment.start, children: [
            FutureBuilder(
                future: news_category_controller.getcategory(),
                builder: (BuildContext context, AsyncSnapshot snapshot) {
                  if (!snapshot.hasData) {
                    return const Center(
                      child: CircularProgressIndicator(
                        valueColor: AlwaysStoppedAnimation(Colors.black),
                      ),
                    );
                  }
                  //  pd.hide();
                  print((snapshot.data));
                  category = snapshot.data;
                  return Container(
                    height: 700,
                    child: DefaultTabController(
                        length: category?.length ?? 0,
                        child: Builder(builder: (context) {

                          /*       final tabController = DefaultTabController.of(context)!;
                          tabController.addListener(() {
                            //print("New tab index: ${tabController.index}");
                            catwise_newslist_controller.getnewslist(Category_id).then((News_list) {
                              news_list = News_list;
                              //filteredCoins = coins;
                            });
                          });*/
                          return Column(
                            children: [
                              TabBar(
                                isScrollable: true,
                                labelColor: AppColor.black,
                                labelStyle: const TextStyle(
                                    fontSize: 20, fontWeight: FontWeight.bold),
                                tabs: List<Widget>.generate(
                                    category?.length ?? 0, (int index) {

                                  Category_id = category![index].id;

                                  /*      final tabController = DefaultTabController.of(context)!;
                                            tabController.addListener(() {
                                              print("New tab index: ${tabController.index}");
                                              catwise_newslist_controller.getnewslist(tabController.index).then((News_list) {
                                                news_list = News_list;
                                                //filteredCoins = coins;
                                              });
                                            });*/

                                  return Tab(
                                    text: category![index].name,
                                  );
                                }),
                              ),
                              Expanded(child: tabBarWidget()),
                            ],
                          );
                        })),
                  );
                }
                // By default, show a loading spinner.
                ),
          ]),
          snackBar: const SnackBar(
            content: Text('Tap back again to leave'),
          ),
        ));
  }

  tabBarWidget() {
    return TabBarView(
      children: List.generate(category?.length ?? 0, (index) => newListing()),
    );
  }

  newListing() {
    if ((news_list?.length ?? 0) == 0 || news_list?.length == null) {
      return const Center(
          child: Text(
        "No Data",
        style: TextStyle(fontSize: 25),
      ));
    }
    return ListView.separated(
      shrinkWrap: true,
      padding: EdgeInsets.zero,
      separatorBuilder: (BuildContext context, int index) {
        return const SizedBox(
          height: 20,
        );
      },
      itemBuilder: (BuildContext context, int index) {
        return listWidget(news_list![index]);
      },
      itemCount: news_list?.length ?? 0,
    );
  }

  listWidget(Pages? pages) {
    return Container(
      margin: const EdgeInsets.symmetric(horizontal: 5.0, vertical: 5.0),
      child: new Card(
        elevation: 3.0,
        child: new Row(
          children: <Widget>[
            new Container(
              width: 150.0,
              child: new Image.network(
                "${pages?.image}",
                fit: BoxFit.cover,
              ),
            ),
            new Expanded(
                child: new Container(
              margin: new EdgeInsets.all(10.0),
              child: new Text(
                "${pages?.title}",
                style: new TextStyle(color: Colors.black, fontSize: 18.0),
              ),
            )),
          ],
        ),
      ),
    );
  }

}

0 Answers
Related