- Created CMakeLists.txt for Flutter and runner components. - Implemented resource script (Runner.rc) for application metadata. - Developed main entry point (main.cpp) for the Windows application. - Added FlutterWindow class to manage the Flutter view within a Win32 window. - Implemented utility functions for console management and command line argument parsing. - Established Win32Window class for high DPI-aware window handling. - Included application icon and manifest for proper Windows integration. - Set up build configurations and dependencies for the Flutter application on Windows.
135 lines
4.1 KiB
Dart
135 lines
4.1 KiB
Dart
import 'dart:async';
|
|
|
|
import 'package:marco/helpers/widgets/my_page_dragger.dart';
|
|
import 'package:marco/helpers/widgets/my_page_indicator.dart';
|
|
import 'package:marco/helpers/widgets/my_page_reveal.dart';
|
|
import 'package:marco/helpers/widgets/my_pages.dart';
|
|
import 'package:flutter/material.dart';
|
|
|
|
class MyOnBoarding extends StatefulWidget {
|
|
final List<PageViewModel> pages;
|
|
final Color selectedIndicatorColor;
|
|
final Color unSelectedIndicatorColor;
|
|
final Widget skipWidget, doneWidget;
|
|
|
|
const MyOnBoarding(
|
|
{super.key,
|
|
required this.pages,
|
|
required this.selectedIndicatorColor,
|
|
required this.unSelectedIndicatorColor,
|
|
required this.skipWidget,
|
|
required this.doneWidget});
|
|
|
|
@override
|
|
_MyOnBoardingState createState() => _MyOnBoardingState();
|
|
}
|
|
|
|
class _MyOnBoardingState extends State<MyOnBoarding>
|
|
with TickerProviderStateMixin {
|
|
StreamController<SlideUpdate>? slideUpdateStream;
|
|
AnimatedPageDragger? animatedPageDragger;
|
|
|
|
int activeIndex = 0;
|
|
|
|
SlideDirection? slideDirection = SlideDirection.none;
|
|
int nextPageIndex = 0;
|
|
|
|
double? slidePercent = 0.0;
|
|
|
|
_MyOnBoardingState() {
|
|
slideUpdateStream = StreamController<SlideUpdate>();
|
|
|
|
slideUpdateStream!.stream.listen((SlideUpdate event) {
|
|
setState(() {
|
|
if (event.updateType == UpdateType.dragging) {
|
|
slideDirection = event.direction;
|
|
slidePercent = event.slidePercent;
|
|
|
|
if (slideDirection == SlideDirection.leftToRight) {
|
|
nextPageIndex = activeIndex - 1;
|
|
} else if (slideDirection == SlideDirection.rightToLeft) {
|
|
nextPageIndex = activeIndex + 1;
|
|
} else {
|
|
nextPageIndex = activeIndex;
|
|
}
|
|
} else if (event.updateType == UpdateType.doneDragging) {
|
|
if (slidePercent! > 0.5) {
|
|
animatedPageDragger = AnimatedPageDragger(
|
|
slideDirection: slideDirection,
|
|
transitionGoal: TransitionGoal.open,
|
|
slidePercent: slidePercent,
|
|
slideUpdateStream: slideUpdateStream,
|
|
vsync: this,
|
|
);
|
|
} else {
|
|
animatedPageDragger = AnimatedPageDragger(
|
|
slideDirection: slideDirection,
|
|
transitionGoal: TransitionGoal.close,
|
|
slidePercent: slidePercent,
|
|
slideUpdateStream: slideUpdateStream,
|
|
vsync: this,
|
|
);
|
|
}
|
|
|
|
animatedPageDragger!.run();
|
|
} else if (event.updateType == UpdateType.animating) {
|
|
slideDirection = event.direction;
|
|
slidePercent = event.slidePercent;
|
|
} else if (event.updateType == UpdateType.doneAnimating) {
|
|
if (animatedPageDragger?.transitionGoal == TransitionGoal.open) {
|
|
activeIndex = nextPageIndex;
|
|
}
|
|
slideDirection = SlideDirection.none;
|
|
slidePercent = 0.0;
|
|
|
|
animatedPageDragger!.dispose();
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
@override
|
|
void dispose() {
|
|
super.dispose();
|
|
slideUpdateStream!.close();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
backgroundColor: Colors.black,
|
|
body: Stack(
|
|
children: [
|
|
MySinglePage(
|
|
viewModel: widget.pages[activeIndex],
|
|
percentVisible: 1.0,
|
|
),
|
|
MyPageReveal(
|
|
revealPercent: slidePercent,
|
|
child: MySinglePage(
|
|
viewModel: widget.pages[nextPageIndex],
|
|
percentVisible: slidePercent,
|
|
),
|
|
),
|
|
MyPagerIndicator(
|
|
viewModel: PagerIndicatorViewModel(
|
|
widget.pages,
|
|
activeIndex,
|
|
slideDirection,
|
|
slidePercent,
|
|
widget.selectedIndicatorColor,
|
|
widget.unSelectedIndicatorColor,
|
|
widget.skipWidget,
|
|
widget.doneWidget),
|
|
),
|
|
MyPageDragger(
|
|
canDragLeftToRight: activeIndex > 0,
|
|
canDragRightToLeft: activeIndex < widget.pages.length - 1,
|
|
slideUpdateStream: slideUpdateStream,
|
|
)
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|