Skip to content

Commit 5147042

Browse files
committed
✨(feat) Add display weburl preview in tweet.
1 parent f734335 commit 5147042

23 files changed

+633
-31
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import 'package:flutter_twitter_clone/model/link_media_info.dart';
2+
import 'dart:convert';
3+
import 'package:flutter_twitter_clone/model/user.dart';
4+
import 'package:shared_preferences/shared_preferences.dart';
5+
6+
class SharedPreferenceHelper {
7+
SharedPreferenceHelper._internal();
8+
static final SharedPreferenceHelper _singleton =
9+
SharedPreferenceHelper._internal();
10+
11+
factory SharedPreferenceHelper() {
12+
return _singleton;
13+
}
14+
15+
Future<String> getUserName() async {
16+
return (await SharedPreferences.getInstance())
17+
.getString(UserPreferenceKey.UserName.toString());
18+
}
19+
20+
Future clearPreferenceValues() async {
21+
await (SharedPreferences.getInstance())
22+
..clear();
23+
}
24+
25+
Future<void> saveUserProfile(UserModel user) async {
26+
return (await SharedPreferences.getInstance()).setString(
27+
UserPreferenceKey.UserProfile.toString(), json.encode(user.toJson()));
28+
}
29+
30+
Future<UserModel> getUserProfile() async {
31+
final jsonString = (await SharedPreferences.getInstance())
32+
.getString(UserPreferenceKey.UserProfile.toString());
33+
if (jsonString == null) return null;
34+
return UserModel.fromJson(json.decode(jsonString));
35+
}
36+
37+
Future<bool> saveLinkMediaInfo(String key, LinkMediaInfo model) async {
38+
return (await SharedPreferences.getInstance())
39+
.setString(key, json.encode(model.toJson()));
40+
}
41+
42+
Future<LinkMediaInfo> getLinkMediaInfo(String key) async {
43+
final jsonString = (await SharedPreferences.getInstance()).getString(key);
44+
if (jsonString == null) {
45+
return null;
46+
}
47+
return LinkMediaInfo.fromJson(json.decode(jsonString));
48+
}
49+
}
50+
51+
enum UserPreferenceKey { AccessToken, UserProfile, UserName, IsFirstTimeApp }

lib/model/link_media_info.dart

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import 'dart:convert';
2+
3+
class LinkMediaInfo {
4+
final String title;
5+
final String html;
6+
final int height;
7+
final String version;
8+
final int thumbnailHeight;
9+
final String providerUrl;
10+
final int width;
11+
final String providerName;
12+
final String url;
13+
final String type;
14+
final String authorUrl;
15+
final String thumbnailUrl;
16+
final int thumbnailWidth;
17+
final String authorName;
18+
19+
LinkMediaInfo({
20+
this.type,
21+
this.providerUrl,
22+
this.thumbnailHeight,
23+
this.authorUrl,
24+
this.thumbnailWidth,
25+
this.height,
26+
this.thumbnailUrl,
27+
this.providerName,
28+
this.width,
29+
this.title,
30+
this.url,
31+
this.authorName,
32+
this.html,
33+
this.version,
34+
});
35+
36+
factory LinkMediaInfo.fromRawJson(String str) =>
37+
LinkMediaInfo.fromJson(json.decode(str));
38+
39+
String toRawJson() => json.encode(toJson());
40+
41+
factory LinkMediaInfo.fromJson(Map<String, dynamic> json) => LinkMediaInfo(
42+
type: json["type"] == null ? null : json["type"],
43+
providerUrl: json["provider_url"] == null ? null : json["provider_url"],
44+
thumbnailHeight:
45+
json["thumbnail_height"] == null ? null : json["thumbnail_height"],
46+
authorUrl: json["author_url"] == null ? null : json["author_url"],
47+
thumbnailWidth:
48+
json["thumbnail_width"] == null ? null : json["thumbnail_width"],
49+
height: json["height"] == null ? null : json["height"],
50+
thumbnailUrl:
51+
json["thumbnail_url"] == null ? null : json["thumbnail_url"],
52+
providerName:
53+
json["provider_name"] == null ? null : json["provider_name"],
54+
width: json["width"] == null ? null : json["width"],
55+
title: json["title"] == null ? null : json["title"],
56+
url: json["url"] == null ? null : json["url"],
57+
authorName: json["author_name"] == null ? null : json["author_name"],
58+
html: json["html"] == null ? null : json["html"],
59+
version: json["version"] == null ? null : json["version"],
60+
);
61+
62+
Map<String, dynamic> toJson() => {
63+
"type": type == null ? null : type,
64+
"provider_url": providerUrl == null ? null : providerUrl,
65+
"thumbnail_height": thumbnailHeight == null ? null : thumbnailHeight,
66+
"author_url": authorUrl == null ? null : authorUrl,
67+
"thumbnail_width": thumbnailWidth == null ? null : thumbnailWidth,
68+
"height": height == null ? null : height,
69+
"thumbnail_url": thumbnailUrl == null ? null : thumbnailUrl,
70+
"provider_name": providerName == null ? null : providerName,
71+
"width": width == null ? null : width,
72+
"title": title == null ? null : title,
73+
"url": url == null ? null : url,
74+
"author_name": authorName == null ? null : authorName,
75+
"html": html == null ? null : html,
76+
"version": version == null ? null : version,
77+
};
78+
}

lib/ui/page/common/sidebar.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import 'package:flutter_twitter_clone/helper/constant.dart';
44
import 'package:flutter_twitter_clone/state/authState.dart';
55
import 'package:flutter_twitter_clone/ui/theme/theme.dart';
66
import 'package:flutter_twitter_clone/widgets/customWidgets.dart';
7-
import 'package:flutter_twitter_clone/widgets/newWidget/customUrlText.dart';
7+
import 'package:flutter_twitter_clone/widgets/url_text/customUrlText.dart';
88
import 'package:provider/provider.dart';
99

1010
class SidebarMenu extends StatefulWidget {

lib/ui/page/common/widget/userListWidget.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import 'package:flutter_twitter_clone/model/user.dart';
44
import 'package:flutter_twitter_clone/state/authState.dart';
55
import 'package:flutter_twitter_clone/ui/theme/theme.dart';
66
import 'package:flutter_twitter_clone/widgets/customWidgets.dart';
7-
import 'package:flutter_twitter_clone/widgets/newWidget/customUrlText.dart';
7+
import 'package:flutter_twitter_clone/widgets/url_text/customUrlText.dart';
88
import 'package:flutter_twitter_clone/widgets/newWidget/rippleButton.dart';
99
import 'package:flutter_twitter_clone/widgets/newWidget/title_text.dart';
1010
import 'package:provider/provider.dart';

lib/ui/page/feed/composeTweet/composeTweet.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import 'package:flutter_twitter_clone/state/searchState.dart';
1515
import 'package:flutter_twitter_clone/ui/theme/theme.dart';
1616
import 'package:flutter_twitter_clone/widgets/customAppBar.dart';
1717
import 'package:flutter_twitter_clone/widgets/customWidgets.dart';
18-
import 'package:flutter_twitter_clone/widgets/newWidget/customUrlText.dart';
18+
import 'package:flutter_twitter_clone/widgets/url_text/customUrlText.dart';
1919
import 'package:flutter_twitter_clone/widgets/newWidget/title_text.dart';
2020
import 'package:provider/provider.dart';
2121

lib/ui/page/message/chatScreenPage.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import 'package:flutter_twitter_clone/state/authState.dart';
77
import 'package:flutter_twitter_clone/state/chats/chatState.dart';
88
import 'package:flutter_twitter_clone/ui/theme/theme.dart';
99
import 'package:flutter_twitter_clone/widgets/customWidgets.dart';
10-
import 'package:flutter_twitter_clone/widgets/newWidget/customUrlText.dart';
10+
import 'package:flutter_twitter_clone/widgets/url_text/customUrlText.dart';
1111
import 'package:provider/provider.dart';
1212

1313
class ChatScreenPage extends StatefulWidget {

lib/ui/page/message/conversationInformation/conversationInformation.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import 'package:flutter_twitter_clone/state/chats/chatState.dart';
99
import 'package:flutter_twitter_clone/ui/theme/theme.dart';
1010
import 'package:flutter_twitter_clone/widgets/customAppBar.dart';
1111
import 'package:flutter_twitter_clone/widgets/customWidgets.dart';
12-
import 'package:flutter_twitter_clone/widgets/newWidget/customUrlText.dart';
12+
import 'package:flutter_twitter_clone/widgets/url_text/customUrlText.dart';
1313
import 'package:flutter_twitter_clone/widgets/newWidget/rippleButton.dart';
1414
import 'package:provider/provider.dart';
1515

lib/ui/page/message/newMessagePage.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import 'package:flutter_twitter_clone/state/searchState.dart';
77
import 'package:flutter_twitter_clone/ui/theme/theme.dart';
88
import 'package:flutter_twitter_clone/widgets/customAppBar.dart';
99
import 'package:flutter_twitter_clone/widgets/customWidgets.dart';
10-
import 'package:flutter_twitter_clone/widgets/newWidget/customUrlText.dart';
10+
import 'package:flutter_twitter_clone/widgets/url_text/customUrlText.dart';
1111
import 'package:flutter_twitter_clone/widgets/newWidget/title_text.dart';
1212
import 'package:provider/provider.dart';
1313

lib/ui/page/notification/notificationPage.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import 'package:flutter_twitter_clone/state/notificationState.dart';
1010
import 'package:flutter_twitter_clone/ui/theme/theme.dart';
1111
import 'package:flutter_twitter_clone/widgets/customAppBar.dart';
1212
import 'package:flutter_twitter_clone/widgets/customWidgets.dart';
13-
import 'package:flutter_twitter_clone/widgets/newWidget/customUrlText.dart';
13+
import 'package:flutter_twitter_clone/widgets/url_text/customUrlText.dart';
1414
import 'package:flutter_twitter_clone/widgets/newWidget/emptyList.dart';
1515
import 'package:flutter_twitter_clone/widgets/newWidget/title_text.dart';
1616
import 'package:provider/provider.dart';

lib/ui/page/profile/profilePage.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import 'package:flutter_twitter_clone/state/feedState.dart';
1313
import 'package:flutter_twitter_clone/ui/theme/theme.dart';
1414
import 'package:flutter_twitter_clone/widgets/customWidgets.dart';
1515
import 'package:flutter_twitter_clone/widgets/newWidget/customLoader.dart';
16-
import 'package:flutter_twitter_clone/widgets/newWidget/customUrlText.dart';
16+
import 'package:flutter_twitter_clone/widgets/url_text/customUrlText.dart';
1717
import 'package:flutter_twitter_clone/widgets/newWidget/emptyList.dart';
1818
import 'package:flutter_twitter_clone/widgets/newWidget/rippleButton.dart';
1919
import 'package:flutter_twitter_clone/widgets/tweet/tweet.dart';

lib/ui/page/search/SearchPage.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import 'package:flutter_twitter_clone/state/searchState.dart';
66
import 'package:flutter_twitter_clone/ui/theme/theme.dart';
77
import 'package:flutter_twitter_clone/widgets/customAppBar.dart';
88
import 'package:flutter_twitter_clone/widgets/customWidgets.dart';
9-
import 'package:flutter_twitter_clone/widgets/newWidget/customUrlText.dart';
9+
import 'package:flutter_twitter_clone/widgets/url_text/customUrlText.dart';
1010
import 'package:flutter_twitter_clone/widgets/newWidget/title_text.dart';
1111
import 'package:provider/provider.dart';
1212

lib/ui/page/settings/accountSettings/accountSettingsPage.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import 'package:flutter_twitter_clone/state/authState.dart';
77
import 'package:flutter_twitter_clone/ui/theme/theme.dart';
88
import 'package:flutter_twitter_clone/widgets/customAppBar.dart';
99
import 'package:flutter_twitter_clone/widgets/customWidgets.dart';
10-
import 'package:flutter_twitter_clone/widgets/newWidget/customUrlText.dart';
10+
import 'package:flutter_twitter_clone/widgets/url_text/customUrlText.dart';
1111
import 'package:provider/provider.dart';
1212

1313
class AccountSettingsPage extends StatelessWidget {

lib/ui/page/settings/accountSettings/contentPrefrences/contentPreference.dart

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@ import 'package:flutter_twitter_clone/ui/page/settings/widgets/settingsAppbar.da
55
import 'package:flutter_twitter_clone/ui/page/settings/widgets/settingsRowWidget.dart';
66
import 'package:flutter_twitter_clone/state/authState.dart';
77
import 'package:flutter_twitter_clone/ui/theme/theme.dart';
8-
import 'package:flutter_twitter_clone/widgets/customAppBar.dart';
9-
import 'package:flutter_twitter_clone/widgets/customWidgets.dart';
10-
import 'package:flutter_twitter_clone/widgets/newWidget/customUrlText.dart';
118
import 'package:provider/provider.dart';
129

1310
class ContentPrefrencePage extends StatelessWidget {

lib/ui/page/settings/settingsAndPrivacyPage.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import 'package:flutter_twitter_clone/state/authState.dart';
55
import 'package:flutter_twitter_clone/ui/theme/theme.dart';
66
import 'package:flutter_twitter_clone/widgets/customAppBar.dart';
77
import 'package:flutter_twitter_clone/widgets/customWidgets.dart';
8-
import 'package:flutter_twitter_clone/widgets/newWidget/customUrlText.dart';
8+
import 'package:flutter_twitter_clone/widgets/url_text/customUrlText.dart';
99
import 'package:provider/provider.dart';
1010
import 'widgets/settingsRowWidget.dart';
1111

lib/ui/page/settings/widgets/headerWidget.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_twitter_clone/ui/theme/theme.dart';
3-
import 'package:flutter_twitter_clone/widgets/newWidget/customUrlText.dart';
3+
import 'package:flutter_twitter_clone/widgets/url_text/customUrlText.dart';
44

55
class HeaderWidget extends StatelessWidget {
66
final String title;

lib/ui/page/settings/widgets/settingsRowWidget.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_twitter_clone/ui/theme/theme.dart';
33
import 'package:flutter_twitter_clone/widgets/newWidget/customCheckBox.dart';
4-
import 'package:flutter_twitter_clone/widgets/newWidget/customUrlText.dart';
4+
import 'package:flutter_twitter_clone/widgets/url_text/customUrlText.dart';
55
import 'package:provider/provider.dart';
66

77
class SettingRowWidget extends StatelessWidget {

lib/widgets/tweet/tweet.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import 'package:flutter_twitter_clone/helper/utility.dart';
66
import 'package:flutter_twitter_clone/model/feedModel.dart';
77
import 'package:flutter_twitter_clone/state/feedState.dart';
88
import 'package:flutter_twitter_clone/ui/theme/theme.dart';
9-
import 'package:flutter_twitter_clone/widgets/newWidget/customUrlText.dart';
9+
import 'package:flutter_twitter_clone/widgets/url_text/customUrlText.dart';
1010
import 'package:flutter_twitter_clone/widgets/newWidget/title_text.dart';
1111
import 'package:flutter_twitter_clone/widgets/tweet/widgets/parentTweet.dart';
1212
import 'package:flutter_twitter_clone/widgets/tweet/widgets/tweetIconsRow.dart';

lib/widgets/tweet/widgets/retweetWidget.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import 'package:flutter_twitter_clone/model/feedModel.dart';
66
import 'package:flutter_twitter_clone/state/feedState.dart';
77
import 'package:flutter_twitter_clone/ui/theme/theme.dart';
88
import 'package:flutter_twitter_clone/widgets/customWidgets.dart';
9-
import 'package:flutter_twitter_clone/widgets/newWidget/customUrlText.dart';
9+
import 'package:flutter_twitter_clone/widgets/url_text/customUrlText.dart';
1010
import 'package:flutter_twitter_clone/widgets/newWidget/rippleButton.dart';
1111
import 'package:flutter_twitter_clone/widgets/newWidget/title_text.dart';
1212
import 'package:flutter_twitter_clone/widgets/tweet/widgets/tweetImage.dart';

lib/widgets/newWidget/customUrlText.dart renamed to lib/widgets/url_text/customUrlText.dart

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:flutter/gestures.dart';
22
import 'package:flutter/material.dart';
33
import 'package:flutter_twitter_clone/helper/utility.dart';
4+
import 'package:flutter_twitter_clone/widgets/url_text/custom_link_media_info.dart';
45

56
class UrlText extends StatelessWidget {
67
final String text;
@@ -57,8 +58,16 @@ class UrlText extends StatelessWidget {
5758

5859
@override
5960
Widget build(BuildContext context) {
60-
return RichText(
61-
text: TextSpan(children: getTextSpans()),
61+
return Column(
62+
children: [
63+
RichText(
64+
text: TextSpan(children: getTextSpans()),
65+
),
66+
Padding(
67+
padding: const EdgeInsets.symmetric(horizontal: 0),
68+
child: CustomLinkMediaInfo(text: text),
69+
)
70+
],
6271
);
6372
}
6473
}

0 commit comments

Comments
 (0)