You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ansu_ui/lib/scaffold/as_scaffold.dart

101 lines
2.4 KiB

import 'package:ansu_ui/theme/as_theme.dart';
import 'package:flutter/material.dart';
import 'package:ansu_ui/styles/as_colors.dart';
import 'package:ansu_ui/buttons/as_back_button.dart';
import 'package:flutter/services.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<Widget>? actions;
/// `Scaffold` bottomNavigationBar
final Widget? bottomNavigationBar;
/// `AppBar` appBarBottom
final PreferredSizeWidget? appBarBottom;
/// `EndDrawer` endDrawer
///
/// 右方向的抽屉
final Widget? endDrawer;
/// `AppBar` appBar
final Widget? appBar;
final SystemUiOverlayStyle? systemStyle;
///背景色
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,
this.systemStyle,
}) : super(key: key);
Widget get _title {
if (title is String) return Text(title);
return title;
}
Widget? get _appBar {
if (title == null && appBar == null && appBarBottom == null) return null;
return appBar ??
AppBar(
leading: leading ?? ASBackButton(),
actions: actions ?? [],
title: _title,
bottom: appBarBottom ??
PreferredSize(
child: SizedBox(),
preferredSize: Size.fromHeight(0),
),
);
}
@override
Widget build(BuildContext context) {
return AnnotatedRegion<SystemUiOverlayStyle>(
value: systemStyle ?? ASTheme.defaultSystemStyle,
child: Scaffold(
key: key,
endDrawer: endDrawer,
backgroundColor: backgroundColor,
bottomNavigationBar: bottomNavigationBar,
floatingActionButton: floatingActionButton,
appBar: _appBar as PreferredSizeWidget?,
body: body,
),
);
}
}