简体   繁体   English

Flutter Map 按字母顺序排序

[英]Flutter Map sort alphabetically

How to display in alphabetical order the ListView ItemB in my file?如何在我的文件中按字母顺序显示 ListView ItemB?

class _TestScreen1State extends State<TestScreen1> {

  late bool _changeItemA_to_ItemB = true;

  final List<Map<String, String>> _lexiqueItems = [
    {'itemA': "Aa_ItemA",  'itemB': "Za_ItemB"},
    {'itemA': "Ab_ItemA",  'itemB': "Zb_ItemB"},
    {'itemA': "Ac_ItemA",  'itemB': "Zc_ItemB"},
    {'itemA': "Ba_ItemA",  'itemB': "Ya_ItemB"},
    {'itemA': "Bb_ItemA",  'itemB': "Yb_ItemB"},
    {'itemA': "Bc_ItemA",  'itemB': "Yc_ItemB"},
    {'itemA': "Ca_ItemA",  'itemB': "Xa_ItemB"},
    {'itemA': "Cb_ItemA",  'itemB': "Xb_ItemB"},
    {'itemA': "Cc_ItemA",  'itemB': "Xc_ItemB"},
  ];

  

I use a search bar:我使用搜索栏:

  void _runFilter(String enteredKeyword) {
    List<Map<String, String>> results = [];
    if (enteredKeyword.isEmpty) {
      results = _lexiqueItems;
    } else {
      results = _lexiqueItems
          .where((item) => (_changeItemA_to_ItemB == true)
          ? (item["itemA"]!.toLowerCase().contains(enteredKeyword.toLowerCase()))
          : item["itemB"]!.toLowerCase().contains(enteredKeyword.toLowerCase())
      ).toList();
    }

    setState(() {
      _foundItems = results;
    });
  }

I'm using a button to choose the list view option.我正在使用一个按钮来选择列表视图选项。

The code from the list depending on the option chosen:列表中的代码取决于选择的选项:

            ListView.builder(
            itemCount: _foundItems.length,
            itemBuilder: (context, index) => Card(
              key: ValueKey((_changeItemA_to_ItemB == true) ? _foundItems[index]["itemA"] : _foundItems[index]["itemB"]),
              color: Colors.indigo[100],
              elevation: 4,
              margin: const EdgeInsets.symmetric(vertical: 10),
              child: ListTile(
                title: Text((_changeItemA_to_ItemB == true) ? _foundItems[index]["itemA"] : _foundItems[index]["itemB"]),
                subtitle: Text((_changeItemA_to_ItemB == true) ? _foundItems[index]["itemB"] : _foundItems[index]["itemA"]),
              ),
            ),
          )

try this:尝试这个:

_lexiqueItems.sort(( a, b)=> (a['itemB'] as String).toLowerCase().compareTo((b['itemB'] as String).toLowerCase()));

result:结果:

[{
  itemA: Ca_ItemA, itemB: Xa_ItemB
}, {
  itemA: Cb_ItemA, itemB: Xb_ItemB
}, {
  itemA: Cc_ItemA, itemB: Xc_ItemB
}, {
  itemA: Ba_ItemA, itemB: Ya_ItemB
}, {
  itemA: Bb_ItemA, itemB: Yb_ItemB
}, {
  itemA: Bc_ItemA, itemB: Yc_ItemB
}, {
  itemA: Aa_ItemA, itemB: Za_ItemB
}, {
  itemA: Ab_ItemA, itemB: Zb_ItemB
}, {
  itemA: Ac_ItemA, itemB: Zc_ItemB
}]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM