Флаттер: динамическое соединение вкладок TabBar и TabBarView - PullRequest
0 голосов
/ 28 апреля 2020

Как вы можете видеть, эта TabBar сделана из списка вкладок 'suj.subSe c',

appBar: AppBar(
        title: Text(suj.titulo),
        centerTitle: true,
        bottom: TabBar(
          controller: _tabController,
          tabs: suj.subSec,
        ),
      ),
      body: TabBarView(
        controller: _tabController,
        children: List<Widget>.generate(suj.subSec.length, (int index){

          var listaDest = suj.dest[index];

          return SingleChildScrollView(
            padding: EdgeInsets.all(10),
            child: Column(
              children: <Widget>[
                Container(
                  child: ListView.builder(
                    shrinkWrap: true,
                    physics: ClampingScrollPhysics(),
                    itemCount: listaDest.length,
                    itemBuilder: (BuildContext context, int indx) {
                      return CartaoPonto(listaDest, indx);
                    },
                  ),
                ),```

И затем в TabBarView отображается список, соответствующий вкладке, сделанный CartaoPonto:

class CartaoPonto extends StatelessWidget {

  var listaDest;
  int index;

  CartaoPonto(this.listaDest, this.index);

  @override
  Widget build(BuildContext context) {
    return Container(
        margin: EdgeInsets.only(bottom: 8),
        decoration: BoxDecoration(
            color: Color(0xffE9F4F9), borderRadius: BorderRadius.circular(20)),
        child: Row(
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            ClipRRect(
              borderRadius: BorderRadius.only(
                  topLeft: Radius.circular(20),
                  bottomLeft: Radius.circular(20)),
              child: Placeholder(
                fallbackHeight: 90,
                fallbackWidth: 110,
              ),
            ),
            Flexible(
              child: Container(
                padding: EdgeInsets.symmetric(horizontal: 16),
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    Text(
                      listaDest[index].titulo.toString(),

Но для этой тренировки у меня должно быть 2 соответствующих списка, первый - это список вкладок, а второй - список списков, так что я могу сказать своему строителю, чтобы получить список с индексом, соответствующим индексу табуляции.

List<Seccao> listaSeccoes = [
   Seccao(titulo: 'Inicio', icon: Icon(Icons.home)),
   Seccao(titulo: 'Concelho',cor: Colors.black26, icon: Icon(Icons.place)),
   Seccao(titulo: 'Pontos de Interesse',cor: Colors.black26, icon: Icon(Icons.explore),
       subSec: [
     Tab(text: 'Praias'),
     Tab(text: 'Lazer'),
     Tab(text: 'Desporto'),
   ], dest: [
     listaPraias,
     listaLazer,
     listaDesporto,
   ]),

Как я могу сделать это более прямым и динамичным c способом?

...