import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:ansu_ui/styles/as_colors.dart'; import 'package:ansu_ui/buttons/as_back_button.dart'; ///ASScaffold /// ///made with Scaffold from `Material` /// /// /// ///`title`,`body`,`leading`,`bottomNavigationBar`,`appBarBottom`,`appBar` /// ///title , AppBar 和 AppBarBottom 均为 `null`时不显示scaffold的AppBar /// ///只有AppBarBottom时只显示AppBarBottom中的内容 class ASScaffold extends StatelessWidget { ///标题,可为`String`或`Text` final dynamic title; /// `Scaffold` body final Widget body; /// `Scaffold` leading final Widget leading; /// `Scaffold` actions final List actions; /// `Scaffold` bottomNavigationBar final Widget bottomNavigationBar; /// `AppBar` appBarBottom final PreferredSizeWidget appBarBottom; /// `EndDrawer` endDrawer /// /// 右方向的抽屉 final Widget endDrawer; /// `AppBar` appBar final Widget appBar; ///背景色 final Color backgroundColor; final Widget floatingActionButton; ASScaffold({ Key key, this.title, this.leading, this.body, this.bottomNavigationBar, this.appBarBottom, this.endDrawer, this.appBar, this.backgroundColor = kBackgroundColor, this.actions, this.floatingActionButton, }) : super(key: key); Widget get _title { if (title is String) return Text(title); return title ?? SizedBox(); } Widget get _appBar { if (title == null && appBar == null && appBarBottom == null) return null; return appBar ?? AppBar( brightness: Brightness.light, backgroundColor: kForegroundColor, elevation: 0, leading: leading ?? ASBackButton(), actions: actions ?? [], centerTitle: true, title: DefaultTextStyle( style: TextStyle( color: kTextColor, fontSize: 18.sp, fontWeight: FontWeight.bold, ), child: _title, ), bottom: appBarBottom ?? PreferredSize( child: SizedBox(), preferredSize: Size.fromHeight(0), ), ); } @override Widget build(BuildContext context) { return Scaffold( key: key, endDrawer: endDrawer, backgroundColor: backgroundColor, bottomNavigationBar: bottomNavigationBar, floatingActionButton: floatingActionButton, appBar: _appBar, body: body, ); } }