// Copyright 2023 The Flutter team. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'dart:math'; import 'package:flutter/material.dart'; import '../components/components.dart'; import '../page_content/wallpapers_flow.dart'; import 'pages.dart'; class PagesFlow extends StatefulWidget { const PagesFlow({super.key}); static const pageScrollDuration = 400; @override State createState() => _PagesFlowState(); } class _PagesFlowState extends State { late PageController pageController = PageController(); @override Widget build(BuildContext context) { final double screenWidth = MediaQuery.of(context).size.width; final double screenHeight = MediaQuery.of(context).size.height; bool narrowView = screenWidth * 1.8 < screenHeight ? true : false; double puzzleSize = narrowView ? screenWidth * 1 : min(screenHeight * 0.6, screenWidth); double topBottomMargin = (screenHeight - puzzleSize) * 0.5; double wonkyCharLargeSize = topBottomMargin * 1.0; double wonkyCharSmallSize = wonkyCharLargeSize * 0.5; PageConfig pageConfig = PageConfig( screenWidth: screenWidth, screenHeight: screenHeight, narrowView: narrowView, puzzleSize: puzzleSize, pageController: pageController, wonkyCharLargeSize: wonkyCharLargeSize, wonkyCharSmallSize: wonkyCharSmallSize, ); return PageView( controller: pageController, physics: const NeverScrollableScrollPhysics(), scrollDirection: Axis.vertical, children: [ PageNarrativePre( pageConfig: pageConfig, ), PageWeight( pageConfig: pageConfig, ), PageAscenderDescender( pageConfig: pageConfig, ), PageOpticalSize( pageConfig: pageConfig, ), PageWidth( pageConfig: pageConfig, ), PageNarrativePost( pageConfig: pageConfig, ), const WallpapersFlow(), ], ); } } class PageConfig { final double screenWidth; final double screenHeight; final bool narrowView; final double puzzleSize; final PageController pageController; final double wonkyCharLargeSize; final double wonkyCharSmallSize; static double baseWeight = 800; const PageConfig({ Key? key, required this.screenWidth, required this.screenHeight, required this.narrowView, required this.puzzleSize, required this.pageController, required this.wonkyCharLargeSize, required this.wonkyCharSmallSize, }); } class SinglePage extends StatefulWidget { final PageConfig pageConfig; const SinglePage({ super.key, required this.pageConfig, }); @override State createState() => SinglePageState(); } class SinglePageState extends State with TickerProviderStateMixin { List buildWonkyChars() { return []; } Widget createPuzzle() { return Container(); } Widget createTopicIntro() { return LightboxedPanel( pageConfig: widget.pageConfig, content: const [], ); } @override Widget build(BuildContext context) { List c = []; c.add(createPuzzle()); c += buildWonkyChars(); c.add(createTopicIntro()); return Stack( children: c, ); } void puzzleDone() {} } class NarrativePage extends StatefulWidget { final PageConfig pageConfig; const NarrativePage({ super.key, required this.pageConfig, }); @override State createState() => NarrativePageState(); } class NarrativePageState extends State with TickerProviderStateMixin { int panelIndex = 0; List panels = []; void handleIntroDismiss() { Future.delayed(const Duration(milliseconds: 50), () { setState(() { if (panelIndex == panels.length - 1) { widget.pageConfig.pageController.nextPage( duration: const Duration(milliseconds: PagesFlow.pageScrollDuration), curve: Curves.easeOut, ); } else { panelIndex++; } }); }); } @override Widget build(BuildContext context) { switch (panelIndex) { default: return Container(); } } void puzzleDone() {} }