Невозможно отобразить выбранное значение в Flutter. - PullRequest
0 голосов
/ 27 августа 2018

Я новичок в разработке 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 голосов
/ 27 августа 2018

Проверьте 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})");
                        });
                      },
                    ),
...