import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter_svg/svg.dart'; import 'package:stacked/stacked.dart'; import 'package:yimaru_app/ui/common/ui_helpers.dart'; import '../../common/app_colors.dart'; import 'startup_viewmodel.dart'; class StartupView extends StackedView { const StartupView({Key? key}) : super(key: key); @override Widget builder( BuildContext context, StartupViewModel viewModel, Widget? child, ) => _buildScaffoldWrapper(); Widget _buildScaffoldWrapper() => Scaffold( backgroundColor: kcBackgroundColor, body: _buildScaffold(), ); Widget _buildScaffold() => Stack( children: _buildScaffoldChildren(), ); List _buildScaffoldChildren() => [ _buildBackground(), _buildColumn(), ]; Widget _buildBackground() => Image.asset( 'assets/images/onboarding_1.png', fit: BoxFit.fill, width: double.maxFinite, height: double.maxFinite, ); Widget _buildColumn() => Column( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.stretch, children: _buildUpperColumnChildren(), ); List _buildUpperColumnChildren() => [_buildIconWrapper(), _buildLoadingTextContainer()]; Widget _buildLoadingTextContainer() => Padding( padding: const EdgeInsets.only(bottom: 50), child: _buildLoadingTextWrapper(), ); Widget _buildLoadingTextWrapper() => Row( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, children: _buildLoadingTextChildren(), ); List _buildLoadingTextChildren() => [ _buildLoadingText(), horizontalSpaceSmall, _buildIndicatorWrapper(), ]; Widget _buildLoadingText() => const Text('Loading ...', style: TextStyle(color: kcWhiteColor, fontSize: 16)); Widget _buildIndicatorWrapper() => SizedBox( width: 16, height: 16, child: _buildIndicator(), ); Widget _buildIndicator() => const CircularProgressIndicator( strokeWidth: 6, color: kcWhiteColor, ); Widget _buildIconWrapper() => Padding( padding: const EdgeInsets.only(top: 100), child: _buildIcon(), ); Widget _buildIcon() => SvgPicture.asset( 'assets/icons/logo.svg', ); @override StartupViewModel viewModelBuilder(BuildContext context) => StartupViewModel(); @override void onViewModelReady(StartupViewModel viewModel) => SchedulerBinding.instance .addPostFrameCallback((timeStamp) => viewModel.runStartupLogic()); }