如何将颤振数据排序为降序?最新在顶部

时间:2021-02-05 12:31:53

标签: flutter

您能帮我如何使用此代码进行排序吗?非常感谢任何帮助。

我想实现这个输出。

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,
  );

2 个答案:

答案 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)

解决方案 1:反转

在您的情况下,如果列表已经按升序排列,最好的解决方案是反转 productsList 方法开头的 build

这是使用 FAB 切换排序顺序的解决方案:

enter image description here

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,
    );
  }
}

解决方案 2 : reverse: true

如果它已经按升序排列,您可以在 reverse: true 上使用 ListView。不过,它会将滚动位置设置在 ListView 的底部。

build(BuildContext context) {
  return ListView.separated(
    padding: ...,
    shrinkWrap: ...,
    reverse: true
    itemBuilder: ...,
    separatorBuilder: ...,
    itemCount: ...,
  );
}

方案三:sort()

即使列表未按升序排序也能工作的另一种解决方案是在 productsList 方法的开头对 build 进行排序。

build(BuildContext context) {
  productsList.sort((a, b) => b.name.toLowerCase.compareTo(a.name.toLowerCase));
  return ListView.separated(...);
}

注意:我假设您想按名称排序,不区分大小写。