@@ -764,47 +764,75 @@ class _UserPreferenceLimitsFormState extends State<_UserPreferenceLimitsForm> {
764
764
case AppUserRole .guestUser:
765
765
_followedItemsLimitController = TextEditingController (
766
766
text: config.guestFollowedItemsLimit.toString (),
767
- );
767
+ )..selection = TextSelection .collapsed (
768
+ offset: config.guestFollowedItemsLimit.toString ().length,
769
+ );
768
770
_savedHeadlinesLimitController = TextEditingController (
769
771
text: config.guestSavedHeadlinesLimit.toString (),
770
- );
772
+ )..selection = TextSelection .collapsed (
773
+ offset: config.guestSavedHeadlinesLimit.toString ().length,
774
+ );
771
775
case AppUserRole .standardUser:
772
776
_followedItemsLimitController = TextEditingController (
773
777
text: config.authenticatedFollowedItemsLimit.toString (),
774
- );
778
+ )..selection = TextSelection .collapsed (
779
+ offset: config.authenticatedFollowedItemsLimit.toString ().length,
780
+ );
775
781
_savedHeadlinesLimitController = TextEditingController (
776
782
text: config.authenticatedSavedHeadlinesLimit.toString (),
777
- );
783
+ )..selection = TextSelection .collapsed (
784
+ offset: config.authenticatedSavedHeadlinesLimit.toString ().length,
785
+ );
778
786
case AppUserRole .premiumUser:
779
787
_followedItemsLimitController = TextEditingController (
780
788
text: config.premiumFollowedItemsLimit.toString (),
781
- );
789
+ )..selection = TextSelection .collapsed (
790
+ offset: config.premiumFollowedItemsLimit.toString ().length,
791
+ );
782
792
_savedHeadlinesLimitController = TextEditingController (
783
793
text: config.premiumSavedHeadlinesLimit.toString (),
784
- );
794
+ )..selection = TextSelection .collapsed (
795
+ offset: config.premiumSavedHeadlinesLimit.toString ().length,
796
+ );
785
797
}
786
798
}
787
799
788
800
void _updateControllers () {
789
801
final config = widget.remoteConfig.userPreferenceConfig;
790
802
switch (widget.userRole) {
791
803
case AppUserRole .guestUser:
792
- _followedItemsLimitController.text = config.guestFollowedItemsLimit
793
- .toString ();
794
- _savedHeadlinesLimitController.text = config.guestSavedHeadlinesLimit
795
- .toString ();
804
+ _followedItemsLimitController.text =
805
+ config.guestFollowedItemsLimit.toString ();
806
+ _followedItemsLimitController.selection = TextSelection .collapsed (
807
+ offset: _followedItemsLimitController.text.length,
808
+ );
809
+ _savedHeadlinesLimitController.text =
810
+ config.guestSavedHeadlinesLimit.toString ();
811
+ _savedHeadlinesLimitController.selection = TextSelection .collapsed (
812
+ offset: _savedHeadlinesLimitController.text.length,
813
+ );
796
814
case AppUserRole .standardUser:
797
- _followedItemsLimitController.text = config
798
- .authenticatedFollowedItemsLimit
799
- .toString ();
800
- _savedHeadlinesLimitController.text = config
801
- .authenticatedSavedHeadlinesLimit
802
- .toString ();
815
+ _followedItemsLimitController.text =
816
+ config.authenticatedFollowedItemsLimit.toString ();
817
+ _followedItemsLimitController.selection = TextSelection .collapsed (
818
+ offset: _followedItemsLimitController.text.length,
819
+ );
820
+ _savedHeadlinesLimitController.text =
821
+ config.authenticatedSavedHeadlinesLimit.toString ();
822
+ _savedHeadlinesLimitController.selection = TextSelection .collapsed (
823
+ offset: _savedHeadlinesLimitController.text.length,
824
+ );
803
825
case AppUserRole .premiumUser:
804
- _followedItemsLimitController.text = config.premiumFollowedItemsLimit
805
- .toString ();
806
- _savedHeadlinesLimitController.text = config.premiumSavedHeadlinesLimit
807
- .toString ();
826
+ _followedItemsLimitController.text =
827
+ config.premiumFollowedItemsLimit.toString ();
828
+ _followedItemsLimitController.selection = TextSelection .collapsed (
829
+ offset: _followedItemsLimitController.text.length,
830
+ );
831
+ _savedHeadlinesLimitController.text =
832
+ config.premiumSavedHeadlinesLimit.toString ();
833
+ _savedHeadlinesLimitController.selection = TextSelection .collapsed (
834
+ offset: _savedHeadlinesLimitController.text.length,
835
+ );
808
836
}
809
837
}
810
838
@@ -1002,17 +1030,24 @@ class _FeedDecoratorFormState extends State<_FeedDecoratorForm> {
1002
1030
void _initializeControllers () {
1003
1031
final decoratorConfig =
1004
1032
widget.remoteConfig.feedDecoratorConfig[widget.decoratorType]! ;
1005
- _itemsToDisplayController = TextEditingController (
1006
- text: decoratorConfig.itemsToDisplay? .toString () ?? '' ,
1007
- );
1033
+ _itemsToDisplayController = TextEditingController (
1034
+ text: decoratorConfig.itemsToDisplay? .toString () ?? '' ,
1035
+ )..selection = TextSelection .collapsed (
1036
+ offset: decoratorConfig.itemsToDisplay? .toString ().length ?? 0 ,
1037
+ );
1008
1038
1009
1039
_roleControllers = {
1010
1040
for (final role in AppUserRole .values)
1011
1041
role: TextEditingController (
1012
1042
text:
1013
1043
decoratorConfig.visibleTo[role]? .daysBetweenViews.toString () ??
1014
1044
'' ,
1015
- ),
1045
+ )..selection = TextSelection .collapsed (
1046
+ offset: decoratorConfig.visibleTo[role]? .daysBetweenViews
1047
+ .toString ()
1048
+ .length ??
1049
+ 0 ,
1050
+ ),
1016
1051
};
1017
1052
}
1018
1053
@@ -1021,9 +1056,15 @@ class _FeedDecoratorFormState extends State<_FeedDecoratorForm> {
1021
1056
widget.remoteConfig.feedDecoratorConfig[widget.decoratorType]! ;
1022
1057
_itemsToDisplayController.text =
1023
1058
decoratorConfig.itemsToDisplay? .toString () ?? '' ;
1059
+ _itemsToDisplayController.selection = TextSelection .collapsed (
1060
+ offset: _itemsToDisplayController.text.length,
1061
+ );
1024
1062
for (final role in AppUserRole .values) {
1025
1063
_roleControllers[role]? .text =
1026
1064
decoratorConfig.visibleTo[role]? .daysBetweenViews.toString () ?? '' ;
1065
+ _roleControllers[role]? .selection = TextSelection .collapsed (
1066
+ offset: _roleControllers[role]? .text.length ?? 0 ,
1067
+ );
1027
1068
}
1028
1069
}
1029
1070
@@ -1212,41 +1253,67 @@ class _AdConfigFormState extends State<_AdConfigForm> {
1212
1253
case AppUserRole .guestUser:
1213
1254
_adFrequencyController = TextEditingController (
1214
1255
text: adConfig.guestAdFrequency.toString (),
1215
- );
1256
+ )..selection = TextSelection .collapsed (
1257
+ offset: adConfig.guestAdFrequency.toString ().length,
1258
+ );
1216
1259
_adPlacementIntervalController = TextEditingController (
1217
1260
text: adConfig.guestAdPlacementInterval.toString (),
1218
- );
1261
+ )..selection = TextSelection .collapsed (
1262
+ offset: adConfig.guestAdPlacementInterval.toString ().length,
1263
+ );
1219
1264
_articlesToReadBeforeShowingInterstitialAdsController =
1220
1265
TextEditingController (
1221
1266
text: adConfig.guestArticlesToReadBeforeShowingInterstitialAds
1222
1267
.toString (),
1223
- );
1268
+ )..selection = TextSelection .collapsed (
1269
+ offset: adConfig.guestArticlesToReadBeforeShowingInterstitialAds
1270
+ .toString ()
1271
+ .length,
1272
+ );
1224
1273
case AppUserRole .standardUser:
1225
1274
_adFrequencyController = TextEditingController (
1226
1275
text: adConfig.authenticatedAdFrequency.toString (),
1227
- );
1276
+ )..selection = TextSelection .collapsed (
1277
+ offset: adConfig.authenticatedAdFrequency.toString ().length,
1278
+ );
1228
1279
_adPlacementIntervalController = TextEditingController (
1229
1280
text: adConfig.authenticatedAdPlacementInterval.toString (),
1230
- );
1281
+ )..selection = TextSelection .collapsed (
1282
+ offset: adConfig.authenticatedAdPlacementInterval.toString ().length,
1283
+ );
1231
1284
_articlesToReadBeforeShowingInterstitialAdsController =
1232
1285
TextEditingController (
1233
1286
text: adConfig
1234
1287
.standardUserArticlesToReadBeforeShowingInterstitialAds
1235
1288
.toString (),
1236
- );
1289
+ )..selection = TextSelection .collapsed (
1290
+ offset: adConfig
1291
+ .standardUserArticlesToReadBeforeShowingInterstitialAds
1292
+ .toString ()
1293
+ .length,
1294
+ );
1237
1295
case AppUserRole .premiumUser:
1238
1296
_adFrequencyController = TextEditingController (
1239
1297
text: adConfig.premiumAdFrequency.toString (),
1240
- );
1298
+ )..selection = TextSelection .collapsed (
1299
+ offset: adConfig.premiumAdFrequency.toString ().length,
1300
+ );
1241
1301
_adPlacementIntervalController = TextEditingController (
1242
1302
text: adConfig.premiumAdPlacementInterval.toString (),
1243
- );
1303
+ )..selection = TextSelection .collapsed (
1304
+ offset: adConfig.premiumAdPlacementInterval.toString ().length,
1305
+ );
1244
1306
_articlesToReadBeforeShowingInterstitialAdsController =
1245
1307
TextEditingController (
1246
1308
text: adConfig
1247
1309
.premiumUserArticlesToReadBeforeShowingInterstitialAds
1248
1310
.toString (),
1249
- );
1311
+ )..selection = TextSelection .collapsed (
1312
+ offset: adConfig
1313
+ .premiumUserArticlesToReadBeforeShowingInterstitialAds
1314
+ .toString ()
1315
+ .length,
1316
+ );
1250
1317
}
1251
1318
}
1252
1319
@@ -1255,28 +1322,55 @@ class _AdConfigFormState extends State<_AdConfigForm> {
1255
1322
switch (widget.userRole) {
1256
1323
case AppUserRole .guestUser:
1257
1324
_adFrequencyController.text = adConfig.guestAdFrequency.toString ();
1258
- _adPlacementIntervalController.text = adConfig.guestAdPlacementInterval
1259
- .toString ();
1260
- _articlesToReadBeforeShowingInterstitialAdsController.text = adConfig
1261
- .guestArticlesToReadBeforeShowingInterstitialAds
1262
- .toString ();
1325
+ _adFrequencyController.selection = TextSelection .collapsed (
1326
+ offset: _adFrequencyController.text.length,
1327
+ );
1328
+ _adPlacementIntervalController.text =
1329
+ adConfig.guestAdPlacementInterval.toString ();
1330
+ _adPlacementIntervalController.selection = TextSelection .collapsed (
1331
+ offset: _adPlacementIntervalController.text.length,
1332
+ );
1333
+ _articlesToReadBeforeShowingInterstitialAdsController.text =
1334
+ adConfig.guestArticlesToReadBeforeShowingInterstitialAds.toString ();
1335
+ _articlesToReadBeforeShowingInterstitialAdsController.selection =
1336
+ TextSelection .collapsed (
1337
+ offset: _articlesToReadBeforeShowingInterstitialAdsController.text.length,
1338
+ );
1263
1339
case AppUserRole .standardUser:
1264
- _adFrequencyController.text = adConfig.authenticatedAdFrequency
1265
- .toString ();
1266
- _adPlacementIntervalController.text = adConfig
1267
- .authenticatedAdPlacementInterval
1268
- .toString ();
1340
+ _adFrequencyController.text =
1341
+ adConfig.authenticatedAdFrequency.toString ();
1342
+ _adFrequencyController.selection = TextSelection .collapsed (
1343
+ offset: _adFrequencyController.text.length,
1344
+ );
1345
+ _adPlacementIntervalController.text =
1346
+ adConfig.authenticatedAdPlacementInterval.toString ();
1347
+ _adPlacementIntervalController.selection = TextSelection .collapsed (
1348
+ offset: _adPlacementIntervalController.text.length,
1349
+ );
1269
1350
_articlesToReadBeforeShowingInterstitialAdsController.text = adConfig
1270
1351
.standardUserArticlesToReadBeforeShowingInterstitialAds
1271
1352
.toString ();
1353
+ _articlesToReadBeforeShowingInterstitialAdsController.selection =
1354
+ TextSelection .collapsed (
1355
+ offset: _articlesToReadBeforeShowingInterstitialAdsController.text.length,
1356
+ );
1272
1357
case AppUserRole .premiumUser:
1273
1358
_adFrequencyController.text = adConfig.premiumAdFrequency.toString ();
1274
- _adPlacementIntervalController.text = adConfig
1275
- .premiumAdPlacementInterval
1276
- .toString ();
1359
+ _adFrequencyController.selection = TextSelection .collapsed (
1360
+ offset: _adFrequencyController.text.length,
1361
+ );
1362
+ _adPlacementIntervalController.text =
1363
+ adConfig.premiumAdPlacementInterval.toString ();
1364
+ _adPlacementIntervalController.selection = TextSelection .collapsed (
1365
+ offset: _adPlacementIntervalController.text.length,
1366
+ );
1277
1367
_articlesToReadBeforeShowingInterstitialAdsController.text = adConfig
1278
1368
.premiumUserArticlesToReadBeforeShowingInterstitialAds
1279
1369
.toString ();
1370
+ _articlesToReadBeforeShowingInterstitialAdsController.selection =
1371
+ TextSelection .collapsed (
1372
+ offset: _articlesToReadBeforeShowingInterstitialAdsController.text.length,
1373
+ );
1280
1374
}
1281
1375
}
1282
1376
0 commit comments