我有以下代码填充了一个DropdownButton,但是我在编辑时无法过滤内容。
我需要帮助,因为我无法理解错误以及如何更正问题以制造过滤器。
我尝试了几种过滤器,但均未成功。下面应用的过滤器具有以下错误:
断言失败:609行pos 15:'item == null || items.isEmpty ||
值== null || items.where(((DropdownMenuItem item)=>
item.value == value).length == 1':不正确。
此错误来自以下过滤器:
if (widget.filialID != 0) {
_select = FilialModel(key: widget.filialID);
}
我找不到解决问题的方法。请帮忙。谢谢。
import 'package:flutter/material.dart';
import 'package:onex_qa/data/database.dart';
import 'package:onex_qa/models/filial_model.dart';
class DropFilialDb extends StatefulWidget {
int filialID;
DropFilialDb({Key key, this.filialID}) : super(key: key);
@override
_DropFilialDbState createState() => _DropFilialDbState();
}
class _DropFilialDbState extends State<DropFilialDb> {
final String _tipo = 'Filial';
FilialModel _select;
final _listDb = DatabaseDb().getAllFilialList();
@override
void initState() {
super.initState();
if (widget.filialID != 0) {
_select = FilialModel(key: widget.filialID);
}
}
@override
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.fromLTRB(4, 0, 2, 0),
child: Theme(
data: Theme.of(context).copyWith(
canvasColor: Theme.of(context).dialogBackgroundColor,
),
child: FutureBuilder<List<FilialModel>>(
future: _listDb,
builder: (BuildContext context,
AsyncSnapshot<List<FilialModel>> snapshot) {
if (!snapshot.hasData) return CircularProgressIndicator();
return DropdownButton<FilialModel>(
items: snapshot.data.map((FilialModel value) {
return new DropdownMenuItem<FilialModel>(
value: value,
child: new Text(value.filial),
);
}).toList(),
style: TextStyle(color: Theme.of(context).primaryColorDark),
elevation: 3,
isExpanded: true,
hint: Text("Selecione ${_tipo}",
style: TextStyle(
color: Theme.of(context).primaryColorDark, fontSize: 17)),
value: _select == null ? null : _select,
onChanged: (FilialModel value) {
if (value == null) {
_select = null;
} else {
setState(() {
_select = value;
widget.filialID = _select.key;
});
}
},
);
},
),
),
);
}
}
答案 0 :(得分:0)
我的逻辑假设是FilialModel
没有定义相等运算符,因此比较两个模型总是返回false
。即使它们 是相同的型号。
尝试在FilialModel
类中定义相等运算符。这可能会修复引发错误的断言的items.where
部分。
例如
class FilialModel /* extends ... */ {
// ...,
// Compares `key` property of current object (this) and the other object (obj)
bool operator ==(obj) => obj is FilialModel && obj.key == this.key;
@override
int get hashCode => key.hashCode; // This has to be overridden too. You might want to define more complex logic here.
}
让我知道这是否有帮助。