Skip to content

Update code to support null safety #55

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

Open
wants to merge 13 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .flutter-plugins-dependencies
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"_info":"// This is a generated file; do not edit or check into version control.","dependencyGraph":[{"name":"shared_preferences","dependencies":["shared_preferences_macos","shared_preferences_web"]},{"name":"shared_preferences_macos","dependencies":[]},{"name":"shared_preferences_web","dependencies":[]}]}
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"shared_preferences_foundation","path":"C:\\\\Users\\\\ElTow\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\shared_preferences_foundation-2.3.4\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[]}],"android":[{"name":"shared_preferences_android","path":"C:\\\\Users\\\\ElTow\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\shared_preferences_android-2.2.1\\\\","native_build":true,"dependencies":[]}],"macos":[{"name":"shared_preferences_foundation","path":"C:\\\\Users\\\\ElTow\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\shared_preferences_foundation-2.3.4\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[]}],"linux":[{"name":"path_provider_linux","path":"C:\\\\Users\\\\ElTow\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_linux-2.2.1\\\\","native_build":false,"dependencies":[]},{"name":"shared_preferences_linux","path":"C:\\\\Users\\\\ElTow\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\shared_preferences_linux-2.3.1\\\\","native_build":false,"dependencies":["path_provider_linux"]}],"windows":[{"name":"path_provider_windows","path":"C:\\\\Users\\\\ElTow\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_windows-2.2.1\\\\","native_build":false,"dependencies":[]},{"name":"shared_preferences_windows","path":"C:\\\\Users\\\\ElTow\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\shared_preferences_windows-2.3.1\\\\","native_build":false,"dependencies":["path_provider_windows"]}],"web":[{"name":"shared_preferences_web","path":"C:\\\\Users\\\\ElTow\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\shared_preferences_web-2.2.1\\\\","dependencies":[]}]},"dependencyGraph":[{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_android","shared_preferences_foundation","shared_preferences_linux","shared_preferences_web","shared_preferences_windows"]},{"name":"shared_preferences_android","dependencies":[]},{"name":"shared_preferences_foundation","dependencies":[]},{"name":"shared_preferences_linux","dependencies":["path_provider_linux"]},{"name":"shared_preferences_web","dependencies":[]},{"name":"shared_preferences_windows","dependencies":["path_provider_windows"]}],"date_created":"2023-10-07 17:12:25.509079","version":"3.10.6"}
21 changes: 5 additions & 16 deletions android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,33 +1,22 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.resocoder.clean_architecture_tdd_course">
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.resocoder.clean_architecture_tdd_course">

<!-- io.flutter.app.FlutterApplication is an android.app.Application that
calls FlutterMain.startInitialization(this); in its onCreate method.
In most cases you can leave this as-is, but you if you want to provide
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
<application
android:name="io.flutter.app.FlutterApplication"
android:label="clean_architecture_tdd_course"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<application android:name="${applicationName}" android:label="clean_architecture_tdd_course" android:icon="@mipmap/ic_launcher">
<activity android:name=".MainActivity" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize">
<!-- This keeps the window background of the activity showing
until Flutter renders its first frame. It can be removed if
there is no splash screen (such as the default splash screen
defined in @style/LaunchTheme). -->
<meta-data
android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
android:value="true" />
<meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme"/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<meta-data android:name="flutterEmbedding" android:value="2" />
</application>
</manifest>
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
package com.resocoder.clean_architecture_tdd_course

import android.os.Bundle

import io.flutter.app.FlutterActivity
import io.flutter.plugins.GeneratedPluginRegistrant
import io.flutter.embedding.android.FlutterActivity

class MainActivity: FlutterActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
GeneratedPluginRegistrant.registerWith(this)
}
}
13 changes: 8 additions & 5 deletions ios/Flutter/flutter_export_environment.sh
100755 → 100644
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
#!/bin/sh
# This is a generated file; do not edit or check into version control.
export "FLUTTER_ROOT=C:\Flutter\flutter"
export "FLUTTER_APPLICATION_PATH=D:\Projects\Playground_and_Learning\flutter-tdd-clean-architecture-course"
export "FLUTTER_ROOT=C:\dev\src\flutter"
export "FLUTTER_APPLICATION_PATH=D:\Project\repos\flutter-tdd-clean-architecture-course"
export "COCOAPODS_PARALLEL_CODE_SIGN=true"
export "FLUTTER_TARGET=lib\main.dart"
export "FLUTTER_BUILD_DIR=build"
export "SYMROOT=${SOURCE_ROOT}/../build\ios"
export "FLUTTER_FRAMEWORK_DIR=C:\Flutter\flutter\bin\cache\artifacts\engine\ios"
export "FLUTTER_BUILD_NAME=1.0.0"
export "FLUTTER_BUILD_NUMBER=1"
export "FLUTTER_BUILD_NUMBER=2"
export "DART_OBFUSCATION=false"
export "TRACK_WIDGET_CREATION=true"
export "TREE_SHAKE_ICONS=false"
export "PACKAGE_CONFIG=.dart_tool/package_config.json"
5 changes: 3 additions & 2 deletions lib/core/network/network_info.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import 'package:data_connection_checker/data_connection_checker.dart';
import 'package:internet_connection_checker/internet_connection_checker.dart';


abstract class NetworkInfo {
Future<bool> get isConnected;
}

class NetworkInfoImpl implements NetworkInfo {
final DataConnectionChecker connectionChecker;
final InternetConnectionChecker connectionChecker;

NetworkInfoImpl(this.connectionChecker);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import 'dart:convert';

import 'package:clean_architecture_tdd_course/core/error/exceptions.dart';
import 'package:meta/meta.dart';
import 'package:shared_preferences/shared_preferences.dart';

import '../models/number_trivia_model.dart';
Expand All @@ -21,7 +20,7 @@ const CACHED_NUMBER_TRIVIA = 'CACHED_NUMBER_TRIVIA';
class NumberTriviaLocalDataSourceImpl implements NumberTriviaLocalDataSource {
final SharedPreferences sharedPreferences;

NumberTriviaLocalDataSourceImpl({@required this.sharedPreferences});
NumberTriviaLocalDataSourceImpl({required this.sharedPreferences});

@override
Future<NumberTriviaModel> getLastNumberTrivia() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import 'dart:convert';

import 'package:http/http.dart' as http;
import 'package:meta/meta.dart';

import '../../../../core/error/exceptions.dart';
import '../models/number_trivia_model.dart';
Expand All @@ -21,7 +19,7 @@ abstract class NumberTriviaRemoteDataSource {
class NumberTriviaRemoteDataSourceImpl implements NumberTriviaRemoteDataSource {
final http.Client client;

NumberTriviaRemoteDataSourceImpl({@required this.client});
NumberTriviaRemoteDataSourceImpl({required this.client});

@override
Future<NumberTriviaModel> getConcreteNumberTrivia(int number) =>
Expand All @@ -33,7 +31,7 @@ class NumberTriviaRemoteDataSourceImpl implements NumberTriviaRemoteDataSource {

Future<NumberTriviaModel> _getTriviaFromUrl(String url) async {
final response = await client.get(
url,
Uri.parse(url),
headers: {
'Content-Type': 'application/json',
},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import 'package:clean_architecture_tdd_course/features/number_trivia/domain/entities/number_trivia.dart';
import 'package:meta/meta.dart';

class NumberTriviaModel extends NumberTrivia {
NumberTriviaModel({
@required String text,
@required int number,
required String text,
required int number,
}) : super(text: text, number: number);

factory NumberTriviaModel.fromJson(Map<String, dynamic> json) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:clean_architecture_tdd_course/features/number_trivia/data/models/number_trivia_model.dart';
import 'package:dartz/dartz.dart';
import 'package:meta/meta.dart';

import '../../../../core/error/failures.dart';
import '../../../../core/error/exceptions.dart';
Expand All @@ -17,9 +17,9 @@ class NumberTriviaRepositoryImpl implements NumberTriviaRepository {
final NetworkInfo networkInfo;

NumberTriviaRepositoryImpl({
@required this.remoteDataSource,
@required this.localDataSource,
@required this.networkInfo,
required this.remoteDataSource,
required this.localDataSource,
required this.networkInfo,
});

@override
Expand All @@ -44,7 +44,7 @@ class NumberTriviaRepositoryImpl implements NumberTriviaRepository {
if (await networkInfo.isConnected) {
try {
final remoteTrivia = await getConcreteOrRandom();
localDataSource.cacheNumberTrivia(remoteTrivia);
localDataSource.cacheNumberTrivia(remoteTrivia as NumberTriviaModel);
return Right(remoteTrivia);
} on ServerException {
return Left(ServerFailure());
Expand Down
5 changes: 2 additions & 3 deletions lib/features/number_trivia/domain/entities/number_trivia.dart
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
import 'package:equatable/equatable.dart';
import 'package:meta/meta.dart';

class NumberTrivia extends Equatable {
final String text;
final int number;

NumberTrivia({
@required this.text,
@required this.number,
required this.text,
required this.number,
});

@override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import 'package:dartz/dartz.dart';
import 'package:equatable/equatable.dart';
import 'package:meta/meta.dart';

import '../../../../core/error/failures.dart';
import '../../../../core/usecases/usecase.dart';
Expand All @@ -21,7 +20,7 @@ class GetConcreteNumberTrivia implements UseCase<NumberTrivia, Params> {
class Params extends Equatable {
final int number;

Params({@required this.number});
Params({required this.number});

@override
List<Object> get props => [number];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import 'package:clean_architecture_tdd_course/core/error/failures.dart';
import 'package:clean_architecture_tdd_course/core/usecases/usecase.dart';
import 'package:clean_architecture_tdd_course/features/number_trivia/domain/entities/number_trivia.dart';
import 'package:dartz/dartz.dart';
import 'package:meta/meta.dart';

import './bloc.dart';
import '../../../../core/util/input_converter.dart';
Expand All @@ -23,19 +22,15 @@ class NumberTriviaBloc extends Bloc<NumberTriviaEvent, NumberTriviaState> {
final InputConverter inputConverter;

NumberTriviaBloc({
@required GetConcreteNumberTrivia concrete,
@required GetRandomNumberTrivia random,
@required this.inputConverter,
}) : assert(concrete != null),
assert(random != null),
assert(inputConverter != null),
getConcreteNumberTrivia = concrete,
getRandomNumberTrivia = random;
required this.getConcreteNumberTrivia,
required this.getRandomNumberTrivia,
required this.inputConverter,
}) : super(Empty());

@override
NumberTriviaState get initialState => Empty();
// @override
// NumberTriviaState get initialState => Empty();

@override
// @override
Stream<NumberTriviaState> mapEventToState(
NumberTriviaEvent event,
) async* {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import 'package:equatable/equatable.dart';
import 'package:meta/meta.dart';

@immutable
abstract class NumberTriviaEvent extends Equatable {
@override
List<Object> get props => [];
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
import 'package:clean_architecture_tdd_course/features/number_trivia/domain/entities/number_trivia.dart';
import 'package:equatable/equatable.dart';
import 'package:meta/meta.dart';

@immutable
abstract class NumberTriviaState extends Equatable {
@override
List<Object> get props => [];
Expand All @@ -15,7 +13,7 @@ class Loading extends NumberTriviaState {}
class Loaded extends NumberTriviaState {
final NumberTrivia trivia;

Loaded({@required this.trivia});
Loaded({required this.trivia});

@override
List<Object> get props => [trivia];
Expand All @@ -24,7 +22,7 @@ class Loaded extends NumberTriviaState {
class Error extends NumberTriviaState {
final String message;

Error({@required this.message});
Error({required this.message});

@override
List<Object> get props => [message];
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:clean_architecture_tdd_course/features/number_trivia/presentation/bloc/bloc.dart';
import 'package:clean_architecture_tdd_course/features/number_trivia/presentation/bloc/number_trivia_bloc.dart';

import 'package:clean_architecture_tdd_course/features/number_trivia/presentation/widgets/widgets.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
Expand Down Expand Up @@ -44,6 +44,10 @@ class NumberTriviaPage extends StatelessWidget {
message: state.message,
);
}
return SizedBox(
height: MediaQuery.of(context).size.height / 3,
child: const Placeholder(),
);
},
),
SizedBox(height: 20),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import 'package:flutter/material.dart';

class LoadingWidget extends StatelessWidget {
const LoadingWidget({
Key key,
Key? key,
}) : super(key: key);

@override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ class MessageDisplay extends StatelessWidget {
final String message;

const MessageDisplay({
Key key,
@required this.message,
Key? key,
required this.message,
}) : super(key: key);

@override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';

class TriviaControls extends StatefulWidget {
const TriviaControls({
Key key,
Key? key,
}) : super(key: key);

@override
Expand All @@ -13,7 +13,7 @@ class TriviaControls extends StatefulWidget {

class _TriviaControlsState extends State<TriviaControls> {
final controller = TextEditingController();
String inputStr;
late String inputStr;

@override
Widget build(BuildContext context) {
Expand All @@ -37,16 +37,14 @@ class _TriviaControlsState extends State<TriviaControls> {
Row(
children: <Widget>[
Expanded(
child: RaisedButton(
child: ElevatedButton(
child: Text('Search'),
color: Theme.of(context).accentColor,
textTheme: ButtonTextTheme.primary,
onPressed: dispatchConcrete,
),
),
SizedBox(width: 10),
Expanded(
child: RaisedButton(
child: ElevatedButton(
child: Text('Get random trivia'),
onPressed: dispatchRandom,
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ class TriviaDisplay extends StatelessWidget {
final NumberTrivia numberTrivia;

const TriviaDisplay({
Key key,
@required this.numberTrivia,
Key? key,
required this.numberTrivia,
}) : super(key: key);

@override
Expand Down
11 changes: 7 additions & 4 deletions lib/injection_container.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'package:data_connection_checker/data_connection_checker.dart';
import 'package:internet_connection_checker/internet_connection_checker.dart';

import 'package:get_it/get_it.dart';
import 'package:http/http.dart' as http;
import 'package:shared_preferences/shared_preferences.dart';
Expand All @@ -20,9 +21,9 @@ Future<void> init() async {
// Bloc
sl.registerFactory(
() => NumberTriviaBloc(
concrete: sl(),
getConcreteNumberTrivia: sl(),
inputConverter: sl(),
random: sl(),
getRandomNumberTrivia: sl(),
),
);

Expand Down Expand Up @@ -54,7 +55,9 @@ Future<void> init() async {

//! External
final sharedPreferences = await SharedPreferences.getInstance();
final internetConnectionChecker = InternetConnectionChecker();

sl.registerLazySingleton(() => sharedPreferences);
sl.registerLazySingleton(() => http.Client());
sl.registerLazySingleton(() => DataConnectionChecker());
sl.registerLazySingleton(() => internetConnectionChecker);
}
Loading