Skip to content

Commit 6cc79f1

Browse files
🚸 Improve text scale handling (#177)
Co-authored-by: Alex Li <[email protected]>
1 parent 0b0f5da commit 6cc79f1

10 files changed

+91
-39
lines changed

lib/src/constants/constants.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@ class Constants {
4343
static GlobalKey pickerKey = GlobalKey();
4444

4545
static AssetsPickerTextDelegate textDelegate = AssetsPickerTextDelegate();
46-
static SortPathDelegate<dynamic> sortPathDelegate =
47-
SortPathDelegate.common;
46+
static SortPathDelegate<dynamic> sortPathDelegate = SortPathDelegate.common;
4847

4948
/// The last scroll position where the picker scrolled.
5049
///

lib/src/delegates/asset_picker_builder_delegate.dart

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import 'package:flutter/services.dart';
1515
import '../constants/constants.dart';
1616
import '../widget/builder/asset_entity_grid_item_builder.dart';
1717
import '../widget/builder/value_listenable_builder_2.dart';
18+
import '../widget/scale_text.dart';
1819

1920
typedef IndicatorBuilder = Widget Function(
2021
BuildContext context,
@@ -247,7 +248,7 @@ abstract class AssetPickerBuilderDelegate<Asset, Path> {
247248
color: theme.iconTheme.color!.withOpacity(0.75),
248249
)
249250
: null,
250-
child: Text(
251+
child: ScaleText(
251252
Constants.textDelegate.gifIndicator,
252253
style: TextStyle(
253254
color: isAppleOS
@@ -256,10 +257,7 @@ abstract class AssetPickerBuilderDelegate<Asset, Path> {
256257
fontSize: isAppleOS ? 14.0 : 12.0,
257258
fontWeight: isAppleOS ? FontWeight.w500 : FontWeight.normal,
258259
),
259-
strutStyle: const StrutStyle(
260-
forceStrutHeight: true,
261-
height: 1.0,
262-
),
260+
strutStyle: const StrutStyle(forceStrutHeight: true, height: 1.0),
263261
),
264262
),
265263
),
@@ -313,7 +311,7 @@ abstract class AssetPickerBuilderDelegate<Asset, Path> {
313311
return loadingIndicatorBuilder!(c, isAssetsEmpty);
314312
}
315313
if (isAssetsEmpty) {
316-
return const Text('Nothing here.');
314+
return const ScaleText('Nothing here.', maxScaleFactor: 1.5);
317315
}
318316
return w!;
319317
},
@@ -329,7 +327,7 @@ abstract class AssetPickerBuilderDelegate<Asset, Path> {
329327
/// 资源缩略数据加载失败时使用的部件
330328
Widget failedItemBuilder(BuildContext context) {
331329
return Center(
332-
child: Text(
330+
child: ScaleText(
333331
Constants.textDelegate.loadFailed,
334332
textAlign: TextAlign.center,
335333
style: const TextStyle(fontSize: 18.0),
@@ -420,7 +418,7 @@ abstract class AssetPickerBuilderDelegate<Asset, Path> {
420418
),
421419
const SizedBox(width: 15),
422420
Expanded(
423-
child: Text(
421+
child: ScaleText(
424422
Constants.textDelegate.accessAllTip,
425423
style: context.themeData.textTheme.caption?.copyWith(
426424
fontSize: 14,
@@ -513,13 +511,13 @@ abstract class AssetPickerBuilderDelegate<Asset, Path> {
513511
child: Column(
514512
mainAxisAlignment: MainAxisAlignment.center,
515513
children: <Widget>[
516-
Text(
514+
ScaleText(
517515
Constants.textDelegate.unableToAccessAll,
518516
style: const TextStyle(fontSize: 22),
519517
textAlign: TextAlign.center,
520518
),
521519
SizedBox(height: size.height / 30),
522-
Text(
520+
ScaleText(
523521
Constants.textDelegate.accessAllTip,
524522
style: const TextStyle(fontSize: 18),
525523
textAlign: TextAlign.center,
@@ -537,7 +535,7 @@ abstract class AssetPickerBuilderDelegate<Asset, Path> {
537535
shape: RoundedRectangleBorder(
538536
borderRadius: BorderRadius.circular(5),
539537
),
540-
child: Text(
538+
child: ScaleText(
541539
Constants.textDelegate.goToSystemSettings,
542540
style: const TextStyle(fontSize: 17.0),
543541
),
@@ -547,7 +545,7 @@ abstract class AssetPickerBuilderDelegate<Asset, Path> {
547545

548546
final Widget _accessLimitedButton = GestureDetector(
549547
onTap: () => permissionOverlayHidden.value = true,
550-
child: Text(
548+
child: ScaleText(
551549
Constants.textDelegate.accessLimitedAssets,
552550
style: TextStyle(color: interactiveTextColor(context)),
553551
),
@@ -1084,7 +1082,7 @@ class DefaultAssetPickerBuilderDelegate
10841082
),
10851083
child: Padding(
10861084
padding: const EdgeInsetsDirectional.only(start: 4.0),
1087-
child: Text(
1085+
child: ScaleText(
10881086
Constants.textDelegate.durationIndicatorBuilder(
10891087
Duration(seconds: asset.duration),
10901088
),
@@ -1111,7 +1109,7 @@ class DefaultAssetPickerBuilderDelegate
11111109
),
11121110
child: Padding(
11131111
padding: const EdgeInsetsDirectional.only(start: 4.0, end: 30.0),
1114-
child: Text(
1112+
child: ScaleText(
11151113
asset.title ?? '',
11161114
style: const TextStyle(fontSize: 16.0),
11171115
maxLines: 1,
@@ -1141,7 +1139,7 @@ class DefaultAssetPickerBuilderDelegate
11411139
shape: RoundedRectangleBorder(
11421140
borderRadius: BorderRadius.circular(3.0),
11431141
),
1144-
child: Text(
1142+
child: ScaleText(
11451143
provider.isSelectedNotEmpty && !isSingleAssetMode
11461144
? '${Constants.textDelegate.confirm}'
11471145
' (${provider.selectedAssets.length}/${provider.maxAssets})'
@@ -1208,7 +1206,7 @@ class DefaultAssetPickerBuilderDelegate
12081206
selector: (_, DefaultAssetPickerProvider p) => p.isAssetsEmpty,
12091207
builder: (_, bool isAssetsEmpty, __) {
12101208
if (isAssetsEmpty) {
1211-
return const Text('Nothing here.');
1209+
return const ScaleText('Nothing here.', maxScaleFactor: 1.5);
12121210
}
12131211
return PlatformProgressIndicator(
12141212
color: theme.iconTheme.color,
@@ -1373,7 +1371,7 @@ class DefaultAssetPickerBuilderDelegate
13731371
children: <Widget>[
13741372
if (p != null)
13751373
Flexible(
1376-
child: Text(
1374+
child: ScaleText(
13771375
isPermissionLimited && p.isAll
13781376
? Constants.textDelegate.accessiblePathName
13791377
: p.name,
@@ -1383,6 +1381,7 @@ class DefaultAssetPickerBuilderDelegate
13831381
),
13841382
maxLines: 1,
13851383
overflow: TextOverflow.ellipsis,
1384+
maxScaleFactor: 1.2,
13861385
),
13871386
),
13881387
w!,
@@ -1474,7 +1473,7 @@ class DefaultAssetPickerBuilderDelegate
14741473
Flexible(
14751474
child: Padding(
14761475
padding: const EdgeInsetsDirectional.only(end: 10.0),
1477-
child: Text(
1476+
child: ScaleText(
14781477
isPermissionLimited && pathEntity.isAll
14791478
? Constants.textDelegate.accessiblePathName
14801479
: pathEntity.name,
@@ -1484,7 +1483,7 @@ class DefaultAssetPickerBuilderDelegate
14841483
),
14851484
),
14861485
),
1487-
Text(
1486+
ScaleText(
14881487
'(${pathEntity.assetCount})',
14891488
style: TextStyle(
14901489
color: theme.textTheme.caption?.color,
@@ -1555,7 +1554,7 @@ class DefaultAssetPickerBuilderDelegate
15551554
p.selectedDescriptions,
15561555
builder: (_, __, ___) => Padding(
15571556
padding: const EdgeInsets.symmetric(vertical: 12.0),
1558-
child: Text(
1557+
child: ScaleText(
15591558
isSelectedNotEmpty
15601559
? '${Constants.textDelegate.preview}'
15611560
' (${provider.selectedAssets.length})'
@@ -1566,6 +1565,7 @@ class DefaultAssetPickerBuilderDelegate
15661565
: theme.textTheme.caption?.color,
15671566
fontSize: 18.0,
15681567
),
1568+
maxScaleFactor: 1.2,
15691569
),
15701570
),
15711571
),
@@ -1732,14 +1732,15 @@ class DefaultAssetPickerBuilderDelegate
17321732
? Container(
17331733
alignment: AlignmentDirectional.topStart,
17341734
padding: const EdgeInsets.all(14),
1735-
child: Text(
1735+
child: ScaleText(
17361736
'${index + 1}',
17371737
style: TextStyle(
17381738
color: theme.textTheme.bodyText1?.color
17391739
?.withOpacity(.75),
17401740
fontWeight: FontWeight.w600,
17411741
height: 1,
17421742
),
1743+
maxScaleFactor: 1.4,
17431744
),
17441745
)
17451746
: const SizedBox.shrink(),
@@ -1780,7 +1781,7 @@ class DefaultAssetPickerBuilderDelegate
17801781
Expanded(
17811782
child: Padding(
17821783
padding: const EdgeInsetsDirectional.only(start: 4.0),
1783-
child: Text(
1784+
child: ScaleText(
17841785
Constants.textDelegate.durationIndicatorBuilder(
17851786
Duration(seconds: asset.duration),
17861787
),
@@ -1790,6 +1791,7 @@ class DefaultAssetPickerBuilderDelegate
17901791
height: 1.4,
17911792
),
17921793
maxLines: 1,
1794+
maxScaleFactor: 1.2,
17931795
),
17941796
),
17951797
),

lib/src/delegates/asset_picker_viewer_builder_delegate.dart

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import 'package:extended_image/extended_image.dart';
1313
import '../constants/constants.dart';
1414
import '../widget/builder/value_listenable_builder_2.dart';
1515
import '../widget/custom_checkbox.dart';
16+
import '../widget/scale_text.dart';
1617

1718
abstract class AssetPickerViewerBuilderDelegate<Asset, Path> {
1819
AssetPickerViewerBuilderDelegate({
@@ -186,7 +187,7 @@ abstract class AssetPickerViewerBuilderDelegate<Asset, Path> {
186187
/// 资源缩略数据加载失败时使用的部件
187188
Widget failedItemBuilder(BuildContext context) {
188189
return Center(
189-
child: Text(
190+
child: ScaleText(
190191
Constants.textDelegate.loadFailed,
191192
textAlign: TextAlign.center,
192193
style: const TextStyle(fontSize: 18.0),
@@ -372,7 +373,9 @@ class DefaultAssetPickerViewerBuilderDelegate
372373
break;
373374
case AssetType.other:
374375
builder = Center(
375-
child: Text(Constants.textDelegate.unSupportedAssetType),
376+
child: ScaleText(
377+
Constants.textDelegate.unSupportedAssetType,
378+
),
376379
);
377380
break;
378381
}
@@ -641,7 +644,7 @@ class DefaultAssetPickerViewerBuilderDelegate
641644
initialData: currentIndex,
642645
stream: pageStreamController.stream,
643646
builder: (_, AsyncSnapshot<int> snapshot) => Center(
644-
child: Text(
647+
child: ScaleText(
645648
'${snapshot.data! + 1}/${previewAssets.length}',
646649
style: const TextStyle(
647650
fontSize: 18.0,
@@ -685,7 +688,7 @@ class DefaultAssetPickerViewerBuilderDelegate
685688
shape: RoundedRectangleBorder(
686689
borderRadius: BorderRadius.circular(3.0),
687690
),
688-
child: Text(
691+
child: ScaleText(
689692
() {
690693
if (isWeChatMoment && hasVideo) {
691694
return Constants.textDelegate.confirm;
@@ -810,7 +813,7 @@ class DefaultAssetPickerViewerBuilderDelegate
810813
},
811814
),
812815
if (!isAppleOS)
813-
Text(
816+
ScaleText(
814817
Constants.textDelegate.select,
815818
style: const TextStyle(fontSize: 18.0),
816819
),

lib/src/widget/asset_picker.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
///
55
66
import 'package:flutter/material.dart';
7-
import 'package:flutter/foundation.dart';
87
import 'package:flutter/services.dart';
98

109
import '../constants/constants.dart';

lib/src/widget/asset_picker_viewer.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@
44
///
55
import 'dart:async';
66

7-
import 'package:flutter/cupertino.dart';
87
import 'package:flutter/material.dart';
9-
import 'package:flutter/foundation.dart';
108

119
import '../constants/constants.dart';
1210

lib/src/widget/builder/asset_entity_grid_item_builder.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'package:extended_image/extended_image.dart';
77

88
import '../../constants/constants.dart';
99
import '../../provider/asset_entity_image_provider.dart';
10+
import '../../widget/scale_text.dart';
1011

1112
class AssetEntityGridItemBuilder extends StatefulWidget {
1213
const AssetEntityGridItemBuilder({
@@ -54,7 +55,7 @@ class AssetEntityGridItemWidgetState extends State<AssetEntityGridItemBuilder> {
5455
/// 资源缩略数据加载失败时使用的部件
5556
Widget failedItemBuilder(BuildContext context) {
5657
return Center(
57-
child: Text(
58+
child: ScaleText(
5859
Constants.textDelegate.loadFailed,
5960
textAlign: TextAlign.center,
6061
style: const TextStyle(fontSize: 18.0),

lib/src/widget/builder/audio_page_builder.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ import 'dart:async';
66

77
import 'package:flutter/material.dart';
88

9-
import 'package:wechat_assets_picker/src/constants/constants.dart';
9+
import '../../../src/constants/constants.dart';
10+
import '../scale_text.dart';
1011

1112
class AudioPageBuilder extends StatefulWidget {
1213
const AudioPageBuilder({
@@ -106,7 +107,7 @@ class _AudioPageBuilderState extends State<AudioPageBuilder> {
106107
/// Title widget.
107108
/// 标题组件
108109
Widget get titleWidget {
109-
return Text(
110+
return ScaleText(
110111
widget.asset.title ?? '',
111112
style: const TextStyle(fontSize: 20.0, fontWeight: FontWeight.normal),
112113
);
@@ -144,7 +145,7 @@ class _AudioPageBuilderState extends State<AudioPageBuilder> {
144145
initialData: Duration.zero,
145146
stream: durationStreamController.stream,
146147
builder: (BuildContext _, AsyncSnapshot<Duration> data) {
147-
return Text(
148+
return ScaleText(
148149
'${Constants.textDelegate.durationIndicatorBuilder(data.data!)}'
149150
' / '
150151
'${Constants.textDelegate.durationIndicatorBuilder(assetDuration)}',

lib/src/widget/builder/image_page_builder.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import 'package:flutter/material.dart';
66
import 'package:extended_image/extended_image.dart';
77

8-
import 'package:wechat_assets_picker/src/constants/constants.dart';
8+
import '../../constants/constants.dart';
99

1010
class ImagePageBuilder extends StatefulWidget {
1111
const ImagePageBuilder({

lib/src/widget/builder/video_page_builder.dart

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
import 'package:flutter/material.dart';
66
import 'package:video_player/video_player.dart';
77

8-
import 'package:wechat_assets_picker/src/constants/constants.dart';
8+
import '../../constants/constants.dart';
9+
import '../scale_text.dart';
910

1011
class VideoPageBuilder extends StatefulWidget {
1112
const VideoPageBuilder({
@@ -136,7 +137,11 @@ class _VideoPageBuilderState extends State<VideoPageBuilder> {
136137
@override
137138
Widget build(BuildContext context) {
138139
if (hasErrorWhenInitializing) {
139-
return Center(child: Text(Constants.textDelegate.loadFailed));
140+
return Center(
141+
child: ScaleText(
142+
Constants.textDelegate.loadFailed,
143+
),
144+
);
140145
}
141146
if (!hasLoaded) {
142147
return const SizedBox.shrink();

0 commit comments

Comments
 (0)