Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Null safety #211

Merged
merged 10 commits into from Dec 14, 2021
4 changes: 2 additions & 2 deletions android/build.gradle
Expand Up @@ -5,8 +5,8 @@ buildscript {
}

dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
classpath 'com.google.gms:google-services:4.3.4'
classpath 'com.android.tools.build:gradle:4.2.0'
classpath 'com.google.gms:google-services:4.3.10'
}
}

Expand Down
2 changes: 1 addition & 1 deletion android/gradle/wrapper/gradle-wrapper.properties
Expand Up @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip
6 changes: 3 additions & 3 deletions lib/helper/customRoute.dart
Expand Up @@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
import 'routes.dart';

class CustomRoute<T> extends MaterialPageRoute<T> {
CustomRoute({WidgetBuilder builder, RouteSettings settings})
CustomRoute({required WidgetBuilder builder, RouteSettings? settings})
: super(builder: builder, settings: settings);

@override
Expand All @@ -21,7 +21,7 @@ class CustomRoute<T> extends MaterialPageRoute<T> {
}

class SlideLeftRoute<T> extends MaterialPageRoute<T> {
SlideLeftRoute({WidgetBuilder builder, RouteSettings settings})
SlideLeftRoute({required WidgetBuilder builder, RouteSettings? settings})
: super(builder: builder, settings: settings);
@override
Widget buildTransitions(BuildContext context, Animation<double> animation,
Expand All @@ -31,7 +31,7 @@ class SlideLeftRoute<T> extends MaterialPageRoute<T> {
return child;
}
return SlideTransition(
position: new Tween<Offset>(
position: Tween<Offset>(
begin: const Offset(1.0, 0.0),
end: Offset.zero,
).animate(
Expand Down
77 changes: 40 additions & 37 deletions lib/helper/routes.dart
@@ -1,9 +1,12 @@
// ignore_for_file: prefer_const_constructors

import 'package:flutter/material.dart';
import 'package:flutter_twitter_clone/ui/page/Auth/selectAuthMethod.dart';
import 'package:flutter_twitter_clone/ui/page/Auth/verifyEmail.dart';
import 'package:flutter_twitter_clone/ui/page/common/splash.dart';
import 'package:flutter_twitter_clone/ui/page/feed/composeTweet/composeTweet.dart';
import 'package:flutter_twitter_clone/ui/page/feed/composeTweet/state/composeTweetState.dart';
import 'package:flutter_twitter_clone/ui/page/homePage.dart';
import 'package:flutter_twitter_clone/ui/page/message/conversationInformation/conversationInformation.dart';
import 'package:flutter_twitter_clone/ui/page/message/newMessagePage.dart';
import 'package:flutter_twitter_clone/ui/page/profile/follow/followerListPage.dart';
Expand All @@ -30,25 +33,24 @@ import '../ui/page/Auth/signup.dart';
import '../ui/page/feed/feedPostDetail.dart';
import '../ui/page/feed/imageViewPage.dart';
import '../ui/page/message/chatScreenPage.dart';
import '../ui/page/profile/EditProfilePage.dart';
import '../ui/page/profile/profilePage.dart';
import '../widgets/customWidgets.dart';

class Routes {
static dynamic route() {
return {
'SplashPage': (BuildContext context) => SplashPage(),
'SplashPage': (BuildContext context) => const SplashPage(),
};
}

static void sendNavigationEventToFirebase(String path) {
static void sendNavigationEventToFirebase(String? path) {
if (path != null && path.isNotEmpty) {
// analytics.setCurrentScreen(screenName: path);
}
}

static Route onGenerateRoute(RouteSettings settings) {
final List<String> pathElements = settings.name.split('/');
static Route? onGenerateRoute(RouteSettings settings) {
final List<String> pathElements = settings.name!.split('/');
if (pathElements[0] != '' || pathElements.length == 1) {
return null;
}
Expand All @@ -75,105 +77,104 @@ class Routes {
builder: (BuildContext context) => FeedPostDetail(
postId: postId,
),
settings: RouteSettings(name: 'FeedPostDetail'));
settings: const RouteSettings(name: 'FeedPostDetail'));
case "ProfilePage":
String profileId;
if (pathElements.length > 2) {
profileId = pathElements[2];
return CustomRoute<bool>(
builder: (BuildContext context) => ProfilePage(
profileId: profileId,
));
}
return CustomRoute<bool>(
builder: (BuildContext context) => ProfilePage(
profileId: profileId,
));
return CustomRoute(builder: (BuildContext context) => const HomePage());

case "CreateFeedPage":
return CustomRoute<bool>(
builder: (BuildContext context) =>
ChangeNotifierProvider<ComposeTweetState>(
create: (_) => ComposeTweetState(),
child: ComposeTweetPage(isRetweet: false, isTweet: true),
child:
const ComposeTweetPage(isRetweet: false, isTweet: true),
));
case "WelcomePage":
return CustomRoute<bool>(
builder: (BuildContext context) => WelcomePage());
builder: (BuildContext context) => const WelcomePage());
case "SignIn":
return CustomRoute<bool>(builder: (BuildContext context) => SignIn());
case "SignUp":
return CustomRoute<bool>(builder: (BuildContext context) => Signup());
case "ForgetPasswordPage":
return CustomRoute<bool>(
builder: (BuildContext context) => ForgetPasswordPage());
builder: (BuildContext context) => const ForgetPasswordPage());
case "SearchPage":
return CustomRoute<bool>(
builder: (BuildContext context) => SearchPage());
case "ImageViewPge":
return CustomRoute<bool>(
builder: (BuildContext context) => ImageViewPge());
builder: (BuildContext context) => const ImageViewPge());
case "ChatScreenPage":
return CustomRoute<bool>(
builder: (BuildContext context) => ChatScreenPage());
builder: (BuildContext context) => const ChatScreenPage());
case "NewMessagePage":
return CustomRoute<bool>(
builder: (BuildContext context) => NewMessagePage(),
);
case "SettingsAndPrivacyPage":
return CustomRoute<bool>(
builder: (BuildContext context) => SettingsAndPrivacyPage(),
);
case "AccountSettingsPage":
return CustomRoute<bool>(
builder: (BuildContext context) => AccountSettingsPage(),
builder: (BuildContext context) => const SettingsAndPrivacyPage(),
);
case "AccountSettingsPage":
return CustomRoute<bool>(
builder: (BuildContext context) => AccountSettingsPage(),
builder: (BuildContext context) => const AccountSettingsPage(),
);
case "PrivacyAndSaftyPage":
return CustomRoute<bool>(
builder: (BuildContext context) => PrivacyAndSaftyPage(),
builder: (BuildContext context) => const PrivacyAndSaftyPage(),
);
case "NotificationPage":
return CustomRoute<bool>(
builder: (BuildContext context) => NotificationPage(),
builder: (BuildContext context) => const NotificationPage(),
);
case "ContentPrefrencePage":
return CustomRoute<bool>(
builder: (BuildContext context) => ContentPrefrencePage(),
builder: (BuildContext context) => const ContentPrefrencePage(),
);
case "DisplayAndSoundPage":
return CustomRoute<bool>(
builder: (BuildContext context) => DisplayAndSoundPage(),
builder: (BuildContext context) => const DisplayAndSoundPage(),
);
case "DirectMessagesPage":
return CustomRoute<bool>(
builder: (BuildContext context) => DirectMessagesPage(),
builder: (BuildContext context) => const DirectMessagesPage(),
);
case "TrendsPage":
return CustomRoute<bool>(
builder: (BuildContext context) => TrendsPage(),
builder: (BuildContext context) => const TrendsPage(),
);
case "DataUsagePage":
return CustomRoute<bool>(
builder: (BuildContext context) => DataUsagePage(),
builder: (BuildContext context) => const DataUsagePage(),
);
case "AccessibilityPage":
return CustomRoute<bool>(
builder: (BuildContext context) => AccessibilityPage(),
builder: (BuildContext context) => const AccessibilityPage(),
);
case "ProxyPage":
return CustomRoute<bool>(
builder: (BuildContext context) => ProxyPage(),
builder: (BuildContext context) => const ProxyPage(),
);
case "AboutPage":
return CustomRoute<bool>(
builder: (BuildContext context) => AboutPage(),
builder: (BuildContext context) => const AboutPage(),
);
case "ConversationInformation":
return CustomRoute<bool>(
builder: (BuildContext context) => ConversationInformation(),
builder: (BuildContext context) => const ConversationInformation(),
);
case "FollowingListPage":
return CustomRoute<bool>(
builder: (BuildContext context) => FollowingListPage(),
builder: (BuildContext context) => const FollowingListPage(),
);
case "FollowerListPage":
return CustomRoute<bool>(
Expand All @@ -184,19 +185,21 @@ class Routes {
builder: (BuildContext context) => VerifyEmailPage(),
);
default:
return onUnknownRoute(RouteSettings(name: '/Feature'));
return onUnknownRoute(const RouteSettings(name: '/Feature'));
}
}

static Route onUnknownRoute(RouteSettings settings) {
return MaterialPageRoute(
builder: (_) => Scaffold(
builder: (context) => Scaffold(
appBar: AppBar(
title: customTitleText(settings.name.split('/')[1]),
title: customTitleText(
settings.name!.split('/')[1],
),
centerTitle: true,
),
body: Center(
child: Text('${settings.name.split('/')[1]} Comming soon..'),
child: Text('${settings.name!.split('/')[1]} Comming soon..'),
),
),
);
Expand Down
16 changes: 8 additions & 8 deletions lib/helper/shared_prefrence_helper.dart
Expand Up @@ -12,23 +12,22 @@ class SharedPreferenceHelper {
return _singleton;
}

Future<String> getUserName() async {
Future<String?> getUserName() async {
return (await SharedPreferences.getInstance())
.getString(UserPreferenceKey.UserName.toString());
}

Future clearPreferenceValues() async {
await (SharedPreferences.getInstance())
..clear();
(await SharedPreferences.getInstance()).clear();
}

Future<void> saveUserProfile(UserModel user) async {
Future<bool> saveUserProfile(UserModel user) async {
return (await SharedPreferences.getInstance()).setString(
UserPreferenceKey.UserProfile.toString(), json.encode(user.toJson()));
}

Future<UserModel> getUserProfile() async {
final jsonString = (await SharedPreferences.getInstance())
Future<UserModel?> getUserProfile() async {
final String? jsonString = (await SharedPreferences.getInstance())
.getString(UserPreferenceKey.UserProfile.toString());
if (jsonString == null) return null;
return UserModel.fromJson(json.decode(jsonString));
Expand All @@ -39,8 +38,9 @@ class SharedPreferenceHelper {
.setString(key, json.encode(model.toJson()));
}

Future<LinkMediaInfo> getLinkMediaInfo(String key) async {
final jsonString = (await SharedPreferences.getInstance()).getString(key);
Future<LinkMediaInfo?> getLinkMediaInfo(String key) async {
final String? jsonString =
(await SharedPreferences.getInstance()).getString(key);
if (jsonString == null) {
return null;
}
Expand Down