Mam interfejs API, które chcę pokazać w moim rozwijanym menu Flutter App.

Jestem w stanie uzyskać listy w prosty widget tekstowy, ale nie zdolny do pobierania w Dropowdbutton.

Oto próbka mojego kodu

_getAllCategories() async {
    var categories = await _categoryService.getCategories();
    var _list = json.decode(categories.body);
    List<Category> results = [];
    _list['data'].forEach((data) {
      var model = Category();
      model.id = data["id"];
      model.name = data["categoryName"];
      model.icon = data["categoryIcon"];
      results.add(model);
    });
    if (mounted) {
      setState(() {
        _categoryList = results;
      });
    }
  }

I dostaję mój wynik

ListView.builder(
          itemCount: _categoryList.length,
          itemBuilder: (context, index){
            return Text(_categoryList[index].name,style: TextStyle(fontSize: 25),);
          },
        ),

enter image description here

1
Pramod Yadav 23 listopad 2020, 14:12

1 odpowiedź

Najlepsza odpowiedź

Możesz spróbować prostego widgetu rozwijanego w ten sposób:

    
  List<Category> _categoryList = List<Category>();

  Category dropdownValue;

  @override
  Widget build(BuildContext context) {
    
    return DropdownButton<Category>(
      value: dropdownValue,
      icon: Icon(Icons.arrow_downward),
      iconSize: 24,
      elevation: 16,
      style: TextStyle(color: Colors.deepPurple),
      underline: Container(
        height: 2,
        color: Colors.deepPurpleAccent,
      ),
      onChanged: (Category newValue) {
        setState(() {
          dropdownValue = newValue;
        });
      },
      items: _categoryList.map<DropdownMenuItem<Category>>((Category value) {
        return DropdownMenuItem<Category>(
          value: value,
          child: Text(value.name),
        );
      }).toList(),
    );
  }
}

class Category {
  String name;
  String icon;
  int id;
}

1
Pramod Yadav 23 listopad 2020, 14:59