|
|
|
// Copyright 2020 The Flutter team. All rights reserved.
|
|
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
|
|
// found in the LICENSE file.
|
|
|
|
|
|
|
|
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
|
|
|
|
|
|
|
class Place {
|
|
|
|
final String id;
|
|
|
|
final LatLng latLng;
|
|
|
|
final String name;
|
|
|
|
final PlaceCategory category;
|
|
|
|
final String? description;
|
|
|
|
final int starRating;
|
|
|
|
|
|
|
|
const Place({
|
|
|
|
required this.id,
|
|
|
|
required this.latLng,
|
|
|
|
required this.name,
|
|
|
|
required this.category,
|
|
|
|
this.description,
|
|
|
|
this.starRating = 0,
|
|
|
|
}) : assert(starRating >= 0 && starRating <= 5);
|
|
|
|
|
|
|
|
double get latitude => latLng.latitude;
|
|
|
|
|
|
|
|
double get longitude => latLng.longitude;
|
|
|
|
|
|
|
|
Place copyWith({
|
|
|
|
String? id,
|
|
|
|
LatLng? latLng,
|
|
|
|
String? name,
|
|
|
|
PlaceCategory? category,
|
|
|
|
String? description,
|
|
|
|
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,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
@override
|
|
|
|
bool operator ==(Object other) =>
|
|
|
|
identical(this, other) ||
|
|
|
|
other is Place &&
|
|
|
|
runtimeType == other.runtimeType &&
|
|
|
|
id == other.id &&
|
|
|
|
latLng == other.latLng &&
|
|
|
|
name == other.name &&
|
|
|
|
category == other.category &&
|
|
|
|
description == other.description &&
|
|
|
|
starRating == other.starRating;
|
|
|
|
|
|
|
|
@override
|
|
|
|
int get hashCode =>
|
|
|
|
id.hashCode ^
|
|
|
|
latLng.hashCode ^
|
|
|
|
name.hashCode ^
|
|
|
|
category.hashCode ^
|
|
|
|
description.hashCode ^
|
|
|
|
starRating.hashCode;
|
|
|
|
}
|
|
|
|
|
|
|
|
enum PlaceCategory {
|
|
|
|
favorite,
|
|
|
|
visited,
|
|
|
|
wantToGo,
|
|
|
|
}
|