showMoreDialog function
Implementation
Future<dynamic> showMoreDialog(BuildContext context, EnxController obj) {
return showGeneralDialog(
context: context,
barrierDismissible: true,
barrierLabel: 'Dismiss more options',
barrierColor: EnxUiKitTheme.scrim(context),
transitionDuration: const Duration(milliseconds: 300),
pageBuilder: (context, animation1, animation2) {
return Container();
},
transitionBuilder: (context, animation1, animation2, child) {
return SlideTransition(
position: Tween<Offset>(
begin: const Offset(1.0, 0.0),
end: Offset.zero,
).animate(CurvedAnimation(
parent: animation1,
curve: Curves.easeInOut,
)),
child: OrientationBuilder(
builder: (context, orientation) {
final mediaQuery = MediaQuery.of(context);
final panelWidth =
EnxUiKitTheme.sidePanelWidth(mediaQuery.size, orientation);
return SafeArea(
child: Scaffold(
backgroundColor: Colors.transparent,
body: Row(
children: [
Expanded(
child: GestureDetector(
onTap: () => Navigator.pop(context),
behavior: HitTestBehavior.opaque,
),
),
AnimatedContainer(
duration: const Duration(milliseconds: 200),
width: panelWidth,
height: mediaQuery.size.height,
decoration: BoxDecoration(
color: EnxUiKitTheme.surface(context),
border: Border.all(
width: 1.0,
color: EnxUiKitTheme.border(context),
),
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(15.0),
bottomLeft: Radius.circular(15.0),
),
),
child: ClipRRect(
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(15.0),
bottomLeft: Radius.circular(15.0),
),
child: ListView.separated(
padding: EdgeInsets.fromLTRB(
16,
24,
16,
mediaQuery.padding.bottom + 24,
),
itemCount: obj.moreList.length,
separatorBuilder: (_, __) =>
const SizedBox(height: 4),
itemBuilder: (context, index) {
final item = obj.moreList[index];
return _MoreOptionTile(
item: item,
onTap: () {
obj.updateMoreList(item);
Get.back();
},
onSwitchChanged: (bool value) {
item.status = value;
obj.updateMoreList(item);
Get.back();
},
);
},
),
),
),
],
),
),
);
},
),
);
},
);
}