76 lines
2.1 KiB
Dart
76 lines
2.1 KiB
Dart
|
import 'package:flutter/material.dart';
|
||
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||
|
import 'package:lamiter/Extension/build_context.dart';
|
||
|
import 'package:provider/provider.dart';
|
||
|
import 'package:lamiter/Provider/Language/language_provider.dart';
|
||
|
|
||
|
// enum PopupMessageType {
|
||
|
// serverError('伺服器異常。請稍後重試,或聯繫開發人員。', Colors.red),
|
||
|
// formIncompleteError('請填寫所有必填欄位。', Colors.red),
|
||
|
// copySuccess('複製成功!', null),
|
||
|
// screenshotSuccess('截圖成功!', null);
|
||
|
|
||
|
// final String message;
|
||
|
// final Color? color;
|
||
|
// const PopupMessageType(this.message, this.color);
|
||
|
// }
|
||
|
|
||
|
class BottomPopupMessage extends StatefulWidget {
|
||
|
final double height;
|
||
|
|
||
|
const BottomPopupMessage({
|
||
|
required super.key,
|
||
|
required this.height,
|
||
|
});
|
||
|
|
||
|
@override
|
||
|
State<BottomPopupMessage> createState() => BottomPopupMessageState();
|
||
|
}
|
||
|
|
||
|
class BottomPopupMessageState extends State<BottomPopupMessage> {
|
||
|
bool _enabled = false;
|
||
|
String _message = '';
|
||
|
Color _color = Colors.transparent;
|
||
|
|
||
|
void showMessage(String message, Color color) async {
|
||
|
_enabled = true;
|
||
|
_message = message;
|
||
|
_color = color;
|
||
|
setState(() {});
|
||
|
Future.delayed(const Duration(seconds: 3), () {
|
||
|
_enabled = false;
|
||
|
_message = '';
|
||
|
_color = Colors.transparent;
|
||
|
setState(() {});
|
||
|
});
|
||
|
}
|
||
|
|
||
|
@override
|
||
|
Widget build(BuildContext context) {
|
||
|
final languageProvider = Provider.of<LanguageProvider>(context);
|
||
|
|
||
|
return AnimatedPositioned(
|
||
|
bottom: _enabled ? widget.height : -60.sp,
|
||
|
duration: Durations.short3,
|
||
|
curve: Curves.easeOutSine,
|
||
|
child: Container(
|
||
|
decoration: BoxDecoration(
|
||
|
color: _color,
|
||
|
borderRadius: BorderRadius.circular(32.sp),
|
||
|
),
|
||
|
padding: EdgeInsets.symmetric(
|
||
|
vertical: 6.sp,
|
||
|
horizontal: 14.sp,
|
||
|
),
|
||
|
child: Text(
|
||
|
languageProvider.getLocaleString(_message),
|
||
|
style: context.tM!.copyWith(
|
||
|
color: context.surface,
|
||
|
fontWeight: FontWeight.bold,
|
||
|
),
|
||
|
),
|
||
|
),
|
||
|
);
|
||
|
}
|
||
|
}
|