LCOV - code coverage report
Current view: top level - src/ui/editor/pages/app_settings - app_settings.dart (source / functions) Hit Total Coverage
Test: lcov.info Lines: 85 92 92.4 %
Date: 2020-12-04 18:41:24 Functions: 0 0 -

          Line data    Source code
       1             : import 'package:flutter/material.dart';
       2             : import 'package:mvvm_builder/mvvm_builder.dart';
       3             : import 'package:pal/src/injectors/editor_app/editor_app_injector.dart';
       4             : import 'package:pal/src/services/editor/project/app_icon_grabber_delegate.dart';
       5             : import 'package:pal/src/services/editor/project/project_editor_service.dart';
       6             : import 'package:pal/src/services/package_version.dart';
       7             : import 'package:pal/src/theme.dart';
       8             : import 'package:pal/src/ui/editor/pages/app_settings/app_settings_presenter.dart';
       9             : import 'package:pal/src/ui/editor/pages/app_settings/app_settings_viewmodel.dart';
      10             : import 'package:pal/src/ui/editor/pages/app_settings/widgets/animated_app_icon.dart';
      11             : import 'package:pal/src/ui/editor/widgets/snackbar_mixin.dart';
      12             : 
      13             : class AppSettingsPageArguments {
      14             :   final String pageId;
      15             : 
      16           0 :   AppSettingsPageArguments(
      17             :     this.pageId,
      18             :   );
      19             : }
      20             : 
      21             : abstract class AppSettingsView {
      22             :   showMessage(String message, bool success);
      23             :   getHeaderSize();
      24             : }
      25             : 
      26             : class AppSettingsPage extends StatelessWidget
      27             :     with SnackbarMixin
      28             :     implements AppSettingsView {
      29             :   final AppIconGrabberDelegate appIconGrabberDelegate;
      30             :   final PackageVersionReader packageVersionReader;
      31             :   final ProjectEditorService projectEditorService;
      32             :   final bool testMode;
      33             : 
      34             :   final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey();
      35             :   final GlobalKey _headerKey = GlobalKey();
      36             :   final double _logoSize = 120.0;
      37             : 
      38           1 :   AppSettingsPage({
      39             :     Key key,
      40             :     this.appIconGrabberDelegate,
      41             :     this.packageVersionReader,
      42             :     this.projectEditorService,
      43             :     this.testMode = false,
      44             :   });
      45             : 
      46             :   final _mvvmPageBuilder =
      47             :       MVVMPageBuilder<AppSettingsPresenter, AppSettingsModel>();
      48             : 
      49           1 :   @override
      50             :   Widget build(BuildContext context) {
      51           2 :     return _mvvmPageBuilder.build(
      52           1 :       key: UniqueKey(),
      53             :       context: context,
      54           2 :       presenterBuilder: (context) => AppSettingsPresenter(
      55             :         this,
      56           1 :         packageVersionReader: packageVersionReader ??
      57           0 :             EditorInjector.of(context).packageVersionReader,
      58           1 :         projectEditorService: projectEditorService ??
      59           0 :             EditorInjector.of(context).projectEditorService,
      60           1 :         appIconGrabberDelegate: appIconGrabberDelegate ??
      61           0 :             EditorInjector.of(context).appIconGrabberDelegate,
      62             :       ),
      63           1 :       singleAnimControllerBuilder: (tickerProvider) {
      64           1 :         return AnimationController(
      65             :           vsync: tickerProvider,
      66           1 :           duration: Duration(
      67             :             milliseconds: 800,
      68             :           ),
      69             :         );
      70             :       },
      71           1 :       animListener: (context, presenter, model) {
      72           1 :         if (model.appIconAnimation) {
      73           1 :           context.animationController
      74           1 :               .forward()
      75           3 :               .then((value) => presenter.onAppIconAnimationEnd());
      76             :         }
      77             :       },
      78           1 :       builder: (context, presenter, model) {
      79           1 :         return Scaffold(
      80           1 :           key: _scaffoldKey,
      81             :           extendBodyBehindAppBar: true,
      82           1 :           appBar: AppBar(
      83           1 :             title: Text('Pal settings'),
      84             :             elevation: 0,
      85             :             backgroundColor: Colors.transparent,
      86             :           ),
      87           1 :           body: this._buildPage(context, presenter, model),
      88             :         );
      89             :       },
      90             :     );
      91             :   }
      92             : 
      93           1 :   Widget _buildAppIconButton(
      94             :     MvvmContext context,
      95             :     final AppSettingsModel model,
      96             :     final AppSettingsPresenter presenter,
      97             :   ) {
      98           1 :     return Align(
      99           1 :       key: ValueKey('pal_AppSettingsPage_AppIcon'),
     100             :       alignment: Alignment.topCenter,
     101           1 :       child: Padding(
     102           1 :         padding: EdgeInsets.only(
     103           4 :           top: (model.headerSize.height / 2) +
     104           5 :               ((model.headerSize.height - _logoSize) / 2),
     105             :         ),
     106           1 :         child: AnimatedAppIcon(
     107           2 :           radius: _logoSize / 2,
     108           1 :           animationController: context.animationController,
     109           1 :           onTap: presenter.refreshAppIcon,
     110           1 :           isSendingAppIcon: model.isSendingAppIcon,
     111           1 :           testMode: testMode,
     112             :         ),
     113             :       ),
     114             :     );
     115             :   }
     116             : 
     117           1 :   Widget _buildHeaderGradient(
     118             :     final BuildContext context,
     119             :     final AppSettingsModel model,
     120             :   ) {
     121           1 :     return Container(
     122           1 :       key: _headerKey,
     123           1 :       decoration: BoxDecoration(
     124           2 :         gradient: PalTheme.of(context).settingsSilverGradient,
     125             :       ),
     126             :     );
     127             :   }
     128             : 
     129           1 :   Widget _buildPage(
     130             :     final MvvmContext context,
     131             :     final AppSettingsPresenter presenter,
     132             :     final AppSettingsModel model,
     133             :   ) {
     134           1 :     return Stack(
     135           1 :       key: ValueKey('pal_AppSettingsPage_Stack'),
     136           1 :       children: [
     137           1 :         Column(
     138           1 :           children: [
     139           1 :             Flexible(
     140             :               flex: 9,
     141           2 :               child: _buildHeaderGradient(context.buildContext, model),
     142             :             ),
     143           1 :             Expanded(
     144             :               flex: 25,
     145           1 :               child: model.isLoadingAppInfo
     146           0 :                   ? Center(
     147           0 :                       child: CircularProgressIndicator(),
     148             :                     )
     149           2 :                   : _buildBody(context.buildContext, model),
     150             :             ),
     151             :             // Container(
     152             :             //   width: double.infinity,
     153             :             //   child: Padding(
     154             :             //     padding: const EdgeInsets.only(
     155             :             //       left: 16.0,
     156             :             //       right: 16.0,
     157             :             //       bottom: 16.0,
     158             :             //     ),
     159             :             //     child: SafeArea(
     160             :             //       top: false,
     161             :             //       child: _buildSaveButton(context, model),
     162             :             //     ),
     163             :             //   ),
     164             :             // ),
     165             :           ],
     166             :         ),
     167           1 :         if (model.headerSize != null)
     168           1 :           this._buildAppIconButton(context, model, presenter),
     169             :       ],
     170             :     );
     171             :   }
     172             : 
     173           1 :   Widget _buildBody(
     174             :     final BuildContext context,
     175             :     final AppSettingsModel model,
     176             :   ) {
     177           1 :     return ListView(
     178           4 :       padding: EdgeInsets.only(top: (_logoSize / 2) + 30.0),
     179           1 :       children: [
     180           1 :         Center(
     181           1 :           child: Text(
     182           1 :             model.appName ?? 'My app',
     183           1 :             style: TextStyle(
     184             :               fontWeight: FontWeight.w500,
     185             :               fontSize: 20,
     186             :             ),
     187             :           ),
     188             :         ),
     189           1 :         SizedBox(
     190             :           height: 8.0,
     191             :         ),
     192           1 :         Center(
     193           1 :           child: Text(
     194           2 :             'Version ${model.appVersion ?? '--'}',
     195           1 :             style: TextStyle(
     196             :               fontWeight: FontWeight.bold,
     197             :               fontSize: 10.0,
     198             :             ),
     199             :           ),
     200             :         ),
     201           1 :         SizedBox(
     202             :           height: 32.0,
     203             :         ),
     204           1 :         Padding(
     205             :           padding: const EdgeInsets.symmetric(horizontal: 16.0),
     206           1 :           child: IgnorePointer(
     207           1 :             child: OutlineButton(
     208           1 :               child: Padding(
     209             :                 padding: const EdgeInsets.symmetric(vertical: 15.0),
     210           1 :                 child: Text(
     211             :                   'Beta account member',
     212           1 :                   style: TextStyle(
     213           3 :                     color: PalTheme.of(context).colors.color1,
     214             :                   ),
     215             :                 ),
     216             :               ),
     217           1 :               borderSide: BorderSide(
     218           3 :                 color: PalTheme.of(context).colors.color1,
     219             :               ),
     220           1 :               shape: RoundedRectangleBorder(
     221           1 :                 side: BorderSide(
     222           3 :                   color: PalTheme.of(context).colors.color1,
     223             :                   width: 3,
     224             :                   style: BorderStyle.solid,
     225             :                 ),
     226           1 :                 borderRadius: BorderRadius.circular(10),
     227             :               ),
     228           0 :               onPressed: () {},
     229             :             ),
     230             :           ),
     231             :         ),
     232             :       ],
     233             :     );
     234             :   }
     235             : 
     236           1 :   @override
     237             :   showMessage(String message, bool success) {
     238           2 :     return showSnackbarMessage(_scaffoldKey, message, success);
     239             :   }
     240             : 
     241           1 :   @override
     242             :   getHeaderSize() {
     243           3 :     RenderBox _headerRenderBox = _headerKey.currentContext.findRenderObject();
     244           1 :     return _headerRenderBox.size;
     245             :   }
     246             : 
     247             :   // Widget _buildSaveButton(BuildContext context, final AppSettingsModel model) {
     248             :   //   return RaisedButton(
     249             :   //     key: ValueKey('pal_AppSettingsPage_SaveButton'),
     250             :   //     disabledColor: PalTheme.of(context).colors.color4,
     251             :   //     child: Text(
     252             :   //       'Save',
     253             :   //       style: TextStyle(
     254             :   //         color: Colors.white,
     255             :   //       ),
     256             :   //     ),
     257             :   //     color: PalTheme.of(context).colors.color1,
     258             :   //     onPressed: () {},
     259             :   //     shape: RoundedRectangleBorder(
     260             :   //       borderRadius: BorderRadius.circular(8.0),
     261             :   //     ),
     262             :   //   );
     263             :   // }
     264             : }

Generated by: LCOV version 1.14