Как получить только один выбор во всем многоуровневом расширяемом списке во флаттере? - PullRequest
0 голосов
/ 27 мая 2020

enter image description here

Я разработал двухуровневый Expandable ListView. Сначала у меня есть список продуктов, и при расширении у меня есть список элементов, и когда я раскрываю элементы, он отображает список разных размеров элемента. У меня уже есть только одно расширение продукта. Но проблема, с которой я столкнулся, чтобы получить Single item Expansion. Другими словами, я хочу, чтобы, если элемент расширен, и я нажимаю на другой элемент, первое расширение должно закрываться, и должно отображаться только описание одного элемента.

Я использую следующий код.

import 'package:flutter/material.dart';
import 'package:food_delivery_admin_app/Constants.dart';

class Short_Product extends StatefulWidget {
  @override
  _Short_ProductState createState() => _Short_ProductState();
}

class _Short_ProductState extends State<Short_Product> {
  int selected;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("Short Product"),
        ),
        body: Theme(
        data: Theme.of(context).copyWith(
        textSelectionColor: Colors.green,
        accentColor: Colors.green,
        errorColor: Colors.red),
        child:
            Container(
              margin: EdgeInsets.symmetric(vertical: 8,horizontal: 10),
              decoration: BoxDecoration(
                border: Border.all(width: 3,color: Colors.white24, ),
                borderRadius: BorderRadius.all(Radius.circular(15))
              ),
              child: ListView.builder(        
                     key: Key('builder ${selected.toString()}'),
                     itemCount: Category_List.length,
                     itemBuilder: (context, i) {
                     return ExpansionTile(
                                 key: Key(i.toString()),
                                 initiallyExpanded: i == selected,
                                 title: Text(
                                      Category_List[i].cat_name,
                                      style: TextStyle(
                                      fontSize: 20.0,
                                      color: Colors.green,
                                      fontWeight: FontWeight.bold,
                                      ),
                                 ),
                                 onExpansionChanged: ((newState) {
                                 if (newState)
                                       setState(() {
                                           selected = i;
                                        });
                                 else
                                      setState(() {
                                           selected = -1;
                                        });
                                 }),
                                 children: <Widget>[
                                          Column(
                                              children: _Product_ExpandAble_List_Builder(
                                                                    Category_List[i].cat_id))
                                               ],
                                            );
                 },
          ),
         )
      )
    );
  }



  _Product_ExpandAble_List_Builder(int cat_id) {

    List<Widget> columnContent = [];
    Product_List.forEach((product) =>
    {
      if (product.cat_id == cat_id && product.total_Qty < 500)
     {
       columnContent.add(
          ListTile(
            title: ExpansionTile(
                title: Text(
                  product.prod_name,
                  textAlign: TextAlign.start,
                  style: TextStyle(
                    fontSize: 20.0,
                    color: Colors.green,
                    fontWeight: FontWeight.bold,
                  ),
                ),
                children: _Size_ExpandAble_List_Builder(product.prod_id)),
            trailing: Text("${product.total_Qty} (Kg)",
              style: TextStyle(
                fontSize: 20.0,
                color: Colors.green,
                fontWeight: FontWeight.bold,
            ),),
          ),
        ),
    }
    });
    return columnContent;
  }

  _Size_ExpandAble_List_Builder(int prod_id) {
    List<Widget> columnContent = [
      ListTile(
        leading: Text('Id',style: TextStyle(fontWeight: FontWeight.bold),),
        title: Text('Packet (Kg)',style: TextStyle(fontWeight: FontWeight.bold),),
        trailing: Text('Qty',style: TextStyle(fontWeight: FontWeight.bold),),
      )
    ];
    Product_Size_List.forEach((size) => {
          if (size.prod_id == prod_id)
            {
              columnContent.add(
                ListTile(
                  leading: Text("${size.size_id}",),
                  title: Text(
                    size.packet_size.toString(),
                    style: TextStyle(
                      fontSize: 20.0,
                      fontWeight: FontWeight.bold,
                    ),
                  ),
                  trailing: Text(
                    "${size.packet_qty} (Kg)",
                    style: TextStyle(
                      fontSize: 18.0,
                    ),
                  ),
                ),
              )
            }
        });
    return columnContent;
  }
}

См. Изображение для получения дополнительной информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...