Skip to content

Commit 52b914f

Browse files
Merge pull request #259 from atsign-foundation/feat/follow-check
feat: validate atSign before follow and migrate to flutter 3.10
2 parents bc1b5b7 + 07a72c8 commit 52b914f

26 files changed

+183
-230
lines changed

android/gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
org.gradle.jvmargs=-Xmx1536M
22
android.useAndroidX=true
33
android.enableJetifier=true
4-
android.jetifier.blacklist=moshi-1.13.0
4+
android.jetifier.ignorelist=moshi-1.13.0

lib/app.dart

-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import 'package:at_wavi_app/view_models/user_preview.dart';
1616
import 'package:at_wavi_app/view_models/user_provider.dart';
1717
import 'package:flutter/material.dart';
1818
import 'package:flutter/scheduler.dart';
19-
import 'package:internet_connection_checker/internet_connection_checker.dart';
2019
import 'package:provider/provider.dart';
2120

2221
import 'desktop/routes/desktop_routes.dart';

lib/common_components/custom_card.dart

+1-7
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ class CustomCard extends StatelessWidget {
1212
final bool isUrl;
1313
final String? url;
1414
final bool isEmail;
15-
late bool _isDark;
16-
late ThemeData themeData;
15+
final ThemeData themeData;
1716
CustomCard(
1817
{this.title,
1918
this.isEmail = false,
@@ -22,13 +21,8 @@ class CustomCard extends StatelessWidget {
2221
this.isUrl = false,
2322
required this.themeData});
2423

25-
void setThemeData(BuildContext context) {
26-
_isDark = themeData.scaffoldBackgroundColor == ColorConstants.black;
27-
}
28-
2924
@override
3025
Widget build(BuildContext context) {
31-
setThemeData(context);
3226
return Container(
3327
color: themeData.backgroundColor,
3428
child: Padding(

lib/common_components/custom_media_card.dart

+1-7
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import 'dart:typed_data';
33

44
import 'package:at_wavi_app/model/user.dart';
55
import 'package:at_wavi_app/utils/at_enum.dart';
6-
import 'package:at_wavi_app/utils/colors.dart';
76
import 'package:at_wavi_app/utils/text_styles.dart';
87
import 'package:flutter/material.dart';
98
import 'package:youtube_player_flutter/youtube_player_flutter.dart';
@@ -18,14 +17,10 @@ class CustomMediaCard extends StatefulWidget {
1817
}
1918

2019
class _CustomMediaCardState extends State<CustomMediaCard> {
21-
late bool _isDark, _isImage = false, _isVideo = false;
20+
late bool _isImage = false, _isVideo = false;
2221
Uint8List? customImage;
2322
late YoutubePlayerController _controller;
2423

25-
void setThemeData(BuildContext context) {
26-
_isDark = widget.themeData.scaffoldBackgroundColor == ColorConstants.black;
27-
}
28-
2924
@override
3025
void initState() {
3126
if (widget.basicData.type == CustomContentType.Image.name) {
@@ -55,7 +50,6 @@ class _CustomMediaCardState extends State<CustomMediaCard> {
5550

5651
@override
5752
Widget build(BuildContext context) {
58-
setThemeData(context);
5953
return Container(
6054
color: widget.themeData.backgroundColor,
6155
child: Padding(

lib/common_components/media_content_edit_card.dart

-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import 'package:at_wavi_app/model/user.dart';
44
import 'package:at_wavi_app/utils/colors.dart';
55
import 'package:at_wavi_app/utils/text_styles.dart';
66
import 'package:flutter/material.dart';
7-
import 'package:at_wavi_app/services/size_config.dart';
87

98
class MediaContentEditCard extends StatefulWidget {
109
final BasicData basicData;

lib/common_components/public_private_bottomsheet.dart

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import 'package:at_wavi_app/services/nav_service.dart';
22
import 'package:at_wavi_app/services/size_config.dart';
3-
import 'package:at_wavi_app/utils/colors.dart';
43
import 'package:at_wavi_app/utils/text_styles.dart';
54
import 'package:flutter/material.dart';
65

lib/common_components/qr_scanner.dart

-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import 'package:at_wavi_app/routes/routes.dart';
88
import 'package:at_wavi_app/services/common_functions.dart';
99
import 'package:at_wavi_app/services/field_order_service.dart';
1010
import 'package:at_wavi_app/services/search_service.dart';
11-
import 'package:at_wavi_app/services/size_config.dart';
1211
import 'package:at_wavi_app/utils/colors.dart';
1312
import 'package:at_wavi_app/utils/text_styles.dart';
1413
import 'package:at_wavi_app/view_models/user_preview.dart';

lib/common_components/switch_at_sign.dart

-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ import 'dart:math';
22
import 'dart:typed_data';
33
import 'package:at_common_flutter/services/size_config.dart';
44
import 'package:at_contacts_flutter/widgets/custom_circle_avatar.dart';
5-
import 'package:at_wavi_app/routes/route_names.dart';
6-
import 'package:at_wavi_app/routes/routes.dart';
75
import 'package:at_wavi_app/services/backend_service.dart';
86
import 'package:at_wavi_app/services/common_functions.dart';
97
import 'package:flutter/material.dart';

lib/desktop/screens/desktop_edit_profile/desktop_profile_picture/desktop_profile_picture_page.dart

-3
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,9 @@ import 'package:at_wavi_app/view_models/user_preview.dart';
99
import 'package:at_wavi_app/view_models/user_provider.dart';
1010
import 'package:provider/provider.dart';
1111
import 'package:at_wavi_app/desktop/services/theme/app_theme.dart';
12-
import '../../../services/theme/app_theme.dart';
1312
import 'package:at_wavi_app/desktop/widgets/buttons/desktop_icon_button.dart';
1413
import 'package:flutter/material.dart';
1514

16-
import '../desktop_edit_profile_model.dart';
17-
1815
class DesktopProfilePicturePage extends StatefulWidget {
1916
DesktopProfilePicturePage({Key? key}) : super(key: key);
2017

lib/desktop/screens/desktop_my_profile/desktop_search_atsign/desktop_search_atsign_model.dart

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import 'package:at_wavi_app/desktop/utils/load_status.dart';
2-
import 'package:at_wavi_app/model/user.dart';
32
import 'package:at_wavi_app/services/search_service.dart';
43
import 'package:at_wavi_app/view_models/user_preview.dart';
54
import 'package:flutter/cupertino.dart';

lib/desktop/screens/desktop_my_profile/desktop_settings/desktop_switch_account/desktop_switch_account_page.dart

-5
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,9 @@ import 'dart:math';
22
import 'dart:typed_data';
33
import 'package:at_common_flutter/services/size_config.dart';
44
import 'package:at_contacts_flutter/widgets/custom_circle_avatar.dart';
5-
import 'package:at_onboarding_flutter/at_onboarding_flutter.dart';
65
import 'package:at_wavi_app/common_components/contact_initial.dart';
7-
import 'package:at_wavi_app/routes/route_names.dart';
8-
import 'package:at_wavi_app/routes/routes.dart';
96
import 'package:at_wavi_app/services/backend_service.dart';
107
import 'package:at_wavi_app/services/common_functions.dart';
11-
import 'package:at_wavi_app/services/nav_service.dart';
12-
import 'package:at_wavi_app/utils/constants.dart';
138
import 'package:flutter/material.dart';
149

1510
class DesktopSwitchAccountPage extends StatefulWidget {

lib/desktop/screens/desktop_notification/desktop_new_request_page.dart

-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import 'package:at_wavi_app/desktop/services/theme/app_theme.dart';
2-
import 'package:at_wavi_app/utils/colors.dart';
32
import 'package:flutter/material.dart';
43

54
import 'item/desktop_new_request_item.dart';
@@ -14,7 +13,6 @@ class DesktopNewRequestPage extends StatefulWidget {
1413
class _DesktopNewRequestPageState extends State<DesktopNewRequestPage> {
1514
@override
1615
Widget build(BuildContext context) {
17-
final appTheme = AppTheme.of(context);
1816
return ListView.separated(
1917
itemCount: 5,
2018
shrinkWrap: true,

lib/desktop/screens/desktop_notification/desktop_notification_list_page.dart

-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import 'package:at_wavi_app/desktop/services/theme/app_theme.dart';
22
import 'package:at_wavi_app/desktop/utils/enums.dart';
3-
import 'package:at_wavi_app/utils/colors.dart';
43
import 'package:flutter/material.dart';
54

65
import 'item/desktop_notification_item.dart';
@@ -20,7 +19,6 @@ class _DesktopNotificationListPageState
2019
extends State<DesktopNotificationListPage> {
2120
@override
2221
Widget build(BuildContext context) {
23-
final appTheme = AppTheme.of(context);
2422
return ListView.separated(
2523
itemCount: 5,
2624
shrinkWrap: true,

lib/desktop/screens/desktop_notification/item/desktop_notification_item.dart

-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import 'package:at_wavi_app/desktop/services/theme/app_theme.dart';
44
import 'package:at_wavi_app/desktop/utils/enums.dart';
55
import 'package:flutter/cupertino.dart';
66
import 'package:flutter/material.dart';
7-
import 'package:showcaseview/showcaseview.dart';
87
import 'package:at_wavi_app/desktop/widgets/images/desktop_circle_avatar.dart';
98

109
class DesktopNotificationItem extends StatelessWidget {

lib/desktop/screens/desktop_profile_basic_info/desktop_profile_basic_info_page.dart

+6-7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import 'package:at_wavi_app/common_components/provider_callback.dart';
2-
import 'package:at_wavi_app/desktop/screens/desktop_edit_profile/desktop_edit_profile_model.dart';
32
import 'package:at_wavi_app/desktop/screens/desktop_location/desktop_location_preview_page.dart';
43
import 'package:at_wavi_app/desktop/screens/desktop_user_profile/desktop_user_profile_page.dart';
54
import 'package:at_wavi_app/desktop/services/theme/app_theme.dart';
@@ -469,7 +468,7 @@ class _DesktopProfileBasicInfoPageState
469468
}
470469

471470
void _showAddDetailPopup() async {
472-
final result = await showDialog<String>(
471+
await showDialog<String>(
473472
context: context,
474473
builder: (BuildContext context) => Dialog(
475474
backgroundColor: Colors.transparent,
@@ -489,7 +488,7 @@ class _DesktopProfileBasicInfoPageState
489488
}
490489

491490
void _showAddCustomContent() async {
492-
final result = await showDialog<String>(
491+
await showDialog<String>(
493492
context: context,
494493
builder: (BuildContext context) => Dialog(
495494
backgroundColor: Colors.transparent,
@@ -501,7 +500,7 @@ class _DesktopProfileBasicInfoPageState
501500
}
502501

503502
void _showEditCustomContent(BasicData data) async {
504-
final result = await showDialog<String>(
503+
await showDialog<String>(
505504
context: context,
506505
builder: (BuildContext context) => Dialog(
507506
backgroundColor: Colors.transparent,
@@ -519,7 +518,7 @@ class _DesktopProfileBasicInfoPageState
519518
BasicData? location,
520519
BasicData? locationNickname,
521520
}) async {
522-
final result = await showDialog<String>(
521+
await showDialog<String>(
523522
context: context,
524523
builder: (BuildContext context) => Dialog(
525524
backgroundColor: Colors.transparent,
@@ -534,7 +533,7 @@ class _DesktopProfileBasicInfoPageState
534533
}
535534

536535
void _showReorderDetailPopup() async {
537-
final result = await showDialog<List<String>>(
536+
await showDialog<List<String>>(
538537
context: context,
539538
builder: (BuildContext context) => Dialog(
540539
backgroundColor: Colors.transparent,
@@ -563,7 +562,7 @@ class _DesktopProfileBasicInfoPageState
563562
);
564563
} else if ((title ?? '').isNotEmpty) {
565564
try {
566-
launch('https://www.google.com/maps/place/$title');
565+
launchUrl(Uri.parse('https://www.google.com/maps/place/$title'));
567566
} catch (e) {}
568567
}
569568
}

lib/desktop/screens/desktop_profile_basic_info/desktop_profile_media/desktop_profile_media_page.dart

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import 'package:at_wavi_app/common_components/provider_callback.dart';
2-
import 'package:at_wavi_app/desktop/screens/desktop_edit_profile/desktop_edit_profile_model.dart';
32
import 'package:at_wavi_app/desktop/screens/desktop_profile_basic_info/desktop_profile_add_custom_field/desktop_profile_add_custom_field.dart';
43
import 'package:at_wavi_app/desktop/screens/desktop_profile_basic_info/desktop_profile_media/widgets/desktop_media_item.dart';
54
import 'package:at_wavi_app/desktop/screens/desktop_profile_basic_info/widgets/desktop_empty_category_widget.dart';
@@ -209,7 +208,7 @@ class _DesktopProfileMediaPageState extends State<DesktopProfileMediaPage>
209208
}
210209

211210
void _showAddCustomContent() async {
212-
final result = await showDialog<String>(
211+
await showDialog<String>(
213212
context: context,
214213
builder: (BuildContext context) => Dialog(
215214
backgroundColor: Colors.transparent,
@@ -229,7 +228,7 @@ class _DesktopProfileMediaPageState extends State<DesktopProfileMediaPage>
229228
}
230229

231230
void _editData(BasicData basicData) async {
232-
final result = await showDialog<String>(
231+
await showDialog<String>(
233232
context: context,
234233
builder: (BuildContext context) => Dialog(
235234
backgroundColor: Colors.transparent,

lib/desktop/screens/desktop_user_profile/desktop_profile_info_page.dart

-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import 'package:at_wavi_app/view_models/user_preview.dart';
2121
import 'package:at_wavi_app/view_models/user_provider.dart';
2222
import 'package:flutter/material.dart';
2323
import 'package:provider/provider.dart';
24-
import 'package:url_launcher/url_launcher.dart';
2524

2625
class DesktopProfileInfoPage extends StatefulWidget {
2726
final String? atSign;

lib/desktop/services/theme/app_theme.dart

-2
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,7 @@ class AppTheme {
140140
return ThemeData(
141141
// brightness: brightness,
142142
primaryColor: primaryColor,
143-
backgroundColor: backgroundColor,
144143
scaffoldBackgroundColor: backgroundColor,
145-
accentColor: accentColor,
146144
fontFamily: 'Inter',
147145
textTheme: textTheme,
148146
colorScheme: ThemeData.dark().colorScheme.copyWith(

lib/desktop/utils/dialog_utils.dart

-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
import 'package:at_wavi_app/desktop/screens/desktop_notification/desktop_notification_page.dart';
21
import 'package:at_wavi_app/desktop/screens/desktop_profile_basic_info/desktop_reorder_basic_info/desktop_reorder_basic_info_page.dart';
3-
import 'package:at_wavi_app/desktop/utils/shared_preferences_utils.dart';
4-
import 'package:at_wavi_app/desktop/utils/strings.dart';
52
import 'package:at_wavi_app/utils/at_enum.dart';
63
import 'package:flutter/material.dart';
74

lib/screens/add_link/create_custom_add_link/create_custom_add_link.dart

-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import 'dart:convert';
22

33
import 'package:at_wavi_app/common_components/custom_input_field.dart';
44
import 'package:at_wavi_app/common_components/loading_widget.dart';
5-
import 'package:at_wavi_app/common_components/text_tile.dart';
65
import 'package:at_wavi_app/model/user.dart';
76
import 'package:at_wavi_app/routes/route_names.dart';
87
import 'package:at_wavi_app/routes/routes.dart';

lib/screens/edit_persona/edit_category_fields.dart

-1
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,6 @@ class _EditCategoryFieldsState extends State<EditCategoryFields> {
413413
}
414414

415415
Widget inputField(BasicData basicData, {bool isCustomField = false}) {
416-
String error = "error";
417416
return Slidable(
418417
key: UniqueKey(),
419418
actionPane: SlidableDrawerActionPane(),

lib/screens/following.dart

-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ class Following extends StatefulWidget {
4040
class _FollowingState extends State<Following>
4141
with SingleTickerProviderStateMixin {
4242
late TabController _controller;
43-
int _tabIndex = 0;
4443
String _searchedText = '';
4544

4645
@override

lib/screens/home/home.dart

-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import 'package:at_wavi_app/screens/options.dart';
1515
import 'package:at_wavi_app/services/backend_service.dart';
1616
import 'package:at_wavi_app/services/common_functions.dart';
1717
import 'package:at_wavi_app/services/field_order_service.dart';
18-
import 'package:at_wavi_app/services/version_service.dart';
1918
import 'package:at_wavi_app/view_models/base_model.dart';
2019
import 'package:at_wavi_app/view_models/deep_link_provider.dart';
2120
import 'package:at_wavi_app/view_models/follow_service.dart';

lib/view_models/follow_service.dart

+29
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,17 @@ import 'package:at_contact/at_contact.dart';
33
import 'package:at_contacts_flutter/utils/init_contacts_service.dart';
44
import 'package:at_follows_flutter/domain/at_follows_list.dart';
55
import 'package:at_follows_flutter/utils/at_follow_services.dart';
6+
import 'package:at_server_status/at_server_status.dart';
67
import 'package:at_wavi_app/common_components/confirmation_dialog.dart';
8+
import 'package:at_wavi_app/desktop/utils/snackbar_utils.dart';
79
import 'package:at_wavi_app/model/at_follows_value.dart';
810
import 'package:at_wavi_app/services/backend_service.dart';
911
import 'package:at_wavi_app/view_models/base_model.dart';
1012
import 'package:easy_debounce/easy_debounce.dart';
13+
import 'package:flutter/cupertino.dart';
14+
import 'package:flutter/material.dart';
15+
16+
import '../services/nav_service.dart';
1117

1218
class FollowService extends BaseModel {
1319
FollowService();
@@ -16,6 +22,13 @@ class FollowService extends BaseModel {
1622
final String FETCH_FOLLOWERS = 'fetch_followers';
1723
final String FETCH_FOLLOWING = 'fetch_followings';
1824

25+
late AtStatus atStatus;
26+
final AtStatusImpl atStatusImpl = AtStatusImpl();
27+
28+
// AtStatus atStatus = await atStatusImpl.get(atSign);
29+
// AtSignStatus atSignStatus = atStatus.status();
30+
// int httpStatus = atStatus.httpStatus();
31+
1932
bool isFollowersFetched = false;
2033
bool isFollowingFetched = false;
2134

@@ -180,6 +193,22 @@ class FollowService extends BaseModel {
180193
///[forFollowersList] is to identify whether we want to perform operation on followers list or following list.
181194
Future<void> performFollowUnfollow(String atsign,
182195
{bool forFollowersList: false}) async {
196+
// check for the atsign we are about to follow is valid or not
197+
atStatus = await atStatusImpl.get(atsign);
198+
if (atStatus.serverLocation == null) {
199+
print('Invalid atSign');
200+
await ScaffoldMessenger.of(NavService.navKey.currentContext!)
201+
.showSnackBar(
202+
SnackBar(
203+
backgroundColor: Colors.red,
204+
content: Text(
205+
"Invalid atsign",
206+
style: TextStyle(color: Colors.white),
207+
),
208+
),
209+
);
210+
return;
211+
}
183212
try {
184213
bool isFollowingAtsign = isFollowing(atsign);
185214
if (isFollowingAtsign) {

0 commit comments

Comments
 (0)