main_page.dart 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. import 'package:eye_video/bizmodule/blocs.dart';
  2. import 'package:eye_video/bizmodule/main/category/category_page.dart';
  3. import 'package:eye_video/bizmodule/main/category/repositories/mock/mock_category_repository.dart';
  4. import 'package:eye_video/bizmodule/main/community/blocs/community_bloc.dart';
  5. import 'package:eye_video/bizmodule/main/community/community_page.dart';
  6. import 'package:eye_video/bizmodule/main/community/respositories/mock/mock_community_repository.dart';
  7. import 'package:eye_video/bizmodule/main/discovery/blocs/discovery_bloc.dart';
  8. import 'package:eye_video/bizmodule/main/discovery/discovery_page.dart';
  9. import 'package:eye_video/bizmodule/main/discovery/respositories/mock/mock_discovery_repository.dart';
  10. import 'package:eye_video/bizmodule/main/selections/blocs/ugc/ugc_bloc.dart';
  11. import 'package:eye_video/bizmodule/main/selections/respositories/mock/mock_ugc_repository.dart';
  12. import 'package:eye_video/bizmodule/main/selections/ugc_page.dart';
  13. import 'package:eye_video/bizmodule/main/thiz/blocs/main_bloc.dart';
  14. import 'package:eye_video/bizmodule/main/thiz/repositories/mock/mock_main_repository.dart';
  15. import 'package:eye_video/bizmodule/main/thiz/widgets/drawer_widget.dart';
  16. import 'package:eye_video/framework/extension/screen_ruler.dart';
  17. import 'package:eye_video/framework/extension/size_extension.dart';
  18. import 'package:flutter/material.dart';
  19. import 'package:flutter_bloc/flutter_bloc.dart';
  20. /// Description: 首页
  21. /// Time : 06/30/2022 Thursday
  22. /// Author : liuyuqi.gov@msn.cn
  23. class MainPage extends StatelessWidget {
  24. MainPage({Key key, this.title}) : super(key: key);
  25. final String title;
  26. @override
  27. Widget build(BuildContext context) {
  28. ScreenRuler.init(context);
  29. var tabs = ['精选', '发现', '分类', '社区'];
  30. return DefaultTabController(
  31. length: tabs.length,
  32. child: Scaffold(
  33. appBar: AppBar(
  34. title: buildTabBar(tabs),
  35. elevation: 2.0,
  36. actions: [
  37. Icon(Icons.search),
  38. ],
  39. ),
  40. drawer: BlocProvider(
  41. create: (ctx) => MainBloc(mainRepository: MockMainRepository()),
  42. child: DrawerWidget(),
  43. ),
  44. body: TabBarView(
  45. children: tabs.map((tab) {
  46. var index = tabs.indexOf(tab);
  47. switch (index) {
  48. case 0:
  49. {
  50. return BlocProvider(
  51. create: (context) => UgcBloc(
  52. ugcRepository: MockUgcRepository()),
  53. child: UgcPage(),
  54. );
  55. }
  56. break;
  57. case 1:
  58. {
  59. return BlocProvider(
  60. create: (context) => DiscoveryBloc(
  61. discoveryRepository: MockDiscoveryRepository()),
  62. child: DiscoveryPage(),
  63. );
  64. }
  65. break;
  66. case 2:
  67. {
  68. return BlocProvider(
  69. create: (context) => CategoryBloc(
  70. categoryRepository: MockCategoryRepository()),
  71. child: CategoryPage(),
  72. );
  73. }
  74. break;
  75. case 3:
  76. {
  77. return BlocProvider(
  78. create: (context) => CommunityBloc(
  79. communityRepository: MockCommunityRepository()),
  80. child: CommunityPage(),
  81. );
  82. }
  83. break;
  84. default:
  85. {
  86. return Center(child: Text(tab));
  87. }
  88. }
  89. }).toList(),
  90. ),
  91. ),
  92. );
  93. }
  94. Widget buildTabBar(List<String> tabs) {
  95. return TabBar(
  96. isScrollable: true,
  97. indicator: BoxDecoration(color: Colors.transparent),
  98. indicatorSize: TabBarIndicatorSize.label,
  99. tabs: tabs.map((textStr) => Tab(text: textStr)).toList(),
  100. labelStyle: TextStyle(
  101. color: Color(0xff333333),
  102. fontSize: 30.sp,
  103. fontFamily: 'NotoSansHans-Medium',
  104. ),
  105. unselectedLabelStyle: TextStyle(
  106. color: Color(0xff666666),
  107. fontSize: 30.sp,
  108. fontFamily: 'NotoSansHans-Regular',
  109. ),
  110. );
  111. }
  112. }