proxibuy/lib/presentation/ui/widgets/navigations/drop_down_demo2.dart

265 lines
8.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:ll_dropdown_menu/ll_dropdown_menu.dart';
import 'package:flutter/services.dart';
/// Wrapper AppBar for customizing default values
class WrapperAppBar extends AppBar {
static Widget? _defaultLeading;
static Widget? _defaultTitle;
static TextStyle? _defaultToolbarTextStyle;
static TextStyle? _defaultTitleTextStyle;
static double? _defaultToolbarHeight;
static SystemUiOverlayStyle? _defaultSystemOverlayStyle;
static void initConfig({
Widget? defaultLeading,
Widget? defaultTitle,
TextStyle? defaultToolbarTextStyle,
TextStyle? defaultTitleTextStyle,
double? defaultToolbarHeight,
SystemUiOverlayStyle? defaultSystemOverlayStyle,
}) {
_defaultLeading = defaultLeading;
_defaultTitle = defaultTitle;
_defaultToolbarTextStyle = defaultToolbarTextStyle;
_defaultTitleTextStyle = defaultTitleTextStyle;
_defaultToolbarHeight = defaultToolbarHeight;
_defaultSystemOverlayStyle = defaultSystemOverlayStyle;
}
WrapperAppBar({
super.key,
Widget? leading,
super.automaticallyImplyLeading,
Widget? title,
super.actions,
super.flexibleSpace,
super.bottom,
double super.elevation = 0,
super.scrolledUnderElevation,
super.notificationPredicate,
super.shadowColor,
super.surfaceTintColor,
super.shape,
Color super.backgroundColor = Colors.white,
super.foregroundColor,
super.iconTheme,
super.actionsIconTheme,
super.primary,
bool super.centerTitle = true,
super.excludeHeaderSemantics,
super.titleSpacing,
super.toolbarOpacity,
super.bottomOpacity,
double? toolbarHeight,
super.leadingWidth,
TextStyle? toolbarTextStyle,
TextStyle? titleTextStyle,
SystemUiOverlayStyle? systemOverlayStyle,
super.forceMaterialTransparency,
super.clipBehavior,
String? titleText,
}) : super(
leading:
leading ?? (automaticallyImplyLeading ? _defaultLeading : null),
title: title ??
_defaultTitle ??
Text(titleText ?? '', style: titleTextStyle),
toolbarHeight: toolbarHeight ?? _defaultToolbarHeight,
toolbarTextStyle: toolbarTextStyle ?? _defaultToolbarTextStyle,
titleTextStyle: titleTextStyle ??
_defaultTitleTextStyle ??
const TextStyle(color: Colors.black, fontSize: 18),
systemOverlayStyle: systemOverlayStyle ?? _defaultSystemOverlayStyle,
);
}
class DropDownDemo3 extends StatefulWidget {
const DropDownDemo3({super.key});
@override
State<DropDownDemo3> createState() => _DropDownDemoState();
}
class _DropDownDemoState extends State<DropDownDemo3>
with SingleTickerProviderStateMixin {
final DropDownController dropDownController = DropDownController();
final DropDownCascadeListDataController dataController1 =
DropDownCascadeListDataController();
final DropDownCascadeListDataController dataController2 =
DropDownCascadeListDataController();
final GlobalKey<ScaffoldState> scaffoldKey = GlobalKey();
List<DropDownItem<List<DropDownItem>>> data1 = List.generate(
6,
(index) => DropDownItem<List<DropDownItem>>(
text: "Tab $index",
data: List.generate(
index + 2,
(index) => DropDownItem(
text: "Tab Second $index",
activeIcon: const Icon(Icons.check),
),
),
),
);
List<DropDownItem<List<DropDownItem>>> data2 = List.generate(
6,
(index) => DropDownItem<List<DropDownItem>>(
text: "Tab $index",
data: List.generate(
index + 2,
(index) => DropDownItem(
text: "Tab Second $index",
activeIcon: const Icon(Icons.check),
),
),
),
);
@override
Widget build(BuildContext context) {
return Scaffold(
key: scaffoldKey,
appBar: WrapperAppBar(
titleText: "DropDownDemo Custom",
backgroundColor: Colors.white,
actions: const <Widget>[
SizedBox(),
],
),
body: Column(children: [
DropDownHeader(
controller: dropDownController,
boxStyle: const DropDownBoxStyle(
height: 50,
backgroundColor: Colors.white,
margin: EdgeInsets.symmetric(horizontal: 10),
padding: EdgeInsets.symmetric(horizontal: 10),
),
itemStyle: DropDownItemStyle(
activeIconColor: Colors.blue,
activeTextStyle: const TextStyle(color: Colors.blue),
decoration: BoxDecoration(
color: Colors.grey.shade100,
borderRadius: BorderRadius.circular(20),
),
activeDecoration: BoxDecoration(
color: Colors.grey.shade100,
borderRadius: BorderRadius.circular(20),
),
margin: const EdgeInsets.symmetric(vertical: 6, horizontal: 10),
alignment: Alignment.center,
highlightTextStyle: const TextStyle(color: Colors.white),
highlightDecoration: BoxDecoration(
color: Colors.black,
borderRadius: BorderRadius.circular(20),
),
highlightIcon: const Icon(
Icons.arrow_drop_down,
color: Colors.white,
),
),
items: List.generate(
3,
(index) => DropDownItem<Tab>(
text: index == 2 ? "Filter" : "Tab $index",
icon: index == 2
? const Icon(Icons.filter_alt)
: const Icon(Icons.arrow_drop_down),
activeIcon: index == 2
? const Icon(Icons.filter_alt)
: const Icon(Icons.arrow_drop_up),
),
),
onItemTap: (index, item) {
if (index == 2) {
dropDownController.hide();
scaffoldKey.currentState?.openEndDrawer();
} else {
dropDownController.toggle(index);
}
},
),
Expanded(
child: Stack(
children: [
Container(
color: Colors.blue[200],
child: Center(
child: TextButton(
onPressed: () {
dataController1.resetAllItemsStatus();
dataController2.resetAllItemsStatus();
for (int i = 0; i < 2; i++) {
dropDownController.hide(
index: i,
status: DropDownHeaderStatus(text: "Tab$i"),
);
}
},
child: const Text("Reset"),
),
),
),
DropDownView(
controller: dropDownController,
builders: [
DropDownCascadeList(
controller: dropDownController,
dataController: dataController1,
headerIndex: 0,
secondFloorItemStyle: const DropDownItemStyle(
backgroundColor: Colors.white,
activeBackgroundColor: Color(0xFFF5F5F5),
activeTextStyle:
TextStyle(fontSize: 14, color: Colors.blue),
activeIconColor: Colors.blue,
padding: EdgeInsets.symmetric(horizontal: 20),
alignment: Alignment.centerLeft,
textExpand: true,
),
items: data1,
),
DropDownCascadeList(
controller: dropDownController,
dataController: dataController2,
headerIndex: 1,
secondFloorItemStyle: const DropDownItemStyle(
backgroundColor: Colors.white,
activeBackgroundColor: Color(0xFFF5F5F5),
activeTextStyle:
TextStyle(fontSize: 14, color: Colors.blue),
activeIconColor: Colors.blue,
padding: EdgeInsets.symmetric(horizontal: 20),
alignment: Alignment.centerLeft,
textExpand: true,
),
items: data2,
maxMultiChoiceSize: 3,
),
DropDownViewWrapper(
width: MediaQuery.of(context).size.width,
height: 300,
child: Container(
color: Colors.yellow,
height: 300,
),
),
],
),
],
),
),
]),
);
}
@override
void dispose() {
dropDownController.dispose();
super.dispose();
}
}