Skip to content

Commit d7d3644

Browse files
committed
Added starting code for the 035 api integration
1 parent dbf2c79 commit d7d3644

File tree

15 files changed

+199
-138
lines changed

15 files changed

+199
-138
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import 'package:flutter/widgets.dart';
2+
3+
class NavBarItemModel {
4+
final String title;
5+
final String navigationPath;
6+
final IconData iconData;
7+
8+
NavBarItemModel({
9+
this.title,
10+
this.navigationPath,
11+
this.iconData,
12+
});
13+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import 'package:flutter/foundation.dart';
2+
3+
class SeasonDetailsModel {
4+
final String title;
5+
final String description;
6+
7+
SeasonDetailsModel({
8+
@required this.title,
9+
@required this.description,
10+
});
11+
}

035-statemanagement-api-integration/00-starting/lib/routing/router.dart

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,37 +8,41 @@ import 'package:the_basics/views/home/home_view.dart';
88
Route<dynamic> generateRoute(RouteSettings settings) {
99
switch (settings.name) {
1010
case HomeRoute:
11-
return _getPageRoute(HomeView());
11+
return _getPageRoute(HomeView(), settings);
1212
case AboutRoute:
13-
return _getPageRoute(AboutView());
13+
return _getPageRoute(AboutView(), settings);
1414
case EpisodesRoute:
15-
return _getPageRoute(EpisodesView());
15+
return _getPageRoute(EpisodesView(), settings);
1616
default:
17+
return _getPageRoute(HomeView(), settings);
1718
}
1819
}
1920

20-
PageRoute _getPageRoute(Widget child) {
21-
return _FadeRoute(child: child);
21+
PageRoute _getPageRoute(Widget child, RouteSettings settings) {
22+
return _FadeRoute(child: child, routeName: settings.name);
2223
}
2324

2425
class _FadeRoute extends PageRouteBuilder {
2526
final Widget child;
26-
_FadeRoute({this.child})
27+
final String routeName;
28+
_FadeRoute({this.child, this.routeName})
2729
: super(
28-
pageBuilder: (
29-
BuildContext context,
30-
Animation<double> animation,
31-
Animation<double> secondaryAnimation,
32-
) =>
33-
child,
34-
transitionsBuilder: (
35-
BuildContext context,
36-
Animation<double> animation,
37-
Animation<double> secondaryAnimation,
38-
Widget child,
39-
) =>
40-
FadeTransition(
41-
opacity: animation,
42-
child: child,
43-
));
30+
settings: RouteSettings(name: routeName),
31+
pageBuilder: (
32+
BuildContext context,
33+
Animation<double> animation,
34+
Animation<double> secondaryAnimation,
35+
) =>
36+
child,
37+
transitionsBuilder: (
38+
BuildContext context,
39+
Animation<double> animation,
40+
Animation<double> secondaryAnimation,
41+
Widget child,
42+
) =>
43+
FadeTransition(
44+
opacity: animation,
45+
child: child,
46+
),
47+
);
4448
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import 'package:flutter/cupertino.dart';
2+
3+
class EpisodesViewModel extends ChangeNotifier {
4+
5+
}
Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,33 @@
11
import 'package:flutter/material.dart';
2-
import 'package:responsive_builder/responsive_builder.dart';
3-
import 'episodes_view_desktop.dart';
2+
import 'package:the_basics/datamodels/season_details_model.dart';
3+
import 'package:the_basics/widgets/episodes_list/episodes_list.dart';
4+
import 'package:the_basics/widgets/season_details/season_details.dart';
45

56
class EpisodesView extends StatelessWidget {
67
const EpisodesView({Key key}) : super(key: key);
78

89
@override
910
Widget build(BuildContext context) {
10-
return ScreenTypeLayout(
11-
desktop: EpisodesViewDesktop(),
12-
);
11+
return SingleChildScrollView(
12+
child: Column(
13+
crossAxisAlignment: CrossAxisAlignment.start,
14+
mainAxisSize: MainAxisSize.max,
15+
children: <Widget>[
16+
SizedBox(
17+
height: 100,
18+
),
19+
SeasonDetails(
20+
details: SeasonDetailsModel(
21+
title: 'SEASON 1',
22+
description:
23+
'This season covers the absolute basics of Flutter Web Dev to get us up and running with a basic web app.',
24+
),
25+
),
26+
SizedBox(
27+
height: 50,
28+
),
29+
EpisodesList(),
30+
],
31+
));
1332
}
1433
}

035-statemanagement-api-integration/00-starting/lib/views/episodes/episodes_view_desktop.dart

Lines changed: 0 additions & 26 deletions
This file was deleted.

035-statemanagement-api-integration/00-starting/lib/widgets/course_details/course_details.dart

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'package:flutter/material.dart';
22
import 'package:responsive_builder/responsive_builder.dart';
3+
import 'package:the_basics/styles/text_styles.dart';
34

45
class CourseDetails extends StatelessWidget {
56
const CourseDetails({Key key}) : super(key: key);
@@ -12,15 +13,6 @@ class CourseDetails extends StatelessWidget {
1213
sizingInformation.deviceScreenType == DeviceScreenType.Desktop
1314
? TextAlign.left
1415
: TextAlign.center;
15-
double titleSize =
16-
sizingInformation.deviceScreenType == DeviceScreenType.Mobile
17-
? 50
18-
: 80;
19-
20-
double descriptionSize =
21-
sizingInformation.deviceScreenType == DeviceScreenType.Mobile
22-
? 16
23-
: 21;
2416

2517
return Container(
2618
width: 600,
@@ -30,21 +22,15 @@ class CourseDetails extends StatelessWidget {
3022
children: <Widget>[
3123
Text(
3224
'FLUTTER WEB.\nTHE BASICS',
33-
style: TextStyle(
34-
fontWeight: FontWeight.w800,
35-
height: 0.9,
36-
fontSize: titleSize),
25+
style: titleTextStyle(sizingInformation.deviceScreenType),
3726
textAlign: textAlignment,
3827
),
3928
SizedBox(
4029
height: 30,
4130
),
4231
Text(
4332
'In this course we will go over the basics of using Flutter Web for website development. Topics will include Responsive Layout, Deploying, Font Changes, Hover Functionality, Modals and more.',
44-
style: TextStyle(
45-
fontSize: descriptionSize,
46-
height: 1.7,
47-
),
33+
style: descriptionTextStyle(sizingInformation.deviceScreenType),
4834
textAlign: textAlignment,
4935
)
5036
],

035-statemanagement-api-integration/00-starting/lib/widgets/episodes_list/episode_item.dart

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,52 @@
11
import 'package:flutter/material.dart';
2+
import 'package:the_basics/datamodels/episode_item.model.dart';
23

34
class EpisodeItem extends StatelessWidget {
4-
final String imageUrl;
5-
final String title;
6-
final double duration;
5+
final EpisodeItemModel model;
76
const EpisodeItem({
87
Key key,
9-
this.imageUrl,
10-
this.title,
11-
this.duration,
8+
this.model,
129
}) : super(key: key);
1310

1411
@override
1512
Widget build(BuildContext context) {
1613
return Card(
1714
color: Colors.white,
1815
elevation: 2,
19-
child: Column(
20-
crossAxisAlignment: CrossAxisAlignment.start,
21-
children: <Widget>[
22-
SizedBox(
23-
height: 180,
24-
width: 300,
25-
child: Container(color: Colors.grey[300]),
26-
),
27-
Padding(
28-
padding: const EdgeInsets.symmetric(
29-
horizontal: 15.0,
30-
vertical: 20,
16+
child: SizedBox(
17+
width: 300,
18+
child: Column(
19+
crossAxisAlignment: CrossAxisAlignment.start,
20+
children: <Widget>[
21+
SizedBox(
22+
height: 180,
23+
child: Container(color: Colors.grey[300]),
3124
),
32-
child: Column(
33-
crossAxisAlignment: CrossAxisAlignment.start,
34-
children: <Widget>[
35-
Text(
36-
title,
37-
style: TextStyle(
38-
fontWeight: FontWeight.w700,
39-
fontSize: 14,
25+
Padding(
26+
padding: const EdgeInsets.symmetric(
27+
horizontal: 15.0,
28+
vertical: 20,
29+
),
30+
child: Column(
31+
crossAxisAlignment: CrossAxisAlignment.start,
32+
children: <Widget>[
33+
Text(
34+
model.title,
35+
style: TextStyle(
36+
fontWeight: FontWeight.w700,
37+
fontSize: 14,
38+
),
39+
softWrap: true,
4040
),
41-
),
42-
Text(
43-
'$duration minutes',
44-
style: TextStyle(fontSize: 10),
45-
)
46-
],
41+
Text(
42+
'${model.duration} minutes',
43+
style: TextStyle(fontSize: 10),
44+
)
45+
],
46+
),
4747
),
48-
),
49-
],
48+
],
49+
),
5050
),
5151
);
5252
}

035-statemanagement-api-integration/00-starting/lib/widgets/episodes_list/episodes_list.dart

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,14 @@ class EpisodesList extends StatelessWidget {
1818

1919
@override
2020
Widget build(BuildContext context) {
21-
return ListView(children: [
22-
Wrap(
23-
direction: Axis.horizontal,
24-
alignment: WrapAlignment.start,
25-
children: <Widget>[
26-
...episodes.map(
27-
(episode) => EpisodeItem(
28-
title: episode.title,
29-
imageUrl: episode.imageUrl,
30-
duration: episode.duration,
31-
),
32-
)
33-
],
34-
),
35-
]);
21+
return Wrap(
22+
spacing: 130,
23+
runSpacing: 30,
24+
children: <Widget>[
25+
...episodes.map(
26+
(episode) => EpisodeItem(model: episode),
27+
)
28+
],
29+
);
3630
}
3731
}

035-statemanagement-api-integration/00-starting/lib/widgets/navbar_item/navbar_item.dart

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'package:flutter/material.dart';
22
import 'package:responsive_builder/responsive_builder.dart';
3+
import 'package:the_basics/datamodels/navbar_item_model.dart';
34
import 'package:the_basics/locator.dart';
45
import 'package:the_basics/services/navigation_service.dart';
56
import 'package:the_basics/widgets/navbar_item/navbar_item_desktop.dart';
@@ -13,15 +14,24 @@ class NavBarItem extends StatelessWidget {
1314

1415
@override
1516
Widget build(BuildContext context) {
17+
var model = NavBarItemModel(
18+
title: title,
19+
navigationPath: navigationPath,
20+
iconData: icon,
21+
);
1622
return GestureDetector(
1723
onTap: () {
1824
// DON'T EVER USE A SERVICE DIRECTLY IN THE UI TO CHANGE ANY KIND OF STATE
1925
// SERVICES SHOULD ONLY BE USED FROM A VIEWMODEL
2026
locator<NavigationService>().navigateTo(navigationPath);
2127
},
2228
child: ScreenTypeLayout(
23-
tablet: NavBarItemTabletDesktop(title, navigationPath),
24-
mobile: NavBarItemMobile(title, icon, navigationPath),
29+
tablet: NavBarItemTabletDesktop(
30+
model: model,
31+
),
32+
mobile: NavBarItemMobile(
33+
model: model,
34+
),
2535
),
2636
);
2737
}

035-statemanagement-api-integration/00-starting/lib/widgets/navbar_item/navbar_item_desktop.dart

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
import 'package:flutter/material.dart';
2+
import 'package:the_basics/datamodels/navbar_item_model.dart';
23

34
class NavBarItemTabletDesktop extends StatelessWidget {
4-
final String title;
5-
final String navigationPath;
6-
const NavBarItemTabletDesktop(this.title, this.navigationPath);
7-
5+
final NavBarItemModel model;
6+
NavBarItemTabletDesktop({this.model});
7+
88
@override
9-
Widget build(BuildContext context) {
9+
Widget build(
10+
BuildContext context,
11+
) {
1012
return Text(
11-
title,
13+
model.title,
1214
style: TextStyle(fontSize: 18),
1315
);
1416
}

0 commit comments

Comments
 (0)