Skip to content

Commit b387efc

Browse files
committed
refactor(examples): extract maskValue utility
1 parent ebb45e3 commit b387efc

6 files changed

Lines changed: 36 additions & 16 deletions

File tree

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import 'package:flutter_dotenv/flutter_dotenv.dart';
2+
3+
const String _maskChar = '\u2022';
4+
final bool _isE2E = dotenv.env['E2E_MODE'] == 'true';
5+
6+
/// Replaces [value] with a mask of equal length when running in E2E mode so
7+
/// real app/push IDs don't leak into screenshots or Appium element captures.
8+
/// Returns [value] unchanged otherwise.
9+
String maskValue(String value) {
10+
if (_isE2E) {
11+
return _maskChar * value.length;
12+
}
13+
return value;
14+
}

examples/demo/lib/widgets/sections/app_section.dart

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
import 'package:flutter/material.dart';
2-
import 'package:flutter_dotenv/flutter_dotenv.dart';
32
import 'package:provider/provider.dart';
43
import 'package:url_launcher/url_launcher.dart';
54

65
import '../../theme.dart';
6+
import '../../utils/mask_value.dart';
77
import '../../viewmodels/app_viewmodel.dart';
88
import '../section_card.dart';
99
import '../toggle_row.dart';
1010

11-
final bool _isE2E = dotenv.env['E2E_MODE'] == 'true';
12-
1311
class AppSection extends StatelessWidget {
1412
final VoidCallback? onInfoTap;
1513

@@ -40,7 +38,7 @@ class AppSection extends StatelessWidget {
4038
identifier: 'app_id_value',
4139
container: true,
4240
child: SelectableText(
43-
_isE2E ? '••••••••-••••-••••-••••-••••••••••••' : vm.appId,
41+
maskValue(vm.appId),
4442
style: Theme.of(context).textTheme.bodySmall?.copyWith(
4543
fontFamily: 'monospace',
4644
),

examples/demo/lib/widgets/sections/push_section.dart

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
import 'package:flutter/material.dart';
2-
import 'package:flutter_dotenv/flutter_dotenv.dart';
32
import 'package:provider/provider.dart';
43

54
import '../../theme.dart';
5+
import '../../utils/mask_value.dart';
66
import '../../viewmodels/app_viewmodel.dart';
77
import '../action_button.dart';
88
import '../section_card.dart';
99
import '../toggle_row.dart';
1010

11-
final bool _isE2E = dotenv.env['E2E_MODE'] == 'true';
12-
1311
class PushSection extends StatelessWidget {
1412
final VoidCallback? onInfoTap;
1513

@@ -43,7 +41,7 @@ class PushSection extends StatelessWidget {
4341
identifier: 'push_id_value',
4442
container: true,
4543
child: SelectableText(
46-
_isE2E ? '••••••••-••••-••••-••••-••••••••••••' : (vm.pushSubscriptionId ?? 'N/A'),
44+
maskValue(vm.pushSubscriptionId ?? 'N/A'),
4745
style: Theme.of(context).textTheme.bodySmall?.copyWith(
4846
fontFamily: 'monospace',
4947
),
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import 'package:flutter_dotenv/flutter_dotenv.dart';
2+
3+
const String _maskChar = '\u2022';
4+
final bool _isE2E = dotenv.env['E2E_MODE'] == 'true';
5+
6+
/// Replaces [value] with a mask of equal length when running in E2E mode so
7+
/// real app/push IDs don't leak into screenshots or Appium element captures.
8+
/// Returns [value] unchanged otherwise.
9+
String maskValue(String value) {
10+
if (_isE2E) {
11+
return _maskChar * value.length;
12+
}
13+
return value;
14+
}

examples/demo_pods/lib/widgets/sections/app_section.dart

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
import 'package:flutter/material.dart';
2-
import 'package:flutter_dotenv/flutter_dotenv.dart';
32
import 'package:provider/provider.dart';
43
import 'package:url_launcher/url_launcher.dart';
54

65
import '../../theme.dart';
6+
import '../../utils/mask_value.dart';
77
import '../../viewmodels/app_viewmodel.dart';
88
import '../section_card.dart';
99
import '../toggle_row.dart';
1010

11-
final bool _isE2E = dotenv.env['E2E_MODE'] == 'true';
12-
1311
class AppSection extends StatelessWidget {
1412
final VoidCallback? onInfoTap;
1513

@@ -40,7 +38,7 @@ class AppSection extends StatelessWidget {
4038
identifier: 'app_id_value',
4139
container: true,
4240
child: SelectableText(
43-
_isE2E ? '••••••••-••••-••••-••••-••••••••••••' : vm.appId,
41+
maskValue(vm.appId),
4442
style: Theme.of(context).textTheme.bodySmall?.copyWith(
4543
fontFamily: 'monospace',
4644
),

examples/demo_pods/lib/widgets/sections/push_section.dart

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
import 'package:flutter/material.dart';
2-
import 'package:flutter_dotenv/flutter_dotenv.dart';
32
import 'package:provider/provider.dart';
43

54
import '../../theme.dart';
5+
import '../../utils/mask_value.dart';
66
import '../../viewmodels/app_viewmodel.dart';
77
import '../action_button.dart';
88
import '../section_card.dart';
99
import '../toggle_row.dart';
1010

11-
final bool _isE2E = dotenv.env['E2E_MODE'] == 'true';
12-
1311
class PushSection extends StatelessWidget {
1412
final VoidCallback? onInfoTap;
1513

@@ -43,7 +41,7 @@ class PushSection extends StatelessWidget {
4341
identifier: 'push_id_value',
4442
container: true,
4543
child: SelectableText(
46-
_isE2E ? '••••••••-••••-••••-••••-••••••••••••' : (vm.pushSubscriptionId ?? 'N/A'),
44+
maskValue(vm.pushSubscriptionId ?? 'N/A'),
4745
style: Theme.of(context).textTheme.bodySmall?.copyWith(
4846
fontFamily: 'monospace',
4947
),

0 commit comments

Comments
 (0)