Skip to content

Commit

Permalink
refactor(github_search): migrate to null-safety (#2149)
Browse files Browse the repository at this point in the history
  • Loading branch information
Abhishek01039 authored and felangel committed Mar 4, 2021
1 parent 1290ba2 commit 13587ac
Show file tree
Hide file tree
Showing 17 changed files with 58 additions and 55 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import 'package:common_github_search/common_github_search.dart';
class GithubCache {
final _cache = <String, SearchResult>{};

SearchResult get(String term) => _cache[term];
SearchResult? get(String term) => _cache[term];

void set(String term, SearchResult result) => _cache[term] = result;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ import 'package:http/http.dart' as http;
import 'package:common_github_search/common_github_search.dart';

class GithubClient {
final String baseUrl;
final http.Client httpClient;

GithubClient({
http.Client httpClient,
http.Client? httpClient,
this.baseUrl = "https://api.github.com/search/repositories?q=",
}) : this.httpClient = httpClient ?? http.Client();

final String baseUrl;
final http.Client httpClient;

Future<SearchResult> search(String term) async {
final response = await httpClient.get(Uri.parse("$baseUrl$term"));
final results = json.decode(response.body);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,18 @@ import 'dart:async';
import 'package:common_github_search/common_github_search.dart';

class GithubRepository {
const GithubRepository(this.cache, this.client);

final GithubCache cache;
final GithubClient client;

GithubRepository(this.cache, this.client);

Future<SearchResult> search(String term) async {
if (cache.contains(term)) {
return cache.get(term);
} else {
final result = await client.search(term);
cache.set(term, result);
return result;
final cachedResult = cache.get(term);
if (cachedResult != null) {
return cachedResult;
}
final result = await client.search(term);
cache.set(term, result);
return result;
}
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
import 'dart:async';

import 'package:meta/meta.dart';
import 'package:rxdart/rxdart.dart';
import 'package:bloc/bloc.dart';

import 'package:common_github_search/common_github_search.dart';

class GithubSearchBloc extends Bloc<GithubSearchEvent, GithubSearchState> {
final GithubRepository githubRepository;

GithubSearchBloc({@required this.githubRepository})
GithubSearchBloc({required this.githubRepository})
: super(SearchStateEmpty());

final GithubRepository githubRepository;

@override
Stream<Transition<GithubSearchEvent, GithubSearchState>> transformEvents(
Stream<GithubSearchEvent> events,
Expand All @@ -28,13 +26,12 @@ class GithubSearchBloc extends Bloc<GithubSearchEvent, GithubSearchState> {
@override
Stream<GithubSearchState> mapEventToState(GithubSearchEvent event) async* {
if (event is TextChanged) {
final String searchTerm = event.text;
final searchTerm = event.text;
if (searchTerm.isEmpty) {
yield SearchStateEmpty();
} else {
yield SearchStateLoading();
try {
await Future<void>.delayed(Duration(seconds: 2));
final results = await githubRepository.search(searchTerm);
yield SearchStateSuccess(results.items);
} catch (error) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ abstract class GithubSearchEvent extends Equatable {
}

class TextChanged extends GithubSearchEvent {
final String text;
const TextChanged({required this.text});

const TextChanged({this.text});
final String text;

@override
List<Object> get props => [text];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ class SearchStateEmpty extends GithubSearchState {}
class SearchStateLoading extends GithubSearchState {}

class SearchStateSuccess extends GithubSearchState {
final List<SearchResultItem> items;

const SearchStateSuccess(this.items);

final List<SearchResultItem> items;

@override
List<Object> get props => [items];

Expand All @@ -26,10 +26,10 @@ class SearchStateSuccess extends GithubSearchState {
}

class SearchStateError extends GithubSearchState {
final String error;

const SearchStateError(this.error);

final String error;

@override
List<Object> get props => [error];
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
class GithubUser {
const GithubUser({required this.login, required this.avatarUrl});

final String login;
final String avatarUrl;

const GithubUser({this.login, this.avatarUrl});

static GithubUser fromJson(dynamic json) {
return GithubUser(
login: json['login'] as String,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import 'package:common_github_search/common_github_search.dart';

class SearchResult {
final List<SearchResultItem> items;
const SearchResult({required this.items});

const SearchResult({this.items});
final List<SearchResultItem> items;

static SearchResult fromJson(Map<String, dynamic> json) {
final items = (json['items'] as List<dynamic>)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
class SearchResultError {
final String message;
const SearchResultError({required this.message});

const SearchResultError({this.message});
final String message;

static SearchResultError fromJson(dynamic json) {
return SearchResultError(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
import 'package:common_github_search/common_github_search.dart';

class SearchResultItem {
const SearchResultItem({
required this.fullName,
required this.htmlUrl,
required this.owner,
});

final String fullName;
final String htmlUrl;
final GithubUser owner;

const SearchResultItem({this.fullName, this.htmlUrl, this.owner});

static SearchResultItem fromJson(dynamic json) {
return SearchResultItem(
fullName: json['full_name'] as String,
Expand Down
9 changes: 4 additions & 5 deletions examples/github_search/common_github_search/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,11 @@ version: 1.0.0+1
publish_to: none

environment:
sdk: ">=2.6.0 <3.0.0"
sdk: ">=2.12.0-0 <3.0.0"

dependencies:
meta: ^1.1.8
bloc:
path: ../../../packages/bloc
equatable: ^1.2.5
http: ^0.12.0
rxdart: ^0.24.0
equatable: ^2.0.0-nullsafety.3
http: ^0.13.0
rxdart: ^0.26.0-nullsafety.1
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig"
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 4 additions & 6 deletions examples/github_search/flutter_github_search/lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import 'package:flutter/material.dart';

import 'package:meta/meta.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:common_github_search/common_github_search.dart';
import 'package:flutter_github_search/search_form.dart';
Expand All @@ -15,13 +13,13 @@ void main() {
}

class App extends StatelessWidget {
final GithubRepository githubRepository;

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

final GithubRepository githubRepository;

@override
Widget build(BuildContext context) {
return MaterialApp(
Expand Down
17 changes: 10 additions & 7 deletions examples/github_search/flutter_github_search/lib/search_form.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ class SearchForm extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[_SearchBar(), _SearchBody()],
children: <Widget>[
_SearchBar(),
_SearchBody(),
],
);
}
}
Expand All @@ -20,12 +23,12 @@ class _SearchBar extends StatefulWidget {

class _SearchBarState extends State<_SearchBar> {
final _textController = TextEditingController();
GithubSearchBloc _githubSearchBloc;
late GithubSearchBloc _githubSearchBloc;

@override
void initState() {
super.initState();
_githubSearchBloc = BlocProvider.of<GithubSearchBloc>(context);
_githubSearchBloc = context.read<GithubSearchBloc>();
}

@override
Expand Down Expand Up @@ -85,9 +88,9 @@ class _SearchBody extends StatelessWidget {
}

class _SearchResults extends StatelessWidget {
final List<SearchResultItem> items;
const _SearchResults({Key? key, required this.items}) : super(key: key);

const _SearchResults({Key key, this.items}) : super(key: key);
final List<SearchResultItem> items;

@override
Widget build(BuildContext context) {
Expand All @@ -101,9 +104,9 @@ class _SearchResults extends StatelessWidget {
}

class _SearchResultItem extends StatelessWidget {
final SearchResultItem item;
const _SearchResultItem({Key? key, required this.item}) : super(key: key);

const _SearchResultItem({Key key, @required this.item}) : super(key: key);
final SearchResultItem item;

@override
Widget build(BuildContext context) {
Expand Down
4 changes: 2 additions & 2 deletions examples/github_search/flutter_github_search/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ version: 1.0.0+1
publish_to: none

environment:
sdk: ">=2.6.0 <3.0.0"
sdk: ">=2.12.0-0 <3.0.0"

dependencies:
flutter:
Expand All @@ -13,7 +13,7 @@ dependencies:
path: ../../../packages/bloc
flutter_bloc:
path: ../../../packages/flutter_bloc
url_launcher: ^5.4.1
url_launcher: ^6.0.0-nullsafety.6
common_github_search:
path: ../common_github_search

Expand Down

0 comments on commit 13587ac

Please sign in to comment.