问题
I am new in Flutter development and I'm trying to show the selected value of a dropdown but I can't get it to work.
You can select one child and it works well but the dropdown doesn't show it as the chosen one, it just keeps like if nothing was selected.
Here is my code:
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();
}
}
I would really appreciate any help.
回答1:
Check the DropdownButton class , there is a property named value
, use your variable _feedCategory in that place, and on your DropdownMenuItem
map instead of _feedCategory use category:
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})");
});
},
),
来源:https://stackoverflow.com/questions/52046592/cant-show-the-dropdown-selected-value-in-flutter