List 颤振/飞镖:如何按键对列表排序?

List 颤振/飞镖:如何按键对列表排序?,list,sorting,listview,flutter,dart,List,Sorting,Listview,Flutter,Dart,在ListView.builder中显示列表之前,我正在尝试按项目的字母顺序对列表进行排序,但这样做的运气并不好。这是我的密码: class GlossaryItem { String item; String definition; GlossaryItem({String i, String d}) { item = i; definition = d; } } class Glossary { int _glossaryNumber = 0;

在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;
  }
}
然而,当尝试启动它时,我会遇到其他错误。这是我启动它的另一页:

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(),
          ),
        ),
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
导入“../dictionary/glossarylist.dart”;
//呼叫词汇表
var glossary=glossary();
glossary.sort();
类GlossaryPage扩展StatefulWidget{
词汇页({
关键点,
});
@凌驾
_GlossaryPageState createState();
}
类_GlossaryPageState扩展了状态{
控件打印定义(){
返回ListView.builder(
itemCount:glossary.getCount(),
itemBuilder:(构建上下文,int索引){
//返回行
返回填充(
填充:常量边集。对称(垂直:8.0),
子:列(
crossAxisAlignment:crossAxisAlignment.stretch,
mainAxisAlignment:mainAxisAlignment.start,
儿童:[
正文(
glossary.getSpecificItem(索引)+':',
样式:TextStyle(
fontWeight:fontWeight.bold,
),
),
正文(
术语表.getSpecificDefinition(索引),
样式:TextStyle(
fontStyle:fontStyle.italic,
),
),
],
),
);
},
收缩膜:对,
物理:ClampingScrollPhysics(),
);
}
@凌驾
小部件构建(构建上下文){
返回容器(
颜色:Colors.teal[300],
儿童:安全区(
孩子:脚手架(
appBar:[省略代码…]
主体:填充物(
填充:常数边集全部(15.0),
子项:printDefinitions(),
),
),
),
);
}
}

问题在于,您的_glossaryBank位于正在运行的方法之外。你必须写一些你可以执行代码的东西

类词汇表{
int _glossarynumer=0;
列表_词汇库=[
词汇表(
i:‘a项’,
d:‘定义a’,
),
词汇表(
i:‘d项’,
d:‘定义d’,
),
词汇表(
i:‘b项’,
d:‘定义b’,
),
词汇表(
i:‘c项’,
d:‘定义c’,
),
];
空排序(){
_词汇库排序((a,b){
int compare=a.item.compareTo(b.item);
返回比较;
});
}
}
无论你在哪里开始上课,你都必须使用它

var glossary=glossary();
glossary.sort();
我创建了一个关于如何工作的小代码笔。

您在类的主体中添加了对sort方法的调用,但没有包含方法。这是不允许的,编译器发现您必须尝试定义一个命名构造函数(),因此给出了一条毫无帮助的错误消息:
构造函数的名称必须与封闭类的名称匹配。
谢谢,但我现在在
glossary.sort()上遇到了相同的错误我初始化类的地方。如果我在我的listview.builder所在的类之外的页面顶部调用它,它会说
函数必须有一个明确的参数列表。
需要一个方法,getter,setter或运算符声明。
名称词汇表已定义。
必须提供函数体。
如果我在与listview.builder相同的类中启动它,它告诉我
构造函数的名称必须与封闭类的名称相匹配。
我创建了一个小代码笔,也许这有助于让它更清楚:好的,我现在知道了。它工作得很好。我只需要在构建部分启动它。有道理。非常感谢!
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(),
          ),
        ),
      ),
    );
  }
}