您能帮我如何使用此代码进行排序吗?非常感谢任何帮助。
我想实现这个输出。
void main() {
List<String> names = ['Paul','James','Arman'];
names.sort();
print(names);
}
输出:阿曼、詹姆斯、保罗
我想将此代码应用于这一块代码,但我不知道如何应用于这一块。这段代码按升序显示,我想让它降序。希望你能帮助我。
return ListView.separated(
padding: const EdgeInsets.only(bottom: 16.0, top: 16.0),
shrinkWrap: true,
itemBuilder: (context, index) {
return ProductItem(
size: size,
product: productsList[index],
allProductsBloc: allProductsBloc,
productType: 'ALL_PRODUCTS',
);
},
separatorBuilder: (context, index) {
return SizedBox(
height: 16.0,
);
},
itemCount: productsList.length,
);
答案 0 :(得分:0)
您可以在排序列表上调用 reversed
或实现自定义回调以按降序对其进行排序。
反向使用
List<String> names = ['Paul','James','Arman'];
names.sort();
print(names.reversed.toList()); // [Paul, James, Arman]
在排序中使用自定义实现
List<String> names = ['Paul','James','Arman'];
names.sort((a, b) => b.compareTo(a));
print(names); // [Paul, James, Arman]
答案 1 :(得分:0)
在您的情况下,如果列表已经按升序排列,最好的解决方案是反转 productsList
方法开头的 build
。
这是使用 FAB 切换排序顺序的解决方案:
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
void main() {
runApp(
MaterialApp(
title: 'Flutter Demo',
home: MyWidget(),
),
);
}
class MyWidget extends HookWidget {
@override
Widget build(BuildContext context) {
final reversed = useState(false);
return Scaffold(
body: MyList(
list: List.generate(100, (index) => index.toString()),
reversed: reversed.value,
),
floatingActionButton: FloatingActionButton(
onPressed: () {
reversed.value = !reversed.value;
},
child: Icon(Icons.sort_by_alpha),
),
);
}
}
class MyList extends StatelessWidget {
final List<String> list;
final bool reversed;
const MyList({
Key key,
this.list,
this.reversed,
}) : super(key: key);
@override
Widget build(BuildContext context) {
final sorted = reversed ? list.reversed.toList() : list;
return ListView.builder(
padding: const EdgeInsets.only(bottom: 16.0, top: 16.0),
shrinkWrap: true,
itemBuilder: (context, index) => Card(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(sorted[index]),
),
),
itemCount: list.length,
);
}
}
如果它已经按升序排列,您可以在 reverse: true
上使用 ListView
。不过,它会将滚动位置设置在 ListView
的底部。
build(BuildContext context) {
return ListView.separated(
padding: ...,
shrinkWrap: ...,
reverse: true
itemBuilder: ...,
separatorBuilder: ...,
itemCount: ...,
);
}
即使列表未按升序排序也能工作的另一种解决方案是在 productsList
方法的开头对 build
进行排序。
build(BuildContext context) {
productsList.sort((a, b) => b.name.toLowerCase.compareTo(a.name.toLowerCase));
return ListView.separated(...);
}
注意:我假设您想按名称排序,不区分大小写。