- Created generated_plugin_registrant.cc and generated_plugin_registrant.h to manage plugin registration. - Added generated_plugins.cmake for plugin configuration in CMake. - Implemented CMakeLists.txt for the Windows runner, defining build settings and dependencies. - Created Runner.rc for application resources including versioning and icons. - Developed flutter_window.cpp and flutter_window.h to manage the Flutter window lifecycle. - Implemented main.cpp as the entry point for the Windows application. - Added resource.h for resource definitions. - Included app icon in resources. - Created runner.exe.manifest for application settings. - Developed utils.cpp and utils.h for console management and command line argument handling. - Implemented win32_window.cpp and win32_window.h for high DPI-aware window management.
105 lines
3.7 KiB
Dart
105 lines
3.7 KiB
Dart
import 'package:marco/controller/error_pages/coming_soon_controller.dart';
|
|
import 'package:marco/helpers/utils/mixins/ui_mixin.dart';
|
|
import 'package:marco/helpers/widgets/my_container.dart';
|
|
import 'package:marco/helpers/widgets/my_spacing.dart';
|
|
import 'package:marco/helpers/widgets/my_text.dart';
|
|
import 'package:marco/images.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
|
|
class ComingSoonScreen extends StatefulWidget {
|
|
const ComingSoonScreen({super.key});
|
|
|
|
@override
|
|
State<ComingSoonScreen> createState() => _ComingSoonScreenState();
|
|
}
|
|
|
|
class _ComingSoonScreenState extends State<ComingSoonScreen> with SingleTickerProviderStateMixin, UIMixin {
|
|
late ComingSoonController controller;
|
|
|
|
@override
|
|
void initState() {
|
|
controller = ComingSoonController();
|
|
super.initState();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return GetBuilder(
|
|
init: controller,
|
|
tag: 'coming_soon_controller',
|
|
builder: (controller) {
|
|
String strDigits(int n) => n.toString().padLeft(2, '0');
|
|
final days = strDigits(controller.myDuration.inDays);
|
|
final hours = strDigits(controller.myDuration.inHours.remainder(24));
|
|
final minutes = strDigits(controller.myDuration.inMinutes.remainder(60));
|
|
final seconds = strDigits(controller.myDuration.inSeconds.remainder(60));
|
|
return Scaffold(
|
|
body: Stack(
|
|
alignment: Alignment.center,
|
|
clipBehavior: Clip.antiAliasWithSaveLayer,
|
|
children: [
|
|
Stack(
|
|
clipBehavior: Clip.antiAliasWithSaveLayer,
|
|
fit: StackFit.expand,
|
|
children: [Image.asset(Images.authBackground, fit: BoxFit.cover), Container(color: Colors.black.withValues(alpha:.6))],
|
|
),
|
|
Column(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
children: [
|
|
MyText.displayMedium("We Are working on something Awesome!", fontWeight: 600, color: contentTheme.onPrimary, textAlign: TextAlign.center),
|
|
MySpacing.height(40),
|
|
Wrap(
|
|
runSpacing: 16,
|
|
spacing: 16,
|
|
alignment: WrapAlignment.center,
|
|
crossAxisAlignment: WrapCrossAlignment.center,
|
|
children: [
|
|
timerContainer(days),
|
|
timerContainer(hours),
|
|
timerContainer(minutes),
|
|
timerContainer(seconds),
|
|
],
|
|
),
|
|
MySpacing.height(40),
|
|
MyContainer(
|
|
onTap: () => controller.goToBack(),
|
|
borderRadiusAll: 8,
|
|
color: contentTheme.primary,
|
|
height: 44,
|
|
width: 200,
|
|
paddingAll: 0,
|
|
clipBehavior: Clip.antiAliasWithSaveLayer,
|
|
child: Center(
|
|
child: MyText.bodyLarge(
|
|
"Back to home",
|
|
color: contentTheme.onPrimary,
|
|
)),
|
|
)
|
|
],
|
|
),
|
|
],
|
|
),
|
|
);
|
|
},
|
|
);
|
|
}
|
|
|
|
Widget timerContainer(String timing) {
|
|
return MyContainer(
|
|
height: 80,
|
|
width: 80,
|
|
paddingAll: 0,
|
|
child: Center(
|
|
child: AnimatedSwitcher(
|
|
duration: Duration(milliseconds: 800),
|
|
transitionBuilder: (Widget child, Animation<double> animation) {
|
|
return ScaleTransition(scale: animation, child: child);
|
|
},
|
|
child: MyText.titleLarge(timing, fontSize: 32, key: ValueKey(timing)),
|
|
)),
|
|
);
|
|
}
|
|
}
|