Browse Source

[new]增加首页显示

zk 8 tháng trước cách đây
mục cha
commit
97a25e2153

BIN
assets/images/icon_main_tab_friend_selected.webp


BIN
assets/images/icon_main_tab_friend_unselect.webp


BIN
assets/images/icon_main_tab_location_selected.webp


BIN
assets/images/icon_main_tab_location_unselect.webp


BIN
assets/images/icon_main_tab_urgent_selected.webp


BIN
assets/images/icon_mian_tab_urgent_unselect.webp


+ 7 - 1
lib/di/get_it.config.dart

@@ -14,8 +14,11 @@ import 'package:injectable/injectable.dart' as _i526;
 
 import '../data/api/atmob_api.dart' as _i243;
 import '../data/repositories/account_repository.dart' as _i20;
+import '../module/friend/friend_controller.dart' as _i821;
+import '../module/location/location_controller.dart' as _i734;
 import '../module/main/main_controller.dart' as _i731;
 import '../module/splash/splash_controller.dart' as _i973;
+import '../module/urgent/urgent_controller.dart' as _i369;
 import 'network_module.dart' as _i567;
 
 extension GetItInjectableX on _i174.GetIt {
@@ -30,8 +33,11 @@ extension GetItInjectableX on _i174.GetIt {
       environmentFilter,
     );
     final networkModule = _$NetworkModule();
-    gh.factory<_i973.SplashController>(() => _i973.SplashController());
     gh.factory<_i731.MainController>(() => _i731.MainController());
+    gh.factory<_i973.SplashController>(() => _i973.SplashController());
+    gh.factory<_i734.LocationController>(() => _i734.LocationController());
+    gh.factory<_i821.FriendController>(() => _i821.FriendController());
+    gh.factory<_i369.UrgentController>(() => _i369.UrgentController());
     gh.singleton<_i361.Dio>(() => networkModule.createDefaultDio());
     gh.lazySingleton<_i20.AccountRepository>(() => _i20.AccountRepository());
     gh.singleton<_i243.AtmobApi>(

+ 0 - 1
lib/main.dart

@@ -9,7 +9,6 @@ import 'package:abroad_location/utils/mmkv_util.dart';
 import 'package:abroad_location/utils/toast_util.dart';
 import 'package:atmob_logging/atmob_logging.dart' as ALog;
 import 'package:flutter/material.dart';
-import 'package:flutter_bugly/flutter_bugly.dart';
 import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
 import 'package:flutter_localizations/flutter_localizations.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';

+ 10 - 0
lib/module/friend/friend_controller.dart

@@ -0,0 +1,10 @@
+
+
+import 'package:abroad_location/base/base_controller.dart';
+import 'package:injectable/injectable.dart';
+
+@injectable
+class FriendController extends BaseController{
+
+
+}

+ 14 - 0
lib/module/friend/friend_view.dart

@@ -0,0 +1,14 @@
+import 'package:abroad_location/base/base_view.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/src/widgets/framework.dart';
+
+import 'friend_controller.dart';
+
+class FriendView extends BaseView<FriendController> {
+  const FriendView({super.key});
+
+  @override
+  Widget buildBody(BuildContext context) {
+    return Center(child: Text('FriendView'));
+  }
+}

+ 10 - 0
lib/module/location/location_controller.dart

@@ -0,0 +1,10 @@
+
+
+import 'package:abroad_location/base/base_controller.dart';
+import 'package:injectable/injectable.dart';
+
+@injectable
+class LocationController extends BaseController{
+
+
+}

+ 14 - 0
lib/module/location/location_view.dart

@@ -0,0 +1,14 @@
+import 'package:abroad_location/base/base_view.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/src/widgets/framework.dart';
+
+import 'location_controller.dart';
+
+class LocationView extends BaseView<LocationController> {
+  const LocationView({super.key});
+
+  @override
+  Widget buildBody(BuildContext context) {
+    return Center(child: Text('LocationView'));
+  }
+}

+ 44 - 5
lib/module/main/main_controller.dart

@@ -1,13 +1,52 @@
-
-
-
 import 'package:abroad_location/base/base_controller.dart';
+import 'package:abroad_location/module/location/location_view.dart';
+import 'package:abroad_location/module/urgent/urgent_view.dart';
+import 'package:abroad_location/resource/assets.gen.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:get/get.dart';
 import 'package:injectable/injectable.dart';
 
+import '../friend/friend_view.dart';
 
 @injectable
-class MainController extends BaseController{
+class MainController extends BaseController {
+  List<TabData> tabData = [
+    TabData(Assets.images.iconMainTabLocationSelected.provider(),
+        Assets.images.iconMainTabLocationUnselect.provider(), LocationView()),
+    TabData(Assets.images.iconMainTabFriendSelected.provider(),
+        Assets.images.iconMainTabFriendUnselect.provider(), FriendView()),
+    TabData(Assets.images.iconMainTabUrgentSelected.provider(),
+        Assets.images.iconMianTabUrgentUnselect.provider(), UrgentView()),
+  ];
+
+  final RxInt _currentIndex = 0.obs;
+
+  int get currentIndex => _currentIndex.value;
+
+  @override
+  onReady() {
+    precacheTabIcon();
+  }
+
+
+  onTabClick(int index) {
+    _currentIndex.value = index;
+  }
+
+  void precacheTabIcon() {
+    for (var tab in tabData) {
+      precacheImage(tab.selectIcon, Get.context!);
+      precacheImage(tab.unSelectIcon, Get.context!);
+    }
+  }
+}
+
+class TabData {
+  ImageProvider selectIcon;
 
+  ImageProvider unSelectIcon;
 
+  Widget page;
 
-}
+  TabData(this.selectIcon, this.unSelectIcon, this.page);
+}

+ 64 - 2
lib/module/main/main_page.dart

@@ -1,9 +1,11 @@
 import 'package:abroad_location/base/base_page.dart';
 import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
 import 'package:flutter/src/widgets/framework.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:get/get.dart';
 import 'package:get/get_core/src/get_main.dart';
-
+import '../../resource/colors.gen.dart';
 import '../../router/app_pages.dart';
 import 'main_controller.dart';
 
@@ -15,7 +17,67 @@ class MainPage extends BasePage<MainController> {
   }
 
   @override
+  bool immersive() {
+    return true;
+  }
+
+  @override
   Widget buildBody(BuildContext context) {
-    return Text('MainPage');
+    return DefaultTabController(
+      initialIndex: controller.currentIndex,
+      length: controller.tabData.length,
+      child: Scaffold(
+          body: buildTabBarView(), bottomNavigationBar: buildBottomBar()),
+    );
+  }
+
+  Widget buildBottomBar() {
+    return Container(
+      decoration: BoxDecoration(
+        color: ColorName.white,
+        boxShadow: [
+          BoxShadow(
+            color: ColorName.black5.withOpacity(0.03), // 阴影颜色
+            blurRadius: 16, // 阴影模糊半径
+            spreadRadius: 2, // 阴影扩展半径
+            offset: const Offset(0, 0), // 阴影位置,向上偏移
+          ),
+        ],
+      ),
+      child: Row(children: [
+        for (int i = 0; i < controller.tabData.length; i++)
+          tabItem(controller.tabData[i], i)
+      ]),
+    );
+  }
+
+  Widget tabItem(TabData tabData, int index) {
+    return Expanded(
+        child: Container(
+      padding: EdgeInsets.only(top: 9.w, bottom: 15.w),
+      child: Builder(builder: (context) {
+        return GestureDetector(
+          onTap: () {
+            DefaultTabController.of(context).animateTo(index);
+            controller.onTabClick(index);
+          },
+          child: Obx(() {
+            return Image(
+                image: controller.currentIndex == index
+                    ? tabData.selectIcon
+                    : tabData.unSelectIcon,
+                width: 32.w,
+                height: 32.w);
+          }),
+        );
+      }),
+    ));
+  }
+
+  Widget buildTabBarView() {
+    return TabBarView(children: [
+      for (int i = 0; i < controller.tabData.length; i++)
+        controller.tabData[i].page
+    ]);
   }
 }

+ 11 - 0
lib/module/urgent/urgent_controller.dart

@@ -0,0 +1,11 @@
+
+
+
+import 'package:abroad_location/base/base_controller.dart';
+import 'package:injectable/injectable.dart';
+
+@injectable
+class UrgentController extends BaseController{
+
+
+}

+ 18 - 0
lib/module/urgent/urgent_view.dart

@@ -0,0 +1,18 @@
+
+
+
+import 'package:abroad_location/base/base_view.dart';
+import 'package:abroad_location/module/urgent/urgent_controller.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/src/widgets/framework.dart';
+
+class UrgentView extends BaseView<UrgentController>{
+  const UrgentView({super.key});
+
+
+  @override
+  Widget buildBody(BuildContext context) {
+    return Center(child: Text('UrgentView'));
+  }
+
+}

+ 123 - 0
lib/resource/assets.gen.dart

@@ -7,6 +7,129 @@
 // ignore_for_file: type=lint
 // ignore_for_file: directives_ordering,unnecessary_import,implicit_dynamic_list_literal,deprecated_member_use
 
+import 'package:flutter/widgets.dart';
+
+class $AssetsImagesGen {
+  const $AssetsImagesGen();
+
+  /// File path: assets/images/icon_main_tab_friend_selected.webp
+  AssetGenImage get iconMainTabFriendSelected =>
+      const AssetGenImage('assets/images/icon_main_tab_friend_selected.webp');
+
+  /// File path: assets/images/icon_main_tab_friend_unselect.webp
+  AssetGenImage get iconMainTabFriendUnselect =>
+      const AssetGenImage('assets/images/icon_main_tab_friend_unselect.webp');
+
+  /// File path: assets/images/icon_main_tab_location_selected.webp
+  AssetGenImage get iconMainTabLocationSelected =>
+      const AssetGenImage('assets/images/icon_main_tab_location_selected.webp');
+
+  /// File path: assets/images/icon_main_tab_location_unselect.webp
+  AssetGenImage get iconMainTabLocationUnselect =>
+      const AssetGenImage('assets/images/icon_main_tab_location_unselect.webp');
+
+  /// File path: assets/images/icon_main_tab_urgent_selected.webp
+  AssetGenImage get iconMainTabUrgentSelected =>
+      const AssetGenImage('assets/images/icon_main_tab_urgent_selected.webp');
+
+  /// File path: assets/images/icon_mian_tab_urgent_unselect.webp
+  AssetGenImage get iconMianTabUrgentUnselect =>
+      const AssetGenImage('assets/images/icon_mian_tab_urgent_unselect.webp');
+
+  /// List of all assets
+  List<AssetGenImage> get values => [
+        iconMainTabFriendSelected,
+        iconMainTabFriendUnselect,
+        iconMainTabLocationSelected,
+        iconMainTabLocationUnselect,
+        iconMainTabUrgentSelected,
+        iconMianTabUrgentUnselect
+      ];
+}
+
 class Assets {
   const Assets._();
+
+  static const $AssetsImagesGen images = $AssetsImagesGen();
+}
+
+class AssetGenImage {
+  const AssetGenImage(
+    this._assetName, {
+    this.size,
+    this.flavors = const {},
+  });
+
+  final String _assetName;
+
+  final Size? size;
+  final Set<String> flavors;
+
+  Image image({
+    Key? key,
+    AssetBundle? bundle,
+    ImageFrameBuilder? frameBuilder,
+    ImageErrorWidgetBuilder? errorBuilder,
+    String? semanticLabel,
+    bool excludeFromSemantics = false,
+    double? scale,
+    double? width,
+    double? height,
+    Color? color,
+    Animation<double>? opacity,
+    BlendMode? colorBlendMode,
+    BoxFit? fit,
+    AlignmentGeometry alignment = Alignment.center,
+    ImageRepeat repeat = ImageRepeat.noRepeat,
+    Rect? centerSlice,
+    bool matchTextDirection = false,
+    bool gaplessPlayback = true,
+    bool isAntiAlias = false,
+    String? package,
+    FilterQuality filterQuality = FilterQuality.medium,
+    int? cacheWidth,
+    int? cacheHeight,
+  }) {
+    return Image.asset(
+      _assetName,
+      key: key,
+      bundle: bundle,
+      frameBuilder: frameBuilder,
+      errorBuilder: errorBuilder,
+      semanticLabel: semanticLabel,
+      excludeFromSemantics: excludeFromSemantics,
+      scale: scale,
+      width: width,
+      height: height,
+      color: color,
+      opacity: opacity,
+      colorBlendMode: colorBlendMode,
+      fit: fit,
+      alignment: alignment,
+      repeat: repeat,
+      centerSlice: centerSlice,
+      matchTextDirection: matchTextDirection,
+      gaplessPlayback: gaplessPlayback,
+      isAntiAlias: isAntiAlias,
+      package: package,
+      filterQuality: filterQuality,
+      cacheWidth: cacheWidth,
+      cacheHeight: cacheHeight,
+    );
+  }
+
+  ImageProvider provider({
+    AssetBundle? bundle,
+    String? package,
+  }) {
+    return AssetImage(
+      _assetName,
+      bundle: bundle,
+      package: package,
+    );
+  }
+
+  String get path => _assetName;
+
+  String get keyName => _assetName;
 }

+ 6 - 0
lib/router/app_pages.dart

@@ -1,9 +1,12 @@
+import 'package:abroad_location/module/friend/friend_controller.dart';
 import 'package:get/get.dart';
 
 import '../di/get_it.dart';
+import '../module/location/location_controller.dart';
 import '../module/main/main_controller.dart';
 import '../module/main/main_page.dart';
 import '../module/splash/splash_page.dart';
+import '../module/urgent/urgent_controller.dart';
 
 abstract class AppPage {
   static final pages = <GetPage>[...generalPages];
@@ -19,6 +22,9 @@ class AppBinding extends Bindings {
   @override
   void dependencies() {
     lazyPut(() => getIt.get<MainController>());
+    lazyPut(() => getIt.get<LocationController>());
+    lazyPut(() => getIt.get<FriendController>());
+    lazyPut(() => getIt.get<UrgentController>());
   }
 
   void lazyPut<S>(InstanceBuilderCallback<S> builder) {

+ 11 - 0
lib/widget/MapWidget.dart

@@ -0,0 +1,11 @@
+import 'package:flutter/cupertino.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+
+class MapWidget extends StatelessWidget {
+  const MapWidget({super.key});
+
+  @override
+  Widget build(BuildContext context) {
+    return Text('地图组件', style: TextStyle(fontSize: 20.sp));
+  }
+}