~cytrogen/fluent-reader-mobile

04b0485dd34f28501285943b0d0097b315fb637b — Bruce Liu 5 years ago d61062f
sort groups and sources
M lib/pages/group_list_page.dart => lib/pages/group_list_page.dart +3 -1
@@ 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<GroupListPage> {
      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<GroupListPage> {
    final groupList = Consumer2<GroupsModel, SourcesModel>(
      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];

M lib/pages/item_list_page.dart => lib/pages/item_list_page.dart +0 -1
@@ 342,7 342,6 @@ class _ItemListPageState extends State<ItemListPage> {
        return SliverList(
          delegate: SliverChildBuilderDelegate((content, index) {
            return Selector2<ItemsModel, SourcesModel, Tuple2<RSSItem, RSSSource>>(
              key: Key(feed.iids[index]),
              selector: (context, itemsModel, sourcesModel) {
                var item = itemsModel.getItem(feed.iids[index]);
                var source = sourcesModel.getSource(item.source);

M lib/pages/settings/sources_page.dart => lib/pages/settings/sources_page.dart +2 -0
@@ 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<SourcesModel>(
          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),

M lib/utils/utils.dart => lib/utils/utils.dart +13 -0
@@ 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