Skip to content

Commit 8b31fb8

Browse files
author
tensor-programming
committed
refactor and add drawer
1 parent 79a2cf4 commit 8b31fb8

File tree

9 files changed

+186
-11
lines changed

9 files changed

+186
-11
lines changed

assets/images/utopian-icon.png

301 KB
Loading
File renamed without changes.

lib/blocs/information_bloc.dart

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import 'dart:async';
2+
3+
import 'package:rxdart/rxdart.dart';
4+
import 'package:package_info/package_info.dart';
5+
import 'package:connectivity/connectivity.dart';
6+
7+
class InformationBloc {
8+
final Future<PackageInfo> packageInfo;
9+
final Future<ConnectivityResult> connectivity;
10+
11+
Stream<PackageInfo> _infoStream = Stream.empty();
12+
Stream<ConnectivityResult> _connectionStream = Stream.empty();
13+
14+
Stream<PackageInfo> get infoStream => _infoStream;
15+
Stream<ConnectivityResult> get connectionInfo => _connectionStream;
16+
17+
InformationBloc(this.packageInfo, this.connectivity) {
18+
_infoStream = Observable.fromFuture(packageInfo).asBroadcastStream();
19+
_connectionStream = Observable.fromFuture(connectivity).asBroadcastStream();
20+
}
21+
}

lib/drawer.dart

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:utopian_rocks/providers/information_provider.dart';
3+
4+
import 'package:package_info/package_info.dart';
5+
// import 'package:connectivity/connectivity.dart';
6+
7+
class InformationDrawer extends StatelessWidget {
8+
@override
9+
Widget build(BuildContext context) {
10+
final informationBloc = InformationProvider.of(context);
11+
return Drawer(
12+
semanticLabel: 'Information Drawer',
13+
child: Flex(
14+
direction: Axis.vertical,
15+
children: <Widget>[
16+
_buildInfoPanel(informationBloc),
17+
Center(
18+
child: Image.asset('assets/images/utopian-icon.png'),
19+
),
20+
// _buildConnectionPanel(informationBloc),
21+
],
22+
),
23+
);
24+
}
25+
26+
Widget _buildInfoTile(String title, {String subtitle}) {
27+
return ListTile(
28+
title: Text(
29+
title,
30+
textAlign: TextAlign.start,
31+
style: TextStyle(fontSize: 18.0, fontWeight: FontWeight.bold),
32+
),
33+
subtitle: Text(
34+
subtitle ?? '',
35+
textAlign: TextAlign.start,
36+
style: TextStyle(fontSize: 12.0, fontWeight: FontWeight.w600),
37+
),
38+
);
39+
}
40+
41+
Widget _buildInfoPanel(informationBloc) {
42+
return StreamBuilder(
43+
stream: informationBloc.infoStream,
44+
builder: (context, AsyncSnapshot<PackageInfo> snapshot) {
45+
if (!snapshot.hasData) {
46+
return Flexible(
47+
child: CircularProgressIndicator(),
48+
);
49+
}
50+
return Flex(
51+
direction: Axis.vertical,
52+
children: [
53+
Container(
54+
padding: EdgeInsets.only(top: 30.0),
55+
width: MediaQuery.of(context).size.width,
56+
color: Colors.black,
57+
child: FittedBox(
58+
fit: BoxFit.scaleDown,
59+
child: Text(
60+
'Information',
61+
style: TextStyle(
62+
fontSize: 30.0,
63+
fontWeight: FontWeight.bold,
64+
color: Colors.white,
65+
),
66+
),
67+
),
68+
),
69+
_buildInfoTile(
70+
'${snapshot.data.appName}',
71+
subtitle: "Pre-release Version Number: ${snapshot.data.version}",
72+
),
73+
_buildInfoTile(
74+
'Instructions: ',
75+
subtitle: 'Double tab on a contribution to open it in a Browser',
76+
),
77+
_buildInfoTile(
78+
'Author & Application Info',
79+
subtitle:
80+
'Developed by @Tensor. Many thanks to @Amosbastian for creating the original website: utopian.rocks and to the folks over at utopian.io',
81+
)
82+
],
83+
);
84+
},
85+
);
86+
}
87+
88+
// Widget _buildConnectionPanel(informationBloc) {
89+
// return StreamBuilder(
90+
// stream: informationBloc.connectionInfo,
91+
// builder: (context, AsyncSnapshot<ConnectivityResult> snapshot) {
92+
// if (!snapshot.hasData) {
93+
// return Container();
94+
// }
95+
// if (snapshot.data == ConnectivityResult.wifi) {
96+
// return Container(
97+
// child: _buildInfoTile('Connected through Wifi'),
98+
// );
99+
// } else if (snapshot.data == ConnectivityResult.mobile) {
100+
// return Container(
101+
// child: _buildInfoTile('Connected through Mobile'),
102+
// );
103+
// } else {
104+
// return Container(
105+
// child: _buildInfoTile('Not connected to the Internet'),
106+
// );
107+
// }
108+
// },
109+
// );
110+
// }
111+
}

lib/list_page.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import 'package:flutter/material.dart';
2-
import 'package:utopian_rocks/provider.dart';
2+
import 'package:utopian_rocks/providers/contribution_provider.dart';
33
import 'package:utopian_rocks/utils.dart';
44
import 'package:timeago/timeago.dart' as timeago;
55
import 'package:url_launcher/url_launcher.dart';
@@ -63,7 +63,7 @@ class ListPage extends StatelessWidget {
6363
title: Text(
6464
'${snapshot.data[index].title}',
6565
style: TextStyle(
66-
fontSize: 14.0,
66+
fontSize: 16.0,
6767
fontWeight: FontWeight.w600,
6868
),
6969
textAlign: TextAlign.left,
@@ -72,7 +72,7 @@ class ListPage extends StatelessWidget {
7272
subtitle: Text(
7373
"$repo - $created",
7474
style: TextStyle(
75-
fontSize: 10.0,
75+
fontSize: 12.0,
7676
fontWeight: FontWeight.w600,
7777
),
7878
),

lib/main.dart

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11
import 'package:flutter/material.dart';
2+
import 'package:package_info/package_info.dart';
3+
import 'package:connectivity/connectivity.dart';
4+
25
import 'package:utopian_rocks/list_page.dart';
36
import 'package:utopian_rocks/repository.dart';
47

5-
import 'package:utopian_rocks/provider.dart';
6-
import 'package:utopian_rocks/bloc.dart';
8+
import 'package:utopian_rocks/providers/contribution_provider.dart';
9+
import 'package:utopian_rocks/blocs/contribution_bloc.dart';
10+
import 'package:utopian_rocks/blocs/information_bloc.dart';
11+
import 'package:utopian_rocks/providers/information_provider.dart';
12+
13+
import 'package:utopian_rocks/drawer.dart';
714

815
void main() => runApp(MyApp());
916

@@ -68,10 +75,11 @@ class MyApp extends StatelessWidget {
6875
ListPage('pending'),
6976
],
7077
),
71-
// Todo: Add information Drawer.
72-
// endDrawer: Drawer(
73-
// semanticLabel: 'Information',
74-
// ),
78+
endDrawer: InformationProvider(
79+
informationBloc: InformationBloc(PackageInfo.fromPlatform(),
80+
Connectivity().checkConnectivity()),
81+
child: InformationDrawer(),
82+
),
7583
),
7684
),
7785
),

lib/provider.dart renamed to lib/providers/contribution_provider.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import 'package:utopian_rocks/repository.dart';
22

33
import 'package:flutter/widgets.dart';
44

5-
import 'package:utopian_rocks/bloc.dart';
5+
import 'package:utopian_rocks/blocs/contribution_bloc.dart';
66

77
// Provider provides bloc to the widget tree where we need it by using the [InheritedWidget] class.
88
class ContributionProvider extends InheritedWidget {
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import 'package:flutter/widgets.dart';
2+
import 'package:package_info/package_info.dart';
3+
import 'package:connectivity/connectivity.dart';
4+
5+
import 'package:utopian_rocks/blocs/information_bloc.dart';
6+
7+
class InformationProvider extends InheritedWidget {
8+
final InformationBloc informationBloc;
9+
10+
@override
11+
bool updateShouldNotify(InheritedWidget oldWidget) => true;
12+
13+
static InformationBloc of(BuildContext context) =>
14+
(context.inheritFromWidgetOfExactType(InformationProvider)
15+
as InformationProvider)
16+
.informationBloc;
17+
18+
InformationProvider({
19+
Key key,
20+
InformationBloc informationBloc,
21+
Widget child,
22+
}) : this.informationBloc = informationBloc ??
23+
InformationBloc(
24+
PackageInfo.fromPlatform(),
25+
Connectivity().checkConnectivity(),
26+
),
27+
super(
28+
key: key,
29+
child: child,
30+
);
31+
}

pubspec.yaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ description: A flutter application for the utopian.rocks website.
77
# Both the version and the builder number may be overridden in flutter
88
# build by specifying --build-name and --build-number, respectively.
99
# Read more about versioning at semver.org.
10-
version: 0.0.2
10+
version: 0.0.3
1111

1212
environment:
1313
sdk: '>=2.0.0-dev.68.0 <3.0.0'
@@ -22,6 +22,9 @@ dependencies:
2222
rxdart: ^0.18.1
2323
timeago: ^2.0.7
2424
url_launcher: ^3.0.3
25+
connectivity: any
26+
package_info: any
27+
2528
# share: ^0.5.3
2629

2730
dev_dependencies:
@@ -48,6 +51,7 @@ flutter:
4851
uses-material-design: true
4952
assets:
5053
- assets/images/utopy.png
54+
- assets/images/utopian-icon.png
5155
# To add assets to your application, add an assets section, like this:
5256
# assets:
5357
# - images/a_dot_burr.jpeg

0 commit comments

Comments
 (0)