【发布时间】:2020-08-28 18:03:37
【问题描述】:
我试图在 ListView.builder 中显示之前按项目的字母顺序对列表进行排序,但我没有任何运气这样做。这是我的代码:
class GlossaryItem {
String item;
String definition;
GlossaryItem({String i, String d}) {
item = i;
definition = d;
}
}
class Glossary {
int _glossaryNumber = 0;
List<GlossaryItem> _glossaryBank = [
GlossaryItem(
i: 'item a',
d: 'definition a',
),
GlossaryItem(
i: 'item d',
d: 'definition d',
),
GlossaryItem(
i: 'item b',
d: 'definition b',
),
GlossaryItem(
i: 'item c',
d: 'definition c',
),
];
_glossaryBank.sort((a, b) {
int compare = a.item.compareTo(b.item);
return compare;
});
int getCount() {
return _glossaryBank.length;
}
String getSpecificItem(index) {
return _glossaryBank[index].item;
}
String getSpecificDefinition(index) {
return _glossaryBank[index].definition;
}
}
我在_glossaryBank.sort() 上收到错误消息,提示“构造函数的名称必须与封闭类的名称匹配。”我浏览了很多页面,但似乎无法正常工作。
编辑:我对其进行了以下更改,现在我在该页面上没有收到错误:
void sort() {
_glossaryBank.sort((a, b) {
int compare = a.item.compareTo(b.item);
return compare;
});
但是,在尝试启动它时,我遇到了其他错误。这是我启动它的另一个页面:
import 'package:flutter/material.dart';
import '../dictionary/glossarylist.dart';
//Call glossary
var glossary = Glossary();
glossary.sort();
class GlossaryPage extends StatefulWidget {
GlossaryPage({
Key key,
});
@override
_GlossaryPageState createState() => _GlossaryPageState();
}
class _GlossaryPageState extends State<GlossaryPage> {
Widget printDefinitions() {
return ListView.builder(
itemCount: glossary.getCount(),
itemBuilder: (BuildContext context, int index) {
// return row
return Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Text(
glossary.getSpecificItem(index) + ':',
style: TextStyle(
fontWeight: FontWeight.bold,
),
),
Text(
glossary.getSpecificDefinition(index),
style: TextStyle(
fontStyle: FontStyle.italic,
),
),
],
),
);
},
shrinkWrap: true,
physics: ClampingScrollPhysics(),
);
}
@override
Widget build(BuildContext context) {
return Container(
color: Colors.teal[300],
child: SafeArea(
child: Scaffold(
appBar: [omitted code...]
body: Padding(
padding: const EdgeInsets.all(15.0),
child: printDefinitions(),
),
),
),
);
}
}
【问题讨论】:
-
您在类的主体中添加了对排序方法的调用,但没有封闭方法。这是不允许的,编译器发现您必须尝试定义命名构造函数 (dart.dev/guides/language/language-tour#named-constructors),因此给了您无用的错误消息:
The name of the constructor must match the name of the enclosing class.
标签: list sorting listview flutter dart