From 04b0485dd34f28501285943b0d0097b315fb637b Mon Sep 17 00:00:00 2001 From: Bruce Liu Date: Sat, 30 Jan 2021 21:19:20 +0800 Subject: [PATCH] sort groups and sources --- lib/pages/group_list_page.dart | 4 +++- lib/pages/item_list_page.dart | 1 - lib/pages/settings/sources_page.dart | 2 ++ lib/utils/utils.dart | 13 +++++++++++++ 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/pages/group_list_page.dart b/lib/pages/group_list_page.dart index b475a74..8910abd 100644 --- a/lib/pages/group_list_page.dart +++ b/lib/pages/group_list_page.dart @@ -7,6 +7,7 @@ import 'package:fluent_reader_lite/models/groups_model.dart'; import 'package:fluent_reader_lite/models/source.dart'; import 'package:fluent_reader_lite/models/sources_model.dart'; import 'package:fluent_reader_lite/utils/global.dart'; +import 'package:fluent_reader_lite/utils/utils.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; @@ -32,6 +33,7 @@ class _GroupListPageState extends State { automaticallyImplyLeading: false, backgroundColor: Global.isTablet ? CupertinoColors.systemBackground : null, leading: CupertinoButton( + minSize: 36, padding: EdgeInsets.zero, child: Text(S.of(context).cancel), onPressed: () { Navigator.of(context).pop(); }, @@ -52,7 +54,7 @@ class _GroupListPageState extends State { final groupList = Consumer2( builder: (context, groupsModel, sourcesModel, child) { final groupNames = groupsModel.groups.keys.toList(); - groupNames.sort(); + groupNames.sort(Utils.localStringCompare); return SliverList( delegate: SliverChildBuilderDelegate((context, index) { final groupName = groupNames[index]; diff --git a/lib/pages/item_list_page.dart b/lib/pages/item_list_page.dart index 99094b0..3358a44 100644 --- a/lib/pages/item_list_page.dart +++ b/lib/pages/item_list_page.dart @@ -342,7 +342,6 @@ class _ItemListPageState extends State { return SliverList( delegate: SliverChildBuilderDelegate((content, index) { return Selector2>( - key: Key(feed.iids[index]), selector: (context, itemsModel, sourcesModel) { var item = itemsModel.getItem(feed.iids[index]); var source = sourcesModel.getSource(item.source); diff --git a/lib/pages/settings/sources_page.dart b/lib/pages/settings/sources_page.dart index d1d67cc..445a87e 100644 --- a/lib/pages/settings/sources_page.dart +++ b/lib/pages/settings/sources_page.dart @@ -4,6 +4,7 @@ import 'package:fluent_reader_lite/components/my_list_tile.dart'; import 'package:fluent_reader_lite/generated/l10n.dart'; import 'package:fluent_reader_lite/models/sources_model.dart'; import 'package:fluent_reader_lite/utils/colors.dart'; +import 'package:fluent_reader_lite/utils/utils.dart'; import 'package:flutter/cupertino.dart'; import 'package:provider/provider.dart'; @@ -19,6 +20,7 @@ class SourcesPage extends StatelessWidget { Consumer( builder: (context, sourcesModel, child) { var sources = sourcesModel.getSources().toList(); + sources.sort((a, b) => Utils.localStringCompare(a.name, b.name)); return ListTileGroup(sources.map((s) => MyListTile( title: Flexible(child: Text(s.name, overflow: TextOverflow.ellipsis)), leading: Favicon(s, size: 20), diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index 8ae7ffa..3461641 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -2,6 +2,7 @@ import 'package:fluent_reader_lite/generated/l10n.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; +import 'package:lpinyin/lpinyin.dart'; import 'package:url_launcher/url_launcher.dart'; abstract class Utils { @@ -65,4 +66,16 @@ abstract class Utils { ), ); } + + static int localStringCompare(String a, String b) { + a = a.toLowerCase(); + b = b.toLowerCase(); + try { + String ap = PinyinHelper.getShortPinyin(a); + String bp = PinyinHelper.getShortPinyin(b); + return ap.compareTo(bp); + } catch(exp) { + return a.compareTo(b); + } + } } \ No newline at end of file -- 2.38.5