无法在Flutter中显示下拉选择的值

时间:2018-08-27 20:32:40

标签: dart flutter dropdown selected

我是Flutter开发的新手,正在尝试显示下拉列表的选定值,但无法正常使用。

您可以选择一个孩子,并且效果很好,但是下拉菜单中没有显示该孩子,就像没有选择一样。

这是我的代码:

import 'package:app2date/repository/repository.dart';
import 'package:app2date/model/FeedSource.dart';
import 'package:app2date/model/FeedCategory.dart';
import 'package:app2date/util/ui.dart';
import 'package:flutter/material.dart';

class ManageFeedSource extends StatefulWidget {
  ManageFeedSource({Key key, this.feedSource}) : super(key: key);

  final FeedSource feedSource;

  @override
  _ManageFeedSource createState() => new _ManageFeedSource();
}

class _ManageFeedSource extends State<ManageFeedSource> {
  final tfNameController = new TextEditingController();
  final tfUrlController = new TextEditingController();
  var editMode = false;
  FeedCategory _feedCategory;

  @override
  Widget build(BuildContext context) {
    FeedSource feedSource = widget.feedSource;
    if (feedSource != null) {
      tfNameController.text = feedSource.name;
      tfUrlController.text = feedSource.url;
      editMode = true;
    }
    return Scaffold(
      appBar: AppBar(
        title: Text('New Feed'),
      ),
      body: new FutureBuilder(
        future: Repository.get().getFeedCategories(),
        builder: (BuildContext context, AsyncSnapshot snapshot) {
          List<FeedCategory> categoriesList = snapshot.data;
          if (categoriesList != null) {
            if (categoriesList.isNotEmpty) {
                _feedCategory = categoriesList[0];      // The dropdown doesn’t draw the element (the list has elements)
            }
            print("${_feedCategory}");
            return new Padding(
              padding: EdgeInsets.all(12.0),
              child: new Column(
                mainAxisAlignment: MainAxisAlignment.start,
                children: <Widget>[
                  new DropdownButton<FeedCategory>(
                    hint: Text("Select Category"),
                    items: categoriesList.map((FeedCategory category) {
                      return new DropdownMenuItem<FeedCategory>(
                        value: _feedCategory,
                        child: Text(_feedCategory.name),
                      );
                    }).toList(),
                    onChanged: (FeedCategory category) {
                      setState(() {
                        _feedCategory = category;      // Problem here too, the element doesn’t show in the dropdown as selected
                        print("Selected: ${_feedCategory.name} (${_feedCategory.id})");
                      });
                    },
                  ),
                ],
              ),
            ),
          ],
          ),
          );
          } else {
          return Container(
          decoration: new BoxDecoration(color: Colors.white),
          );
          }
        },
      ),
    );
  }

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

我将非常感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

检查DropdownButton类,有一个名为value的属性,在该位置使用变量_feedCategory,在DropdownMenuItem地图上,而不是_feedCategory使用类别:

   new DropdownButton<FeedCategory>(
                      value: _feedCategory,
                      hint: Text("Select Category"),
                      items: categoriesList.map((FeedCategory category) {
                        return new DropdownMenuItem<FeedCategory>(
                          value: category,
                          child: Text(category.name),
                        );
                      }).toList(),
                      onChanged: (FeedCategory category) {
                        setState(() {
                          _feedCategory = category;      // Problem here too, the element doesn’t show in the dropdown as selected
                          print("Selected: ${_feedCategory.name} (${_feedCategory.id})");
                        });
                      },
                    ),