[英]Flutter/Dart: How to sort list by key?
在将列表显示在 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()
上收到错误消息,提示“构造函数的名称必须与封闭的 class 的名称匹配。” 我已经浏览了很多页面,但似乎无法使其正常工作。
编辑:我对其进行了以下更改,现在我在该页面上没有收到错误:
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(),
),
),
),
);
}
}
问题是您在运行方法之外有 _glossaryBank。 您必须编写一些可以执行代码的东西。
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',
),
];
void sort() {
_glossaryBank.sort((a, b) {
int compare = a.item.compareTo(b.item);
return compare;
});
}
}
无论您在哪里启动 class,您都必须使用它
var glossary = Glossary();
glossary.sort();
我创建了一个关于它如何工作的小型 CodePen。 https://codepen.io/md-weber/pen/bGVjdap
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.