From e67cbb03eab37256326b8fc8428f7eaca165a445 Mon Sep 17 00:00:00 2001 From: Andrew Brogdon Date: Fri, 21 Dec 2018 15:06:55 -0800 Subject: [PATCH] Updates travis config to include place_tracker and platform_view_swift (#42) --- .travis.yml | 2 +- jsonexample/pubspec.yaml | 3 - place_tracker/lib/app_model.dart | 10 +- place_tracker/lib/place.dart | 22 ++-- place_tracker/lib/place_details.dart | 35 +++--- place_tracker/lib/place_list.dart | 70 ++++++----- place_tracker/lib/place_map.dart | 130 +++++++++++---------- place_tracker/lib/place_tracker_app.dart | 52 +++++---- place_tracker/lib/stub_data.dart | 18 +-- place_tracker/test/widget_test.dart | 11 ++ platform_view_swift/lib/main.dart | 2 +- platform_view_swift/pubspec.yaml | 5 +- platform_view_swift/test/widgets_test.dart | 11 ++ travis_script.sh | 2 + 14 files changed, 211 insertions(+), 162 deletions(-) create mode 100644 place_tracker/test/widget_test.dart create mode 100644 platform_view_swift/test/widgets_test.dart diff --git a/.travis.yml b/.travis.yml index eae597ce8..c7911ce1a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,7 @@ addons: git: depth: 3 env: - - FLUTTER_VERSION=beta + - FLUTTER_VERSION=stable - FLUTTER_VERSION=dev matrix: allow_failures: diff --git a/jsonexample/pubspec.yaml b/jsonexample/pubspec.yaml index 102b3c269..a7323fab1 100644 --- a/jsonexample/pubspec.yaml +++ b/jsonexample/pubspec.yaml @@ -20,9 +20,6 @@ dev_dependencies: flutter_test: sdk: flutter -dependency_overrides: - analyzer: 0.33.0 - flutter: uses-material-design: true diff --git a/place_tracker/lib/app_model.dart b/place_tracker/lib/app_model.dart index e68d65dbd..4aa344214 100644 --- a/place_tracker/lib/app_model.dart +++ b/place_tracker/lib/app_model.dart @@ -4,7 +4,7 @@ class _AppModelScope extends InheritedWidget { const _AppModelScope({ Key key, this.appModelState, - Widget child + Widget child, }) : super(key: key, child: child); final _AppModelState appModelState; @@ -18,7 +18,7 @@ class AppModel extends StatefulWidget { Key key, @required this.initialState, this.child, - }) : assert(initialState != null), + }) : assert(initialState != null), super(key: key); final T initialState; @@ -30,13 +30,15 @@ class AppModel extends StatefulWidget { static T of(BuildContext context) { final Type appModelScopeType = _typeOf<_AppModelScope>(); - final _AppModelScope scope = context.inheritFromWidgetOfExactType(appModelScopeType); + final _AppModelScope scope = + context.inheritFromWidgetOfExactType(appModelScopeType); return scope.appModelState.currentState; } static void update(BuildContext context, T newState) { final Type appModelScopeType = _typeOf<_AppModelScope>(); - final _AppModelScope scope = context.inheritFromWidgetOfExactType(appModelScopeType); + final _AppModelScope scope = + context.inheritFromWidgetOfExactType(appModelScopeType); scope.appModelState.updateState(newState); } } diff --git a/place_tracker/lib/place.dart b/place_tracker/lib/place.dart index 05401ede5..9391fe96e 100644 --- a/place_tracker/lib/place.dart +++ b/place_tracker/lib/place.dart @@ -15,11 +15,11 @@ class Place { @required this.category, this.description, this.starRating = 0, - }) : assert(id != null), - assert(latLng != null), - assert(name != null), - assert(category != null), - assert(starRating != null && starRating >= 0 && starRating <= 5); + }) : assert(id != null), + assert(latLng != null), + assert(name != null), + assert(category != null), + assert(starRating != null && starRating >= 0 && starRating <= 5); final String id; final LatLng latLng; @@ -40,12 +40,12 @@ class Place { int starRating, }) { return Place( - id: id ?? this.id, - latLng: latLng ?? this.latLng, - name: name ?? this.name, - category: category ?? this.category, - description: description ?? this.description, - starRating: starRating ?? this.starRating, + id: id ?? this.id, + latLng: latLng ?? this.latLng, + name: name ?? this.name, + category: category ?? this.category, + description: description ?? this.description, + starRating: starRating ?? this.starRating, ); } } diff --git a/place_tracker/lib/place_details.dart b/place_tracker/lib/place_details.dart index def564e98..7b092dea8 100644 --- a/place_tracker/lib/place_details.dart +++ b/place_tracker/lib/place_details.dart @@ -11,9 +11,9 @@ class PlaceDetails extends StatefulWidget { @required this.place, @required this.onChanged, Key key, - }) : assert(place != null), - assert(onChanged != null), - super(key: key); + }) : assert(place != null), + assert(onChanged != null), + super(key: key); final Place place; final ValueChanged onChanged; @@ -23,7 +23,6 @@ class PlaceDetails extends StatefulWidget { } class PlaceDetailsState extends State { - Place _place; GoogleMapController _mapController; @@ -115,9 +114,9 @@ class _NameTextField extends StatelessWidget { @required this.controller, @required this.onChanged, Key key, - }) : assert(controller != null), - assert(onChanged != null), - super(key: key); + }) : assert(controller != null), + assert(onChanged != null), + super(key: key); final TextEditingController controller; final ValueChanged onChanged; @@ -147,9 +146,9 @@ class _DescriptionTextField extends StatelessWidget { @required this.controller, @required this.onChanged, Key key, - }) : assert(controller != null), - assert(onChanged != null), - super(key: key); + }) : assert(controller != null), + assert(onChanged != null), + super(key: key); final TextEditingController controller; final ValueChanged onChanged; @@ -180,9 +179,9 @@ class _StarBar extends StatelessWidget { @required this.rating, @required this.onChanged, Key key, - }) : assert(rating != null && rating >= 0 && rating <= maxStars), - assert(onChanged != null), - super(key: key); + }) : assert(rating != null && rating >= 0 && rating <= maxStars), + assert(onChanged != null), + super(key: key); static const int maxStars = 5; final int rating; @@ -212,9 +211,9 @@ class _Map extends StatelessWidget { @required this.mapController, @required this.onMapCreated, Key key, - }) : assert(center != null), - assert(onMapCreated != null), - super(key: key); + }) : assert(center != null), + assert(onMapCreated != null), + super(key: key); final LatLng center; final GoogleMapController mapController; @@ -326,7 +325,9 @@ class _Reviews extends StatelessWidget { ), ), Column( - children: StubData.reviewStrings.map((reviewText) => _buildSingleReview(reviewText)).toList(), + children: StubData.reviewStrings + .map((reviewText) => _buildSingleReview(reviewText)) + .toList(), ), ], ); diff --git a/place_tracker/lib/place_list.dart b/place_tracker/lib/place_list.dart index 0fd2fe6fd..de4059699 100644 --- a/place_tracker/lib/place_list.dart +++ b/place_tracker/lib/place_list.dart @@ -5,7 +5,7 @@ import 'place_details.dart'; import 'place_tracker_app.dart'; class PlaceList extends StatefulWidget { - const PlaceList({ Key key }) : super(key: key); + const PlaceList({Key key}) : super(key: key); @override PlaceListState createState() => PlaceListState(); @@ -22,7 +22,8 @@ class PlaceListState extends State { void _onPlaceChanged(Place value) { // Replace the place with the modified version. final List newPlaces = List.from(AppState.of(context).places); - final int index = newPlaces.indexWhere((Place place) => place.id == value.id); + final int index = + newPlaces.indexWhere((Place place) => place.id == value.id); newPlaces[index] = value; AppState.updateWith(context, places: newPlaces); @@ -41,16 +42,18 @@ class PlaceListState extends State { padding: const EdgeInsets.fromLTRB(16.0, 0.0, 16.0, 8.0), controller: _scrollController, shrinkWrap: true, - children: AppState.of(context).places - .where((Place place) => place.category == AppState.of(context).selectedCategory) - .map((Place place) => _PlaceListTile( - place: place, - onPlaceChanged: (Place value) => _onPlaceChanged(value), - ) - ).toList(), + children: AppState.of(context) + .places + .where((Place place) => + place.category == AppState.of(context).selectedCategory) + .map((Place place) => _PlaceListTile( + place: place, + onPlaceChanged: (Place value) => _onPlaceChanged(value), + )) + .toList(), ), ), - ] + ], ); } } @@ -60,9 +63,9 @@ class _PlaceListTile extends StatelessWidget { Key key, @required this.place, @required this.onPlaceChanged, - }) : assert(place != null), - assert(onPlaceChanged != null), - super(key: key); + }) : assert(place != null), + assert(onPlaceChanged != null), + super(key: key); final Place place; final ValueChanged onPlaceChanged; @@ -71,14 +74,14 @@ class _PlaceListTile extends StatelessWidget { Widget build(BuildContext context) { return InkWell( onTap: () => Navigator.push( - context, - MaterialPageRoute(builder: (context) { - return PlaceDetails( - place: place, - onChanged: (Place value) => onPlaceChanged(value), - ); - }), - ), + context, + MaterialPageRoute(builder: (context) { + return PlaceDetails( + place: place, + onChanged: (Place value) => onPlaceChanged(value), + ); + }), + ), child: Container( padding: EdgeInsets.only(top: 16.0), child: Column( @@ -95,9 +98,12 @@ class _PlaceListTile extends StatelessWidget { ), Row( children: List.generate(5, (int index) { - return Icon(Icons.star, + return Icon( + Icons.star, size: 28.0, - color: place.starRating > index ? Colors.amber : Colors.grey[400], + color: place.starRating > index + ? Colors.amber + : Colors.grey[400], ); }).toList(), ), @@ -124,9 +130,9 @@ class _ListCategoryButtonBar extends StatelessWidget { Key key, @required this.selectedCategory, @required this.onCategoryChanged, - }) : assert(selectedCategory != null), - assert(onCategoryChanged != null), - super(key: key); + }) : assert(selectedCategory != null), + assert(onCategoryChanged != null), + super(key: key); final PlaceCategory selectedCategory; final ValueChanged onCategoryChanged; @@ -140,11 +146,13 @@ class _ListCategoryButtonBar extends StatelessWidget { category: PlaceCategory.favorite, selected: selectedCategory == PlaceCategory.favorite, onCategoryChanged: onCategoryChanged, - ),_CategoryButton( + ), + _CategoryButton( category: PlaceCategory.visited, selected: selectedCategory == PlaceCategory.visited, onCategoryChanged: onCategoryChanged, - ),_CategoryButton( + ), + _CategoryButton( category: PlaceCategory.wantToGo, selected: selectedCategory == PlaceCategory.wantToGo, onCategoryChanged: onCategoryChanged, @@ -160,9 +168,9 @@ class _CategoryButton extends StatelessWidget { @required this.category, @required this.selected, @required this.onCategoryChanged, - }) : assert(category != null), - assert(selected != null), - super(key: key); + }) : assert(category != null), + assert(selected != null), + super(key: key); final PlaceCategory category; final bool selected; diff --git a/place_tracker/lib/place_map.dart b/place_tracker/lib/place_map.dart index 700354364..3c7de677c 100644 --- a/place_tracker/lib/place_map.dart +++ b/place_tracker/lib/place_map.dart @@ -21,7 +21,6 @@ class PlaceMap extends StatefulWidget { } class PlaceMapState extends State { - static BitmapDescriptor _getPlaceMarkerIcon(PlaceCategory category) { switch (category) { case PlaceCategory.favorite: @@ -36,7 +35,8 @@ class PlaceMapState extends State { } } - static List _getPlacesForCategory(PlaceCategory category, List places) { + static List _getPlacesForCategory( + PlaceCategory category, List places) { return places.where((Place place) => place.category == category).toList(); } @@ -61,7 +61,8 @@ class PlaceMapState extends State { } Future> _markPlaces() async { - await Future.wait(AppState.of(context).places.map((Place place) => _markPlace(place))); + await Future.wait( + AppState.of(context).places.map((Place place) => _markPlace(place))); return _markedPlaces; } @@ -101,7 +102,8 @@ class PlaceMapState extends State { void _onPlaceChanged(Place value) { // Replace the place with the modified version. final List newPlaces = List.from(AppState.of(context).places); - final int index = newPlaces.indexWhere((Place place) => place.id == value.id); + final int index = + newPlaces.indexWhere((Place place) => place.id == value.id); newPlaces[index] = value; _updateExistingPlaceMarker(place: value); @@ -117,10 +119,9 @@ class PlaceMapState extends State { AppState.updateWith(context, places: newPlaces); } - void _updateExistingPlaceMarker({@required Place place}) async { - Marker marker = - _markedPlaces.keys.singleWhere( - (Marker value) => _markedPlaces[value].id == place.id); + Future _updateExistingPlaceMarker({@required Place place}) async { + Marker marker = _markedPlaces.keys + .singleWhere((Marker value) => _markedPlaces[value].id == place.id); // Set marker visibility to false to ensure the info window is hidden. Once // the plugin fully supports the Google Maps API, use hideInfoWindow() @@ -136,9 +137,7 @@ class PlaceMapState extends State { MarkerOptions( infoWindowText: InfoWindowText( place.name, - place.starRating != 0 - ? '${place.starRating} Star Rating' - : null, + place.starRating != 0 ? '${place.starRating} Star Rating' : null, ), visible: true, ), @@ -152,16 +151,20 @@ class PlaceMapState extends State { _showPlacesForSelectedCategory(category); } - void _showPlacesForSelectedCategory(PlaceCategory category) async { - await _markedPlaces.forEach((Marker marker, Place place) { - mapController.updateMarker( - marker, - MarkerOptions( - visible: place.category == category, - ), - ); - }); - _zoomToFitPlaces(_getPlacesForCategory(category, _markedPlaces.values.toList())); + Future _showPlacesForSelectedCategory(PlaceCategory category) async { + await Future.wait( + _markedPlaces.keys.map( + (Marker marker) => mapController.updateMarker( + marker, + MarkerOptions( + visible: _markedPlaces[marker].category == category, + ), + ), + ), + ); + + _zoomToFitPlaces( + _getPlacesForCategory(category, _markedPlaces.values.toList())); } void _zoomToFitPlaces(List places) { @@ -229,10 +232,8 @@ class PlaceMapState extends State { Scaffold.of(context).showSnackBar( SnackBar( duration: Duration(seconds: 3), - content: const Text( - 'New place added.', - style: const TextStyle(fontSize: 16.0) - ), + content: const Text('New place added.', + style: const TextStyle(fontSize: 16.0)), action: SnackBarAction( label: 'Edit', onPressed: () async { @@ -272,36 +273,38 @@ class PlaceMapState extends State { } void _onToggleMapTypePressed() { - final MapType nextType = - MapType.values[(mapController.options.mapType.index + 1) % MapType.values.length]; + final MapType nextType = MapType.values[ + (mapController.options.mapType.index + 1) % MapType.values.length]; mapController.updateMapOptions( GoogleMapOptions(mapType: nextType), ); } - void _maybeUpdateMapConfiguration() async { + Future _maybeUpdateMapConfiguration() async { _configuration ??= MapConfiguration.of(AppState.of(context)); - final MapConfiguration newConfiguration = MapConfiguration.of(AppState.of(context)); + final MapConfiguration newConfiguration = + MapConfiguration.of(AppState.of(context)); // Since we manually update [_configuration] when place or selectedCategory // changes come from the [place_map], we should only enter this if statement // when returning to the [place_map] after changes have been made from // [place_list]. if (_configuration != newConfiguration && mapController != null) { - if (_configuration.places == newConfiguration.places - && _configuration.selectedCategory != newConfiguration.selectedCategory) { + if (_configuration.places == newConfiguration.places && + _configuration.selectedCategory != + newConfiguration.selectedCategory) { // If the configuration change is only a category change, just update // the marker visibilities. _showPlacesForSelectedCategory(newConfiguration.selectedCategory); } else { - // At this point, we know the places have been updated from the list view. - // We need to reconfigure the map to respect the updates. - await newConfiguration.places.forEach((Place value) { - if (!_configuration.places.contains(value)) { - _updateExistingPlaceMarker(place: value); - } - }); + // At this point, we know the places have been updated from the list + // view. We need to reconfigure the map to respect the updates. + await Future.wait( + newConfiguration.places + .where((Place p) => !_configuration.places.contains(p)) + .map((Place value) => _updateExistingPlaceMarker(place: value)), + ); _zoomToFitPlaces( _getPlacesForCategory( newConfiguration.selectedCategory, @@ -363,10 +366,10 @@ class _CategoryButtonBar extends StatelessWidget { @required this.selectedPlaceCategory, @required this.visible, @required this.onChanged, - }) : assert(selectedPlaceCategory != null), - assert(visible != null), - assert(onChanged != null), - super(key: key); + }) : assert(selectedPlaceCategory != null), + assert(visible != null), + assert(onChanged != null), + super(key: key); final PlaceCategory selectedPlaceCategory; final bool visible; @@ -384,8 +387,8 @@ class _CategoryButtonBar extends StatelessWidget { children: [ RaisedButton( color: selectedPlaceCategory == PlaceCategory.favorite - ? Colors.green[700] - : Colors.lightGreen, + ? Colors.green[700] + : Colors.lightGreen, child: const Text( 'Favorites', style: TextStyle(color: Colors.white, fontSize: 14.0), @@ -394,8 +397,8 @@ class _CategoryButtonBar extends StatelessWidget { ), RaisedButton( color: selectedPlaceCategory == PlaceCategory.visited - ? Colors.green[700] - : Colors.lightGreen, + ? Colors.green[700] + : Colors.lightGreen, child: const Text( 'Visited', style: TextStyle(color: Colors.white, fontSize: 14.0), @@ -404,8 +407,8 @@ class _CategoryButtonBar extends StatelessWidget { ), RaisedButton( color: selectedPlaceCategory == PlaceCategory.wantToGo - ? Colors.green[700] - : Colors.lightGreen, + ? Colors.green[700] + : Colors.lightGreen, child: const Text( 'Want To Go', style: TextStyle(color: Colors.white, fontSize: 14.0), @@ -419,16 +422,16 @@ class _CategoryButtonBar extends StatelessWidget { } } -class _AddPlaceButtonBar extends StatelessWidget { +class _AddPlaceButtonBar extends StatelessWidget { const _AddPlaceButtonBar({ Key key, @required this.visible, @required this.onSavePressed, @required this.onCancelPressed, - }) : assert(visible != null), - assert(onSavePressed != null), - assert(onCancelPressed != null), - super(key: key); + }) : assert(visible != null), + assert(onSavePressed != null), + assert(onCancelPressed != null), + super(key: key); final bool visible; final VoidCallback onSavePressed; @@ -473,7 +476,7 @@ class _MapFabs extends StatelessWidget { @required this.visible, @required this.onAddPlacePressed, @required this.onToggleMapTypePressed, - }) : assert(visible != null), + }) : assert(visible != null), assert(onAddPlacePressed != null), assert(onToggleMapTypePressed != null), super(key: key); @@ -518,21 +521,28 @@ class MapConfiguration { const MapConfiguration({ @required this.places, @required this.selectedCategory, - }) : assert(places != null), - assert(selectedCategory != null); + }) : assert(places != null), + assert(selectedCategory != null); final List places; final PlaceCategory selectedCategory; + @override + int get hashCode => places.hashCode ^ selectedCategory.hashCode; + @override bool operator ==(Object other) { - if (identical(this, other)) + if (identical(this, other)) { return true; - if (other.runtimeType != runtimeType) + } + + if (other.runtimeType != runtimeType) { return false; + } + final MapConfiguration otherConfiguration = other; - return otherConfiguration.places == places - && otherConfiguration.selectedCategory == selectedCategory; + return otherConfiguration.places == places && + otherConfiguration.selectedCategory == selectedCategory; } static MapConfiguration of(AppState appState) { diff --git a/place_tracker/lib/place_tracker_app.dart b/place_tracker/lib/place_tracker_app.dart index 20e10b160..43f47f121 100644 --- a/place_tracker/lib/place_tracker_app.dart +++ b/place_tracker/lib/place_tracker_app.dart @@ -25,8 +25,8 @@ class _PlaceTrackerAppState extends State { return MaterialApp( builder: (BuildContext context, Widget child) { return AppModel( - initialState: AppState(), - child: child, + initialState: AppState(), + child: child, ); }, home: _PlaceTrackerHomePage(), @@ -35,7 +35,7 @@ class _PlaceTrackerAppState extends State { } class _PlaceTrackerHomePage extends StatelessWidget { - const _PlaceTrackerHomePage({ Key key }) : super(key: key); + const _PlaceTrackerHomePage({Key key}) : super(key: key); @override Widget build(BuildContext context) { @@ -57,17 +57,18 @@ class _PlaceTrackerHomePage extends StatelessWidget { padding: EdgeInsets.fromLTRB(0.0, 0.0, 16.0, 0.0), child: IconButton( icon: Icon( - AppState.of(context).viewType == PlaceTrackerViewType.map - ? Icons.list - : Icons.map, - size: 32.0 + AppState.of(context).viewType == PlaceTrackerViewType.map + ? Icons.list + : Icons.map, + size: 32.0, ), onPressed: () { AppState.updateWith( context, - viewType: AppState.of(context).viewType == PlaceTrackerViewType.map - ? PlaceTrackerViewType.list - : PlaceTrackerViewType.map, + viewType: + AppState.of(context).viewType == PlaceTrackerViewType.map + ? PlaceTrackerViewType.list + : PlaceTrackerViewType.map, ); }, ), @@ -75,7 +76,8 @@ class _PlaceTrackerHomePage extends StatelessWidget { ], ), body: IndexedStack( - index: AppState.of(context).viewType == PlaceTrackerViewType.map ? 0 : 1, + index: + AppState.of(context).viewType == PlaceTrackerViewType.map ? 0 : 1, children: [ PlaceMap(center: const LatLng(45.521563, -122.677433)), PlaceList(), @@ -90,7 +92,7 @@ class AppState { this.places = StubData.places, this.selectedCategory = PlaceCategory.favorite, this.viewType = PlaceTrackerViewType.map, - }) : assert(places != null), + }) : assert(places != null), assert(selectedCategory != null); final List places; @@ -116,29 +118,29 @@ class AppState { } static void updateWith( - BuildContext context, - {List places, - PlaceCategory selectedCategory, - PlaceTrackerViewType viewType, - }) { + BuildContext context, { + List places, + PlaceCategory selectedCategory, + PlaceTrackerViewType viewType, + }) { update( context, AppState.of(context).copyWith( - places: places, selectedCategory: selectedCategory, viewType: viewType, + places: places, + selectedCategory: selectedCategory, + viewType: viewType, ), ); } @override bool operator ==(Object other) { - if (identical(this, other)) - return true; - if (other.runtimeType != runtimeType) - return false; + if (identical(this, other)) return true; + if (other.runtimeType != runtimeType) return false; final AppState otherAppState = other; - return otherAppState.places == places - && otherAppState.selectedCategory == selectedCategory - && otherAppState.viewType == viewType; + return otherAppState.places == places && + otherAppState.selectedCategory == selectedCategory && + otherAppState.viewType == viewType; } @override diff --git a/place_tracker/lib/stub_data.dart b/place_tracker/lib/stub_data.dart index 360e5fe6a..6d274920b 100644 --- a/place_tracker/lib/stub_data.dart +++ b/place_tracker/lib/stub_data.dart @@ -17,7 +17,8 @@ class StubData { id: '2', latLng: LatLng(45.516887, -122.675417), name: 'Luc Lac Vietnamese Kitchen', - description: 'Popular counter-serve offering pho, banh mi & other Vietnamese favorites in a stylish setting.', + description: + 'Popular counter-serve offering pho, banh mi & other Vietnamese favorites in a stylish setting.', category: PlaceCategory.favorite, starRating: 5, ), @@ -26,7 +27,7 @@ class StubData { latLng: LatLng(45.528952, -122.698344), name: 'Salt & Straw', description: - 'Quirky flavors & handmade waffle cones draw crowds to this artisinal ice cream maker\'s 3 parlors.', + 'Quirky flavors & handmade waffle cones draw crowds to this artisinal ice cream maker\'s 3 parlors.', category: PlaceCategory.favorite, starRating: 5, ), @@ -53,7 +54,7 @@ class StubData { latLng: LatLng(45.487137, -122.799940), name: 'Buffalo Wild Wings', description: - 'Lively sports-bar chain dishing up wings & other American pub grub amid lots of large-screen TVs.', + 'Lively sports-bar chain dishing up wings & other American pub grub amid lots of large-screen TVs.', category: PlaceCategory.visited, starRating: 5, ), @@ -62,7 +63,7 @@ class StubData { latLng: LatLng(45.416986, -122.743171), name: 'Chevys', description: - 'Lively, informal Mexican chain with a colorful, family-friendly setting plus tequilas & margaritas.', + 'Lively, informal Mexican chain with a colorful, family-friendly setting plus tequilas & margaritas.', category: PlaceCategory.visited, starRating: 4, ), @@ -71,7 +72,7 @@ class StubData { latLng: LatLng(45.430489, -122.831802), name: 'Cinetopia', description: - 'Moviegoers can take food from the on-site eatery to their seats, with table service in 21+ theaters.', + 'Moviegoers can take food from the on-site eatery to their seats, with table service in 21+ theaters.', category: PlaceCategory.visited, starRating: 4, ), @@ -107,7 +108,7 @@ class StubData { latLng: LatLng(45.420226, -122.740347), name: 'Oswego Grill', description: - 'Wood-grilled steakhouse favorites served in a casual, romantic restaurant with a popular happy hour.', + 'Wood-grilled steakhouse favorites served in a casual, romantic restaurant with a popular happy hour.', category: PlaceCategory.wantToGo, starRating: 4, ), @@ -116,7 +117,7 @@ class StubData { latLng: LatLng(45.541202, -122.676432), name: 'The Widmer Brothers Brewery', description: - 'Popular, enduring gastropub serving craft beers, sandwiches & eclectic entrees in a laid-back space.', + 'Popular, enduring gastropub serving craft beers, sandwiches & eclectic entrees in a laid-back space.', category: PlaceCategory.wantToGo, starRating: 4, ), @@ -133,7 +134,8 @@ class StubData { id: '15', latLng: LatLng(45.485612, -122.784733), name: 'Uwajimaya Beaverton', - description: 'Huge Asian grocery outpost stocking meats, produce & prepared foods plus gifts & home goods.', + description: + 'Huge Asian grocery outpost stocking meats, produce & prepared foods plus gifts & home goods.', category: PlaceCategory.wantToGo, starRating: 5, ), diff --git a/place_tracker/test/widget_test.dart b/place_tracker/test/widget_test.dart new file mode 100644 index 000000000..65c35a3e6 --- /dev/null +++ b/place_tracker/test/widget_test.dart @@ -0,0 +1,11 @@ +// This is a basic Flutter widget test. +// To perform an interaction with a widget in your test, use the WidgetTester utility that Flutter +// provides. For example, you can send tap and scroll gestures. You can also use WidgetTester to +// find child widgets in the widget tree, read text, and verify that the values of widget properties +// are correct. + +import 'package:flutter_test/flutter_test.dart'; + +void main() { + testWidgets('This test always passes', (WidgetTester tester) async {}); +} diff --git a/platform_view_swift/lib/main.dart b/platform_view_swift/lib/main.dart index d962b855c..5f6a0eb45 100644 --- a/platform_view_swift/lib/main.dart +++ b/platform_view_swift/lib/main.dart @@ -66,7 +66,7 @@ class _MyHomePageState extends State { mainAxisAlignment: MainAxisAlignment.center, children: [ new Text( - 'Button tapped $_counter time${ _counter == 1 ? '' : 's' }.', + 'Button tapped $_counter time${_counter == 1 ? '' : 's'}.', style: const TextStyle(fontSize: 17.0), ), new Padding( diff --git a/platform_view_swift/pubspec.yaml b/platform_view_swift/pubspec.yaml index ad50c8ebd..d8c3c2cc1 100644 --- a/platform_view_swift/pubspec.yaml +++ b/platform_view_swift/pubspec.yaml @@ -4,8 +4,11 @@ dependencies: flutter: sdk: flutter -flutter: +dev_dependencies: + flutter_test: + sdk: flutter +flutter: uses-material-design: true assets: - assets/flutter-mark-square-64.png diff --git a/platform_view_swift/test/widgets_test.dart b/platform_view_swift/test/widgets_test.dart new file mode 100644 index 000000000..65c35a3e6 --- /dev/null +++ b/platform_view_swift/test/widgets_test.dart @@ -0,0 +1,11 @@ +// This is a basic Flutter widget test. +// To perform an interaction with a widget in your test, use the WidgetTester utility that Flutter +// provides. For example, you can send tap and scroll gestures. You can also use WidgetTester to +// find child widgets in the widget tree, read text, and verify that the values of widget properties +// are correct. + +import 'package:flutter_test/flutter_test.dart'; + +void main() { + testWidgets('This test always passes', (WidgetTester tester) async {}); +} diff --git a/travis_script.sh b/travis_script.sh index 36e6caa00..efdf1afaf 100644 --- a/travis_script.sh +++ b/travis_script.sh @@ -4,6 +4,8 @@ declare -a PROJECT_NAMES=( "jsonexample" \ "shrine" \ "veggieseasons" \ + "place_tracker" \ + "platform_view_swift" \ ) for PROJECT_NAME in "${PROJECT_NAMES[@]}"