|
|
@ -1,9 +1,9 @@
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:flutter_svg/svg.dart';
|
|
|
|
import 'package:flutter_svg/svg.dart';
|
|
|
|
import 'package:test_sa/extensions/context_extension.dart';
|
|
|
|
import 'package:test_sa/extensions/context_extension.dart';
|
|
|
|
|
|
|
|
import 'package:test_sa/extensions/int_extensions.dart';
|
|
|
|
|
|
|
|
|
|
|
|
import '../../models/enums/translation_keys.dart';
|
|
|
|
import '../../models/enums/translation_keys.dart';
|
|
|
|
import '../app_style/app_color.dart';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AppBottomNavigationBar extends StatefulWidget {
|
|
|
|
class AppBottomNavigationBar extends StatefulWidget {
|
|
|
|
final Function(int index) onPressed;
|
|
|
|
final Function(int index) onPressed;
|
|
|
@ -16,52 +16,46 @@ class AppBottomNavigationBar extends StatefulWidget {
|
|
|
|
class _AppBottomNavigationBarState extends State<AppBottomNavigationBar> {
|
|
|
|
class _AppBottomNavigationBarState extends State<AppBottomNavigationBar> {
|
|
|
|
int _selectedIndex = 0;
|
|
|
|
int _selectedIndex = 0;
|
|
|
|
|
|
|
|
|
|
|
|
void _onItemTapped(int index) {
|
|
|
|
|
|
|
|
setState(() {
|
|
|
|
|
|
|
|
_selectedIndex = index;
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
widget.onPressed.call(index);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
return Material(
|
|
|
|
return ClipRRect(
|
|
|
|
elevation: 20,
|
|
|
|
|
|
|
|
borderRadius: const BorderRadius.only(topLeft: Radius.circular(20.0), topRight: Radius.circular(20.0)),
|
|
|
|
borderRadius: const BorderRadius.only(topLeft: Radius.circular(20.0), topRight: Radius.circular(20.0)),
|
|
|
|
child: SizedBox(
|
|
|
|
child: Container(
|
|
|
|
height: 100,
|
|
|
|
height: 100.toScreenHeight,
|
|
|
|
child: ClipRRect(
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
borderRadius: const BorderRadius.all(Radius.circular(20.0)),
|
|
|
|
boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 14)],
|
|
|
|
|
|
|
|
),
|
|
|
|
child: BottomNavigationBar(
|
|
|
|
child: BottomNavigationBar(
|
|
|
|
items: <BottomNavigationBarItem>[
|
|
|
|
items: <BottomNavigationBarItem>[
|
|
|
|
BottomNavigationBarItem(
|
|
|
|
navBarItem(index: 0, iconName: "overview", label: TranslationKeys.overview),
|
|
|
|
icon: SvgPicture.asset('assets/images/Overview.svg', width: 24, height: 24, color: _selectedIndex == 0 ? AppColor.primary70 : AppColor.neutral20),
|
|
|
|
navBarItem(index: 1, iconName: "requests", label: TranslationKeys.myRequests),
|
|
|
|
label: context.translate(TranslationKeys.overview),
|
|
|
|
navBarItem(index: 2, iconName: "assets", label: TranslationKeys.myAssets),
|
|
|
|
),
|
|
|
|
navBarItem(index: 3, iconName: "message", label: TranslationKeys.contactUs),
|
|
|
|
BottomNavigationBarItem(
|
|
|
|
|
|
|
|
icon: SvgPicture.asset('assets/images/requests.svg', width: 24, height: 24, color: _selectedIndex == 1 ? AppColor.primary70 : AppColor.neutral20),
|
|
|
|
|
|
|
|
label: context.translate(TranslationKeys.myRequest),
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
BottomNavigationBarItem(
|
|
|
|
|
|
|
|
icon: SvgPicture.asset('assets/images/assets.svg', width: 24, height: 24, color: _selectedIndex == 2 ? AppColor.primary70 : AppColor.neutral20),
|
|
|
|
|
|
|
|
label: context.translate(TranslationKeys.myRequest),
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
BottomNavigationBarItem(
|
|
|
|
|
|
|
|
icon: SvgPicture.asset('assets/images/message.svg', width: 24, height: 24, color: _selectedIndex == 3 ? AppColor.primary70 : AppColor.neutral20),
|
|
|
|
|
|
|
|
label: context.translate(TranslationKeys.contactUs),
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
],
|
|
|
|
],
|
|
|
|
currentIndex: _selectedIndex,
|
|
|
|
currentIndex: _selectedIndex,
|
|
|
|
type: BottomNavigationBarType.fixed,
|
|
|
|
selectedFontSize: 12,
|
|
|
|
unselectedFontSize: 14,
|
|
|
|
onTap: (index) {
|
|
|
|
unselectedLabelStyle: const TextStyle(height: 2),
|
|
|
|
setState(() {
|
|
|
|
selectedLabelStyle: const TextStyle(height: 2),
|
|
|
|
_selectedIndex = index;
|
|
|
|
selectedItemColor: AppColor.primary70,
|
|
|
|
});
|
|
|
|
unselectedItemColor: AppColor.neutral20,
|
|
|
|
widget.onPressed(index);
|
|
|
|
onTap: _onItemTapped,
|
|
|
|
},
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BottomNavigationBarItem navBarItem({@required int index, @required String iconName, @required TranslationKeys label}) {
|
|
|
|
|
|
|
|
return BottomNavigationBarItem(
|
|
|
|
|
|
|
|
icon: Padding(
|
|
|
|
|
|
|
|
padding: EdgeInsets.symmetric(vertical: 10.toScreenHeight),
|
|
|
|
|
|
|
|
child: SvgPicture.asset(
|
|
|
|
|
|
|
|
'assets/images/$iconName.svg',
|
|
|
|
|
|
|
|
width: 24.toScreenWidth,
|
|
|
|
|
|
|
|
color: _selectedIndex == index ? Theme.of(context).bottomNavigationBarTheme.selectedItemColor : Theme.of(context).bottomNavigationBarTheme.unselectedItemColor,
|
|
|
|
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
|
|
|
|
label: context.translate(label),
|
|
|
|
);
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|