周睿 2 年之前
父节点
当前提交
6330c0dda3

+ 38 - 11
lib/generated/assets.dart

@@ -1,16 +1,43 @@
-///This file is automatically generated. DO NOT EDIT, all your changes would be lost.
 class Assets {
   Assets._();
+  
+  /// Assets for imagesAmAppStartArrow
+  /// assets/images/am_app_start_arrow.riv
+  static const String imagesAmAppStartArrow = "assets/images/am_app_start_arrow.riv";
 
-  static const String imagesAmAppStartArrow = 'assets/images/am_app_start_arrow.riv';
-  static const String imagesBkCommonPage = 'assets/images/bk_common_page.png';
-  static const String imagesBkLogin = 'assets/images/bk_login.png';
-  static const String imagesBkLoginRight = 'assets/images/bk_login_right.png';
-  static const String imagesIcCp = 'assets/images/ic_cp.png';
-  static const String imagesIcLocation = 'assets/images/ic_location.png';
-  static const String imagesIcLoginLogo = 'assets/images/ic_login_logo.png';
-  static const String imagesIcMapScale = 'assets/images/ic_map_scale.png';
-  static const String imagesIcNoData = 'assets/images/ic_no_data.png';
-  static const String imagesImCompassNoMap = 'assets/images/im_compass_no_map.png';
+  /// Assets for imagesBkCommonPage
+  /// assets/images/bk_common_page.png
+  static const String imagesBkCommonPage = "assets/images/bk_common_page.png";
 
+  /// Assets for imagesBkLogin
+  /// assets/images/bk_login.png
+  static const String imagesBkLogin = "assets/images/bk_login.png";
+
+  /// Assets for imagesBkLoginRight
+  /// assets/images/bk_login_right.png
+  static const String imagesBkLoginRight = "assets/images/bk_login_right.png";
+
+  /// Assets for imagesIcCp
+  /// assets/images/ic_cp.png
+  static const String imagesIcCp = "assets/images/ic_cp.png";
+
+  /// Assets for imagesIcLocation
+  /// assets/images/ic_location.png
+  static const String imagesIcLocation = "assets/images/ic_location.png";
+
+  /// Assets for imagesIcLoginLogo
+  /// assets/images/ic_login_logo.png
+  static const String imagesIcLoginLogo = "assets/images/ic_login_logo.png";
+
+  /// Assets for imagesIcMapScale
+  /// assets/images/ic_map_scale.png
+  static const String imagesIcMapScale = "assets/images/ic_map_scale.png";
+
+  /// Assets for imagesIcNoData
+  /// assets/images/ic_no_data.png
+  static const String imagesIcNoData = "assets/images/ic_no_data.png";
+
+  /// Assets for imagesImCompassNoMap
+  /// assets/images/im_compass_no_map.png
+  static const String imagesImCompassNoMap = "assets/images/im_compass_no_map.png";
 }

+ 76 - 51
lib/view/home/data_detail/data_detail.dart

@@ -1,9 +1,9 @@
+import 'package:application/view/home/data_detail/data_detail_cp.dart';
 import 'package:application/widget.dart';
 import 'package:common_pub/ui/map_view/map_view.dart';
 import 'package:common_pub/ui/map_view/view_map_image.dart';
 import 'package:common_pub/ui/map_view/view_map_touch.dart';
 import 'package:common_pub/ui/map_view/view_plug_loading.dart';
-import 'package:get_storage/get_storage.dart';
 import 'data_detail_controller.dart';
 
 class DataDetailPage extends StatelessWidget {
@@ -71,12 +71,17 @@ class _UserListView extends GetView<DataDetailController> {
                 mainAxisAlignment: MainAxisAlignment.spaceBetween,
                 children: [
                   const Text('用户列表'),
-                  IconButton(onPressed: () {}, icon: const Icon(Icons.more_horiz)),
+                  IconButton(
+                      onPressed: controller.selectedDetail.value != null
+                          ? () => controller.showDetail.value =
+                              !controller.showDetail.value
+                          : null,
+                      icon: const Icon(Icons.more_horiz)),
                 ],
               ),
               Expanded(
                   child: ListView(
-                children: controller.userList
+                children: controller.showDetail.value? _detailView(): controller.userList
                     .map((element) => _userElem(element))
                     .toList(),
               ))
@@ -85,6 +90,13 @@ class _UserListView extends GetView<DataDetailController> {
     });
   }
 
+  List<Widget> _detailView() {
+    return [
+      // DataDetailCP(cpList: controller.)
+    ];
+  }
+
+
   Widget _userElem(UserInfo data) {
     return Obx(() {
       final children = <Widget>[
@@ -98,34 +110,39 @@ class _UserListView extends GetView<DataDetailController> {
               boxShadow: const [
                 BoxShadow(color: Color(0x29000000), blurRadius: 3)
               ],
-              borderRadius: BorderRadius.circular(3.56)
-          ),
+              borderRadius: BorderRadius.circular(3.56)),
           child: Row(
             children: [
               Container(
                 height: double.infinity,
                 width: 3.56,
                 margin: const EdgeInsets.only(top: 8, bottom: 8, right: 3.55),
-                decoration: BoxDecoration(color: data.data.oId == controller.selectedUserId.value
-                    ? Colors.orange: Colors.transparent, borderRadius: BorderRadius.circular(2.1)),
+                decoration: BoxDecoration(
+                    color: data.data.oId == controller.selectedUserId.value
+                        ? Colors.orange
+                        : Colors.transparent,
+                    borderRadius: BorderRadius.circular(2.1)),
               ),
               Text(data.data.oName),
               const Spacer(),
-              IconButton(onPressed: (){
-                data.isExpand.value = !data.isExpand.value;
-              }, icon: Icon(data.isExpand.value? Icons.arrow_drop_up: Icons.arrow_drop_down))
+              IconButton(
+                  onPressed: () {
+                    data.isExpand.value = !data.isExpand.value;
+                  },
+                  icon: Icon(data.isExpand.value
+                      ? Icons.arrow_drop_up
+                      : Icons.arrow_drop_down))
             ],
           ),
         )
       ];
-      if(data.isExpand.value){
+      if (data.isExpand.value) {
         children.add(Column(
-          children: data.data.list.map((element) => GestureDetector(
-              onTap: (){
-                controller.selectedDetail.value = element;
-                controller.selectedUserId.value = data.data.oId;
-              },
-              child: detailElem(element))).toList(),
+          children: data.data.list
+              .map((element) => GestureDetector(
+                  onTap: () => controller.selectDetail(element, data),
+                  child: detailElem(element)))
+              .toList(),
         ));
       }
 
@@ -135,40 +152,48 @@ class _UserListView extends GetView<DataDetailController> {
     });
   }
 
-  Widget detailElem(DetailSimple detail){
+  Widget detailElem(DetailSimple detail) {
     return Container(
-        margin: const EdgeInsets.only(left: 12, top: 2 , bottom: 4),
-        width: double.infinity,
-        height: 54,
-        padding: const EdgeInsets.fromLTRB(4, 6, 4, 6),
-        decoration: BoxDecoration(
-            color: Colors.white,
-            borderRadius: BorderRadius.circular(3.5),
-            boxShadow: const [
-              BoxShadow(color: Color(0x33000000), blurRadius: 1.3)
-            ]
-        ),
-        child: Row(
-          children: [
-            Container(
-              height: double.infinity,
-              width: 3.56,
-              margin: const EdgeInsets.only(right: 3.55),
-              decoration: BoxDecoration(color: detail.gameId == controller.selectedDetail.value.gameId
-                  ? Colors.orange: Colors.transparent, borderRadius: BorderRadius.circular(2.1)),
-            ),
-            Expanded(child: Column(
-              crossAxisAlignment: CrossAxisAlignment.start,
-              children: [
-                Text(detail.courseName, maxLines: 1, overflow: TextOverflow.ellipsis),
-                Text(detail.actName, maxLines: 1, overflow: TextOverflow.ellipsis,),
-              ],
-            )),
-            const SizedBox(width: 12),
-            Text(detail.isComplete?'完赛':'未完赛')
-          ],
-        ),
-      );
+      margin: const EdgeInsets.only(left: 12, top: 2, bottom: 4),
+      width: double.infinity,
+      height: 54,
+      padding: const EdgeInsets.fromLTRB(4, 6, 4, 6),
+      decoration: BoxDecoration(
+          color: Colors.white,
+          borderRadius: BorderRadius.circular(3.5),
+          boxShadow: const [
+            BoxShadow(color: Color(0x33000000), blurRadius: 1.3)
+          ]),
+      child: Row(
+        children: [
+          Container(
+            height: double.infinity,
+            width: 3.56,
+            margin: const EdgeInsets.only(right: 3.55),
+            decoration: BoxDecoration(
+                color: detail.gameId ==
+                        controller.selectedDetailSimple.value.gameId
+                    ? Colors.orange
+                    : Colors.transparent,
+                borderRadius: BorderRadius.circular(2.1)),
+          ),
+          Expanded(
+              child: Column(
+            crossAxisAlignment: CrossAxisAlignment.start,
+            children: [
+              Text(detail.courseName,
+                  maxLines: 1, overflow: TextOverflow.ellipsis),
+              Text(
+                detail.actName,
+                maxLines: 1,
+                overflow: TextOverflow.ellipsis,
+              ),
+            ],
+          )),
+          const SizedBox(width: 12),
+          Text(detail.isComplete ? '完赛' : '未完赛')
+        ],
+      ),
+    );
   }
-
 }

+ 31 - 18
lib/view/home/data_detail/data_detail_controller.dart

@@ -1,26 +1,33 @@
 import 'package:application/logger.dart';
 import 'package:application/service/api.dart';
 import 'package:application/service/map_watch.dart';
+import 'package:fixnum/fixnum.dart';
 import 'package:get/get.dart';
 import '../home_controller.dart';
 export 'package:application/service/map_watch.dart';
 
-
-class UserInfo{
+class UserInfo {
   var data = ToHisUserBasic();
   final isExpand = false.obs;
 }
+
 typedef DetailSimple = ToHisUserInfo;
 
+class Detail {
+  var data = ToGameDetailReply();
+}
 
-class DataDetailController extends GetxController{
+class DataDetailController extends GetxController {
   HomeController get _home => Get.find();
   MapWatchService? get mapWatch => MapWatchService.instance;
   final userMap = <int, UserInfo>{}.obs;
   Iterable<UserInfo> get userList => userMap.values;
-  final selectedDetail = DetailSimple().obs;
+  final selectedDetailSimple = DetailSimple().obs;
   final selectedUserId = (-9).obs;
-
+  final Rx<Detail?> selectedDetail = Rx(null);
+  final stub = ApiService.to.stub;
+  final showDetail = false.obs;
+  
   @override
   void onInit() {
     super.onInit();
@@ -28,31 +35,37 @@ class DataDetailController extends GetxController{
     workFlush();
   }
 
-  Future<void> workFlush()async{
-    while(!isClosed){
+  Future<void> workFlush() async {
+    while (!isClosed) {
       await flushData();
       await 1.seconds.delay();
     }
   }
 
-  Future<void> flushData()async {
+  Future<void> flushData() async {
     final map = mapWatch;
-    if(map==null){
+    if (map == null) {
       return;
     }
 
     try {
-       final r = await ApiService.to.stub.toHistoryUserListQuery(IdRequest(id: map.id));
-       for(final one in r.list){
-         final updated = userMap[one.oId]?? UserInfo();
-         updated.data = one;
-         userMap[one.oId] = updated;
-       }
-
+      final r = await ApiService.to.stub
+          .toHistoryUserListQuery(IdRequest(id: map.id));
+      for (final one in r.list) {
+        final updated = userMap[one.oId] ?? UserInfo();
+        updated.data = one;
+        userMap[one.oId] = updated;
+      }
     } catch (e) {
       error(e);
     }
   }
 
-
-}
+  void selectDetail(DetailSimple d, UserInfo user) async {
+    selectedDetailSimple.value = d;
+    selectedUserId.value = user.data.oId;
+    selectedDetail.value = Detail()
+      ..data = await ApiService.to.stub
+          .toHistoryGameDetail(IdRequest(id: Int64(d.gameId)));
+  }
+}

+ 14 - 0
lib/view/home/data_detail/data_detail_cp.dart

@@ -0,0 +1,14 @@
+import 'package:common_pub/model/control_point.dart';
+import 'package:flutter/material.dart';
+
+class DataDetailCP extends StatelessWidget {
+  final List<ControlPoint> cpList;
+
+  const DataDetailCP({super.key, required this.cpList});
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      width: double.infinity,
+    );
+  }
+}

+ 1 - 1
protos/app_api

@@ -1 +1 @@
-Subproject commit bb45cb458b79659cd333cfa5e3c658da46fa73ec
+Subproject commit e54658dccf2669149dcde21f692867aa8961aafb

+ 1 - 1
pubspec.lock

@@ -678,4 +678,4 @@ packages:
     version: "3.1.2"
 sdks:
   dart: ">=3.1.0 <4.0.0"
-  flutter: ">=3.3.0"
+  flutter: ">=3.13.0"

+ 5 - 0
pubspec.yaml

@@ -106,3 +106,8 @@ flutter:
   assets:
     - assets/images/
 
+flutter_assets:
+  assets_path: assets/
+  output_path: lib/generated/
+  filename: assets.dart
+  field_prefix: