import 'package:flutter/cupertino.dart' as cupertino; import 'package:flutter/material.dart'; import 'package:flutter_platform_widgets/flutter_platform_widgets.dart'; import 'package:mobile_nebula/services/utils.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; enum SimpleScrollable { none, vertical, horizontal, both, } class SimplePage extends StatelessWidget { const SimplePage( {Key key, this.title, @required this.child, this.leadingAction, this.trailingActions = const [], this.scrollable = SimpleScrollable.vertical, this.scrollbar = true, this.scrollController, this.bottomBar, this.onRefresh, this.onLoading, this.refreshController}) : super(key: key); final String title; final Widget child; final SimpleScrollable scrollable; final ScrollController scrollController; /// Set this to true to force draw a scrollbar without a scroll view, this is helpful for pages with Reorderable listviews /// This is set to true if you have any scrollable other than none final bool scrollbar; final Widget bottomBar; /// If no leading action is provided then a default "Back" widget than pops the page will be provided final Widget leadingAction; final List trailingActions; final VoidCallback onRefresh; final VoidCallback onLoading; final RefreshController refreshController; @override Widget build(BuildContext context) { Widget realChild = child; var addScrollbar = this.scrollbar; if (scrollable == SimpleScrollable.vertical || scrollable == SimpleScrollable.both) { realChild = SingleChildScrollView( scrollDirection: Axis.vertical, child: realChild, controller: refreshController == null ? scrollController : null); addScrollbar = true; } if (scrollable == SimpleScrollable.horizontal || scrollable == SimpleScrollable.both) { realChild = SingleChildScrollView(scrollDirection: Axis.horizontal, child: realChild); addScrollbar = true; } if (refreshController != null) { realChild = RefreshConfiguration( headerTriggerDistance: 100, footerTriggerDistance: -100, maxUnderScrollExtent: 100, child: SmartRefresher( scrollController: scrollController, onRefresh: onRefresh, onLoading: onLoading, controller: refreshController, child: realChild, enablePullUp: onLoading != null, enablePullDown: onRefresh != null, footer: ClassicFooter(loadStyle: LoadStyle.ShowWhenLoading), )); addScrollbar = true; } if (addScrollbar) { realChild = Scrollbar(child: realChild); } if (bottomBar != null) { realChild = Column(children: [ Expanded(child: realChild), bottomBar, ]); } return PlatformScaffold( backgroundColor: cupertino.CupertinoColors.systemGroupedBackground.resolveFrom(context), appBar: PlatformAppBar( title: Text(title), leading: leadingAction != null ? leadingAction : Utils.leadingBackWidget(context), trailingActions: trailingActions, cupertino: (_, __) => CupertinoNavigationBarData( transitionBetweenRoutes: false, ), ), body: SafeArea(child: realChild)); } }