Chad

修改代码

import 'package:Parlando/apis/api_response.dart';
import 'package:Parlando/net/dio_utils.dart';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
class BaseApi {
Future<Response<ApiResponse<T>>> post<T>(
String path, {
data,
Map<String, dynamic>? queryParameters,
Options? options,
CancelToken? cancelToken,
ProgressCallback? onSendProgress,
ProgressCallback? onReceiveProgress,
}) {
return _getDio().post<ApiResponse<T>>(
path,
data: data,
queryParameters: queryParameters,
options: options,
cancelToken: cancelToken,
onSendProgress: onSendProgress,
onReceiveProgress: onReceiveProgress,
);
}
Dio _getDio() {
return DioUtils.instance.dio;
}
}
import 'package:Parlando/apis/api_base.dart';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
class OrderApi extends BaseApi {
OrderApi._privateConstructor();
static final OrderApi _instance = OrderApi._privateConstructor();
static OrderApi get request {
return _instance;
}
Future<Response> createOrder(String productId) {
return post("/order");
}
}
import 'dart:async';
import 'package:Parlando/apis/api_order.dart';
import 'package:flutter/material.dart';
import 'package:in_app_purchase/in_app_purchase.dart';
......@@ -50,6 +51,7 @@ class PaymentSdk {
}
buy(ProductDetails details) {
// OrderApi.request.createOrder()
final PurchaseParam purchaseParam = PurchaseParam(productDetails: details);
if (_isConsumable(details)) {
InAppPurchase.instance.buyConsumable(purchaseParam: purchaseParam);
......
......@@ -21,14 +21,14 @@ class AddressSelectPage extends StatefulWidget {
}
class AddressSelectPageState extends State<AddressSelectPage> {
List<nearby.Results> _list = [];
List<nearby.Results> _nearByList = [];
final ScrollController _controller = ScrollController();
LatLng? _center;
late GoogleMapController mapController;
bool isLoading = false;
Map<MarkerId, Marker> markers = <MarkerId, Marker>{};
late StreamSubscription _locationSubscription;
String radius = "1000";
String radiusMax = "1000";
String apiKey = "AIzaSyDQZsMULyO-UtiSht4_MFi1uHT4BIqasjw";
nearby.NearbyPlacesResponse nearbyPlacesResponse = nearby.NearbyPlacesResponse();
......@@ -70,15 +70,18 @@ class AddressSelectPageState extends State<AddressSelectPage> {
}
void getNearbyPlaces(String keyword) async {
String uri =
'${'https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=${_center?.latitude},${_center?.longitude}&radius=$radius'}&key=$apiKey&keyword=$keyword';
String host = 'https://maps.googleapis.com/maps/api/place/nearbysearch/json';
String location = 'location=${_center?.latitude},${_center?.longitude}';
String radius = 'radius=$radiusMax';
String types = 'type=point_of_interest';
String uri = '${'$host?$location&$radius'}&key=$apiKey&keyword=$keyword&$types';
print(uri);
var url = Uri.parse(uri);
var response = await http.post(url);
nearbyPlacesResponse = nearby.NearbyPlacesResponse.fromJson(jsonDecode(response.body));
_list = nearbyPlacesResponse.results!;
if (_list.isNotEmpty) {
selectItemLocation(_list[0]);
_nearByList = nearbyPlacesResponse.results!;
if (_nearByList.isNotEmpty) {
selectItemLocation(_nearByList[0]);
}
setState(() {
isLoading = false;
......@@ -102,13 +105,13 @@ class AddressSelectPageState extends State<AddressSelectPage> {
var loaderView = const GFLoader().expanded(flex: 11);
var realList = ListView.separated(
controller: _controller,
itemCount: _list.length,
itemCount: _nearByList.length,
separatorBuilder: (_, index) => const Divider(),
itemBuilder: (_, index) {
var item = _list[index];
var item = _nearByList[index];
return _AddressItem(
isSelected: item.isSelect,
date: item,
data: item,
onTap: () {
selectItemLocation(item);
},
......@@ -130,6 +133,8 @@ class AddressSelectPageState extends State<AddressSelectPage> {
onMapCreated: _onMapCreated,
initialCameraPosition: CameraPosition(target: _center ?? const LatLng(45.521563, -122.677433), zoom: 16.0),
markers: Set<Marker>.of(markers.values),
myLocationEnabled: true,
myLocationButtonEnabled: true,
).expanded(flex: 9);
return Scaffold(
......@@ -144,7 +149,7 @@ class AddressSelectPageState extends State<AddressSelectPage> {
initButton() {
return MyButton(
onPressed: () {
var selected = _list.where((element) => element.isSelect);
var selected = _nearByList.where((element) => element.isSelect);
if (selected.isEmpty) {
Toast.show('未选择地址!');
return;
......@@ -158,7 +163,7 @@ class AddressSelectPageState extends State<AddressSelectPage> {
void buildMarkers() {
markers.clear();
for (var value in _list) {
for (var value in _nearByList) {
final MarkerId markerId = MarkerId(buildMarkerId(value));
final Marker marker = Marker(
icon: value.isSelect ? BitmapDescriptor.defaultMarker : BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueBlue),
......@@ -183,7 +188,7 @@ class AddressSelectPageState extends State<AddressSelectPage> {
}
void selectItemLocation(nearby.Results item) {
for (var element in _list) {
for (var element in _nearByList) {
element.isSelect = false;
}
item.isSelect = true;
......@@ -201,12 +206,12 @@ class AddressSelectPageState extends State<AddressSelectPage> {
class _AddressItem extends StatelessWidget {
const _AddressItem({
Key? key,
required this.date,
required this.data,
this.isSelected = false,
this.onTap,
}) : super(key: key);
final nearby.Results date;
final nearby.Results data;
final bool isSelected;
final GestureTapCallback? onTap;
......@@ -220,7 +225,7 @@ class _AddressItem extends StatelessWidget {
height: 50.0,
child: Row(
children: <Widget>[
Text('${date.name} ${date.vicinity}').expanded(),
Text('${data.name}').expanded(),
Visibility(visible: isSelected, child: const Icon(Icons.done, color: Colors.blue))
],
),
......