import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:sport/application.dart'; import 'package:sport/provider/login_info_model.dart'; import 'package:sport/provider/user_model.dart'; import 'package:sport/widgets/dialog/alert_dialog.dart'; import 'package:sport/widgets/dialog/request_dialog.dart'; import 'package:sport/widgets/image.dart'; import 'package:sport/widgets/misc.dart'; const List RANK_AREA = ["全国榜", "全省榜", "全市榜"]; class AreaPage extends StatefulWidget { final String? area; AreaPage({this.area}); @override State createState() => _PageState(); } class _PageState extends State { String? _rank; @override void initState() { super.initState(); } @override Widget build(BuildContext context) { _rank = widget.area ?? RANK_AREA[0]; return PopupMenuButton( onSelected: (v) async { var userModel = Provider.of(context, listen: false); var user = userModel.user; if (v != RANK_AREA[0]) { if (user.city?.isEmpty == true) { await userModel.initUser(); user = userModel.user; } if (user.city?.isEmpty == true) { if (await showDialog( context: context, builder: (context) => CustomAlertDialog( title: '是否获取你的当前位置', ok: () => Navigator.of(context).pop(true)), ) == true) { await request(context, () async { // Location location = await Application.location(); // print(location); // if (location != null) { // await new LoginInfoModel().updateUserInfo( // context, user.name, user.gender, // districtId: int.parse(location.adCode)); // user = userModel.user; // } }); } else { return; } } } if (_rank == v) return; _rank = v?.toString(); bool all = _rank == RANK_AREA[0]; bool province = _rank == RANK_AREA[1]; if(_rank != null) AreaNotification(_rank!, all, province, user.provinceId ?? 0, user.cityId ?? 0, user.districtId ?? 0) .dispatch(context); setState(() {}); }, itemBuilder: (BuildContext context) { return divideMenus( RANK_AREA.map((e) => menuItemSelected(e, e, e == _rank)).toList()); }, child: Row( mainAxisSize: MainAxisSize.min, children: [ Text(_rank ?? "", style: Theme.of(context).textTheme.bodyText1!), Padding( padding: const EdgeInsets.fromLTRB(6, 6, 12.0, 6), child: arrowBottom(), ) ], ), ); } } class AreaNotification extends Notification { String rank; bool all, province; int provinceId, cityId, districtId; AreaNotification(this.rank, this.all, this.province, this.provinceId, this.cityId, this.districtId); }