import 'package:flutter/material.dart'; import 'package:flutter_habit/common/I18N.dart'; import 'package:flutter_habit/provider/UserProvider.dart'; import 'package:provider/provider.dart'; import 'SliderConfirm.dart'; import 'UserInfoPopMenuContext.dart'; class PopMenus { static Future<void> confirm({ required BuildContext context, Widget? content, required Function function, }) async { await baseAlertMenu<int>( context: context, content: content ?? Text(I18N.of("继续该操作吗?")), actions: [ TextButton( child: Text(I18N.of("取消")), onPressed: () { Navigator.of(context).pop(0); }, ), TextButton( child: Text(I18N.of("确定")), onPressed: () { Navigator.of(context).pop(1); }, ), ], ).then<int>((value) { if (value == 1) { function(); } return value!; }); } static Future<void> sliderConfirm({ required BuildContext context, Widget? content, required Function function, }) async { await baseMenu<int>( context: context, children: <Widget>[ Padding( padding: EdgeInsets.all(24), child: DefaultTextStyle( style: Theme.of(context).textTheme.titleLarge!, child: content ?? Text(I18N.of("继续该操作吗?")), ), ), Padding( padding: EdgeInsets.only(left: 15, right: 15, bottom: 15), child: SliderConfirm( function: () => Navigator.of(context).pop(1), ), ), ], contentPadding: EdgeInsets.all(0), ).then<int>((value) { if (value == 1) { function(); } return value!; }); } static Future<void> attention({ required BuildContext context, Widget? content, }) async { await baseAlertMenu( context: context, content: content, ); } static Future<T?> baseAlertMenu<T>({ required BuildContext context, Widget? title, Widget? content, List<Widget>? actions, }) async { return await showDialog( context: context, builder: (context) => AlertDialog( title: title ?? Text(I18N.of("注意")), content: content ?? Text(I18N.of("注意")), actions: actions ?? <Widget>[ TextButton( child: Text(I18N.of("确定")), onPressed: () { Navigator.of(context).pop(); }, ), ], ), ); } static Future<T?> baseMenu<T>({ required BuildContext context, Widget? title, List<Widget>? children, EdgeInsetsGeometry? contentPadding, }) async { return await showDialog( context: context, builder: (context) => SimpleDialog( title: title ?? Text(I18N.of("注意")), children: children ?? [Text(I18N.of("注意"))], contentPadding: contentPadding ?? EdgeInsets.fromLTRB(0.0, 12.0, 0.0, 16.0), ), ); } static Future<String> datePicker({ required BuildContext context, }) async { return await showDatePicker( context: context, initialDate: DateTime.now().subtract(Duration(days: 3650)), firstDate: DateTime.now().subtract(Duration(days: 36500)), lastDate: DateTime.now(), initialDatePickerMode: DatePickerMode.year, ).then((onValue) { if (onValue != null) { return onValue.toIso8601String().toString(); } return null; }); } static Future<String?> userInfo({ required BuildContext context, required int? uid, }) async { return await baseMenu( context: context, title: Text(I18N.of("信息")), children: <Widget>[ UserInfoPopMenuContext(uid), ], contentPadding: EdgeInsets.only(top: 10, left: 20, right: 20, bottom: 10), ); } static Future<void> ban(BuildContext context) async { await baseMenu( context: context, contentPadding: EdgeInsets.all(16), children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: <Widget>[ Icon( Icons.warning, size: 80, color: Theme.of(context).unselectedWidgetColor, ), Container(), Container( child: Text( I18N.of("您的账号由于存在恶意刷金币行为已被系统限制金币获取"), maxLines: 3, ), width: 200, ), ], ), ], ); } static Future<void> coinAdd({ required BuildContext context, required int addedCoins, }) async { await baseMenu( context: context, title: Text(I18N.of("打卡成功")), children: [ Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.end, children: <Widget>[ Icon( Icons.monetization_on, size: 80, color: Theme.of(context).colorScheme.secondary, ), Text( " + ", style: TextStyle( fontSize: 40, ), ), Text( " ${addedCoins.toString()} ", style: TextStyle( fontSize: 60, color: Theme.of(context).colorScheme.secondary, ), ), ], ), Container(height: 10,), Center( child: Text( "${Provider.of<UserProvider>(context, listen: false).coins} -> ${Provider.of<UserProvider>(context, listen: false).coins! + addedCoins}", style: TextStyle( color: Theme.of(context).unselectedWidgetColor, ), ), ), ], ); } }