Skip to content

Commit

Permalink
* Added proxy configuration for debugging.
Browse files Browse the repository at this point in the history
* Improved pull to refresh.
* Added error handling.
  • Loading branch information
micer committed Jan 8, 2021
1 parent 4a08180 commit 6f53043
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 24 deletions.
2 changes: 1 addition & 1 deletion android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ android {

buildTypes {
debug {

applicationIdSuffix ".debug"
}
release {
// TODO: Add your own signing config for the release build.
Expand Down
2 changes: 2 additions & 0 deletions android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.gibraltar_flights">

<uses-permission android:name="android.permission.INTERNET"/>
<application
android:label="gibraltar_flights"
android:icon="@mipmap/ic_launcher">
Expand Down
21 changes: 15 additions & 6 deletions lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';

import 'page/flights_page.dart';
import 'util/colors.dart';
import 'util/proxy_for_debug.dart';

void main() {
HttpOverrides.global = MyProxyHttpOverride();
runApp(MyApp());
}

Expand All @@ -21,12 +26,16 @@ class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
final title = 'Gibraltar Flights';

return MaterialApp(
title: title,
theme: ThemeData(
primarySwatch: generateMaterialColor(Palette.primary),
fontFamily: 'Georgia'),
home: FlightsPage(title: title),
return RefreshConfiguration(
headerBuilder: () => WaterDropMaterialHeader(),

child: MaterialApp(
title: title,
theme: ThemeData(
primarySwatch: generateMaterialColor(Palette.primary),
fontFamily: 'Georgia'),
home: FlightsPage(title: title),
),
);
}
}
64 changes: 47 additions & 17 deletions lib/page/flights_page.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:gibraltar_flights/main.dart';
import 'package:gibraltar_flights/model/flight.dart';
import 'package:gibraltar_flights/model/flights.dart';
import 'package:gibraltar_flights/util/extensions.dart';
import 'package:gibraltar_flights/util/scrappy.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';

class FlightsPage extends StatefulWidget {
const FlightsPage({Key key, @required this.title}) : super(key: key);
Expand All @@ -15,12 +17,14 @@ class FlightsPage extends StatefulWidget {
}

class _FlightsPageState extends State<FlightsPage> {
Future<Flights> futureFlights;
Flights flights;
RefreshController _refreshController =
RefreshController(initialRefresh: true);

@override
void initState() {
super.initState();
futureFlights = Scrapper.scrapeData();
flights = Flights(items: []);
}

@override
Expand All @@ -30,19 +34,18 @@ class _FlightsPageState extends State<FlightsPage> {
title: Text(widget.title),
),
body: Center(
child: FutureBuilder(
future: futureFlights,
builder: (context, snapshot) {
return RefreshIndicator(
child: _listView(snapshot),
onRefresh: _pullRefresh,
);
})));
child: SmartRefresher(
enablePullDown: true,
enablePullUp: false,
controller: _refreshController,
onRefresh: () => _onRefresh(context),
child: _listView(),
)));
}

Widget _listView(AsyncSnapshot snapshot) {
if (snapshot.hasData) {
List<ListItem> _items = processData(snapshot.data.items);
Widget _listView() {
if (flights.items.isNotEmpty) {
List<ListItem> _items = processData(flights.items);
return ListView.builder(
itemCount: _items.length,
itemBuilder: (context, index) {
Expand All @@ -59,15 +62,37 @@ class _FlightsPageState extends State<FlightsPage> {
},
);
} else {
return const CircularProgressIndicator();
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("There are no flights in the list."),
Container(
margin: EdgeInsetsDirectional.only(top: 16),
child: TextButton(
onPressed: () => _refreshController.requestRefresh(),
child: Text("refresh".toUpperCase()),
style: TextButton.styleFrom(
primary: Colors.white,
backgroundColor: Theme.of(context).accentColor,
onSurface: Colors.grey,
)),
)
],
);
}
}

Future<void> _pullRefresh() async {
Future<Flights> freshFutureFlights = Scrapper.scrapeData();
Future<void> _onRefresh(BuildContext context) async {
Future<Flights> _freshFutureFlights = Scrapper.scrapeData();
_freshFutureFlights.catchError((e) {
_refreshController.refreshFailed();
_showError(context, "Couldn't load data, please try again.");
});
Flights _freshFlights = await _freshFutureFlights;
setState(() {
futureFlights = Future.value(freshFutureFlights);
flights = _freshFlights;
});
_refreshController.refreshCompleted();
}

List<ListItem> processData(List<Flight> flightList) {
Expand All @@ -86,6 +111,11 @@ class _FlightsPageState extends State<FlightsPage> {
});
return result;
}

void _showError(BuildContext context, String message) {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text(message), backgroundColor: Theme.of(context).errorColor));
}
}

abstract class ListItem {
Expand Down
13 changes: 13 additions & 0 deletions lib/util/proxy_for_debug.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import 'dart:io';

class MyProxyHttpOverride extends HttpOverrides {
@override
HttpClient createHttpClient(SecurityContext context) {
return super.createHttpClient(context)
..findProxy = (uri) {
return "PROXY 192.168.18.100:8888;";
}
..badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
}
}
1 change: 1 addition & 0 deletions pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ dependencies:
html: ^0.14.0+3
jiffy: ^3.0.1
path_provider: ^1.6.24
pull_to_refresh: ^1.6.3
scrapy: ^0.0.3

dev_dependencies:
Expand Down

0 comments on commit 6f53043

Please sign in to comment.