drawer_widget.dart 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import 'package:eye_video/bizmodule/main/thiz/blocs/main_bloc.dart';
  2. import 'package:eye_video/bizmodule/main/thiz/blocs/main_state.dart';
  3. import 'package:eye_video/bizmodule/main/thiz/model/drawer_configs.dart';
  4. import 'package:eye_video/bizmodule/main/thiz/model/user_model.dart';
  5. import 'package:eye_video/framework/extension/size_extension.dart';
  6. import 'package:flutter/material.dart';
  7. import 'package:flutter_bloc/flutter_bloc.dart';
  8. class DrawerWidget extends StatelessWidget {
  9. @override
  10. Widget build(BuildContext context) => BlocBuilder<MainBloc, MainState>(
  11. builder: (context, state) {
  12. return Drawer(
  13. child: getDrawerWidget(context, state),
  14. );
  15. },
  16. );
  17. }
  18. Widget getDrawerWidget(BuildContext context, MainState state) {
  19. if (state is DrawerLoadedErrorState) {
  20. return Center(
  21. child: Text('数据请求失败'),
  22. );
  23. } else if (state is DrawerLoadedState) {
  24. return ListView(
  25. padding: EdgeInsets.zero,
  26. children: [
  27. buildDrawerHeader(state.userModel),
  28. buildExtendWidget(context, state.configsModel.extendConfigs),
  29. ]
  30. .followedBy(buildListTiles(context, state.configsModel.configs))
  31. .toList(),
  32. );
  33. } else {
  34. return Center(
  35. child: Text('数据为空'),
  36. );
  37. }
  38. }
  39. Widget buildDrawerHeader(UserModel userModel) {
  40. return UserAccountsDrawerHeader(
  41. accountName: Text(
  42. userModel.username,
  43. style: TextStyle(color: Colors.white, fontSize: 28.sp),
  44. ),
  45. accountEmail: Text(
  46. userModel.introduce,
  47. style: TextStyle(color: Colors.white, fontSize: 24.sp),
  48. ),
  49. currentAccountPicture: CircleAvatar(
  50. backgroundImage: NetworkImage(userModel.avatarUrl),
  51. ),
  52. decoration: BoxDecoration(
  53. image: DecorationImage(
  54. fit: BoxFit.cover,
  55. image: NetworkImage(userModel.coverUrl),
  56. ),
  57. ),
  58. );
  59. }
  60. Widget buildExtendWidget(
  61. BuildContext context, List<DrawerConfig> extendConfigs) {
  62. return Row(
  63. mainAxisSize: MainAxisSize.max,
  64. mainAxisAlignment: MainAxisAlignment.spaceAround,
  65. crossAxisAlignment: CrossAxisAlignment.center,
  66. children: extendConfigs.map((config) {
  67. return GestureDetector(
  68. child: Tab(
  69. iconMargin: EdgeInsets.only(bottom: 12.dp),
  70. icon: Image.asset(config.assetIcon, width: 50.dp, height: 50.dp),
  71. child: Text(config.text, style: TextStyle(fontSize: 26.sp)),
  72. ),
  73. onTap: () => Navigator.pop(context),
  74. );
  75. }).toList(),
  76. );
  77. }
  78. List<Widget> buildListTiles(BuildContext context, List<DrawerConfig> configs) {
  79. return configs.map((config) {
  80. if (config.isDivider) {
  81. return Divider(
  82. height: 1.dp,
  83. color: Colors.grey,
  84. );
  85. } else {
  86. return ListTile(
  87. leading: Icon(config.iconData),
  88. title: Text(config.text, style: TextStyle(fontSize: 26.sp) ),
  89. onTap: () => Navigator.pop(context),
  90. );
  91. }
  92. }).toList();
  93. }