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,
),
),
),
],
);
}
}