Files
tuiche/lib/controller/mh_controller/address_controller.dart
2025-06-06 09:18:06 +08:00

156 lines
5.1 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'package:ef/ef.dart';
import 'package:flutter_city_picker/model/address.dart';
import 'package:flutterflow_ui/flutterflow_ui.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:vbvs_app/controller/mh_controller/user_data.dart';
import 'package:vbvs_app/controller/mh_controller/muser_info_controller.dart';
part 'address_controller.g.dart';
@JsonSerializable()
class AddressModel {
//版本id
String? province; //省份
String? city; //市
String? county; //区
String? street; //街道
String? detail; //详细信息
String? name; //名字
String? phone; //手机号
bool? ischecked = false; //是否默认
int currentType = 0;
String? all_address;
@JsonKey(ignore: true)
List<AddressNode>? addressList = [];
AddressModel();
static AddressModel fromJson(Map<String, dynamic> json) =>
_$AddressModelFromJson(json);
Map<String, dynamic> toJson() => _$AddressModelToJson(this);
}
class AddressController extends GetControllerEx<AddressModel> {
AddressController() {
attr = GetModel(AddressModel()).obs;
}
Future<String> updateAddress(
Map<String, dynamic> address, AddressModel model) async {
if (model.addressList != null && model.addressList!.isNotEmpty) {
if (model.addressList!.length > 0) {
address["province"] = model.addressList![0].name; // 第一个元素为省
}
if (model.addressList!.length > 1) {
address["city"] = model.addressList![1].name; // 第二个元素为市
}
if (model.addressList!.length > 2) {
address["county"] = model.addressList![2].name; // 第三个元素为区
}
if (model.addressList!.length > 3) {
address["street"] = model.addressList![3].name; // 第四个元素为街道
}
}
address['detail'] = model.detail;
address['name'] = model.name;
address['phone'] = model.phone;
address['isChecked'] = model.ischecked;
try {
final data = await ef.client.rpc("get_now_datetime");
final response = await ef.client.from("app_user_address").update({
'province': address["province"],
'city': address["city"],
'county': address["county"],
'street': address["street"],
'detail': address["detail"],
'name': address["name"],
'phone': address["phone"],
'ischecked': address['isChecked'] ? 1 : 0,
'update_time':
DateFormat("yyyy-MM-dd HH:mm:ss").parse("$data").toString(),
}).eq("id", address['id']);
} catch (e) {
print('Error fetching repairs: $e');
return e.toString();
}
return '';
}
addAddress(AddressModel model) async {
try {
final MUserInfoController userInfoController =
Get.find<MUserInfoController>();
UserModel user = userInfoController.model.user!;
// 设置省市区街道名称
if (model.addressList != null && model.addressList!.isNotEmpty) {
if (model.addressList!.length > 0)
model.province = model.addressList![0].name; // 第一个元素为省
if (model.addressList!.length > 1)
model.city = model.addressList![1].name; // 第二个元素为市
if (model.addressList!.length > 2)
model.county = model.addressList![2].name; // 第三个元素为区
if (model.addressList!.length > 3)
model.street = model.addressList![3].name; // 第四个元素为街道
}
// 查询数据库是否已有该用户的地址
final existingAddresses = await ef.client
.from('app_user_address')
.select()
.eq('user_id', user.uid!);
// 如果没有地址,将新增地址默认选中
if (existingAddresses.isEmpty) {
model.ischecked = true;
} else if (model.ischecked == true) {
// 如果新地址被选中,将其他地址的 `ischecked` 字段设为 `0`
await ef.client
.from('app_user_address')
.update({'ischecked': 0}).eq('user_id', user.uid!);
}
// 添加新地址
final response = await ef.client.from('app_user_address').insert({
'province': model.province,
'city': model.city,
'county': model.county,
'street': model.street,
'detail': model.detail,
'name': model.name,
'phone': model.phone,
'ischecked': model.ischecked! ? 1 : 0,
'user_id': user.uid,
});
} catch (e) {
print(e);
}
}
Future<List<AddressNode>> getData({int? level, int? pid}) async {
// 构建查询
var query = ef.from("app_area_city").select();
// 如果 pid 不为 null添加 pid 的条件
if (pid != null) {
query = query.eq("pid", pid);
}
if (level != null) {
query = query.eq("deep", level);
}
List arr = await query;
List<AddressNode> addressNodes = arr.map((item) {
return AddressNode.fromJson({
"name": item["ext_name"], // ext_name 对应 name
"code": item["id"], // id 对应 code
"letter": item["pinyin_prefix_upper"], // pinyin_prefix_upper 对应 letter
});
}).toList();
return addressNodes;
}
}