周睿 2 лет назад
Родитель
Сommit
ecb4d63b3c

+ 0 - 3
lib/model/game_map.dart

@@ -1,3 +0,0 @@
-class GameMap {
-
-}

+ 48 - 0
lib/service/api.dart

@@ -1,3 +1,7 @@
+import 'dart:async';
+import 'dart:typed_data';
+
+import 'package:common_pub/model/game_map.dart';
 import 'package:get/get.dart';
 import 'package:grpc/grpc.dart';
 import '../logger.dart';
@@ -121,5 +125,49 @@ class ApiService extends GetxService{
     info('getSmsSendLeftTime: $phone - ${r.second}s');
     return r.second.seconds;
   }
+  Future<BinReader> getBinReaderByMd5(Uint8List md5) async {
+    final stream = stub.toGetBinaryByMd5(pb.ToGetBinaryByMd5Request()..md5=md5);
+    final controller = StreamController<List<int>>();
+    controller.onCancel = (){
+      stream.cancel();
+    };
+
+    Future<void> rcv()async{
+      try{
+        await for(final one in stream){
+          controller.add(one.data);
+        }
+      }finally{
+        controller.close();
+        stream.cancel();
+      }
+    }
+    rcv();
+    stream.headers.then((value) => debug(value));
+    final headers = await stream.headers;
+    final lenStr = headers['all-length']!;
+    final length = int.parse(lenStr);
+    final nonce = headers['nonce']!;
+    final ext = headers['ext']!;
+
+    return BinReader(
+        data: controller.stream,
+        length: length,
+        ext: ext,
+        nonce: nonce
+    );
+  }
+
+}
+
 
+extension NetImageExt on pb.NetImage{
+  GameMap toGameMap(){
+    final md5Data = Uint8List.fromList(md5);
+
+    return GameMap()
+      ..url = url
+      ..md5 = md5Data
+      ..readerBuilder = ()=> ApiService.to.getBinReaderByMd5(md5Data);
+  }
 }

+ 8 - 3
lib/service/map_watch.dart

@@ -1,10 +1,11 @@
-import 'package:common_pub/service/service.dart';
+import 'package:common_pub/service/controller.dart';
+import 'package:common_pub/ui/map_view/map_view.dart';
 import '../service/api.dart';
 import 'package:fixnum/fixnum.dart';
 
 typedef MapId = Int64;
 
-class MapWatchService extends PlugService{
+class MapWatchService extends PlugController{
   static final Rx<MapWatchService?> _instance = Rx(null);
   static MapWatchService? get instance => _instance.value;
 
@@ -14,7 +15,10 @@ class MapWatchService extends PlugService{
 
     final thisInstance = MapWatchService(
         id: id)
-      ..name = info.mapName;
+      ..name = info.mapName
+      ..plugMap.gameMap = info.zipImage.toGameMap() ;
+
+    thisInstance.addPlugs([thisInstance.plugMap]);
 
     _instance.value = thisInstance;
     thisInstance.init();
@@ -24,4 +28,5 @@ class MapWatchService extends PlugService{
 
   final MapId id;
   String name= '';
+  final plugMap = PlugMap();
 }

+ 0 - 29
lib/utils.dart

@@ -87,35 +87,6 @@ extension NetImageExt on NetImage{
 
 }
 
-
-extension Uint8ListExtension on Uint8List {
-  String toHexString({String separator = ''}) {
-    return isEmpty
-        ? ""
-        : map((e) {
-      var s = e.toRadixString(16).toUpperCase();
-      if (e < 10) {
-        s = '0$s';
-      }
-      return s;
-    }).join(separator);
-  }
-}
-extension IntListExtension on List<int> {
-  String toHexString({String separator = ''}) {
-    return isEmpty
-        ? ""
-        : map((e) {
-      var s = e.toRadixString(16).toUpperCase();
-      if (e < 10) {
-        s = '0$s';
-      }
-      return s;
-    }).join(separator);
-  }
-}
-
-
 void runPreview(Widget child){
   runApp(GetMaterialApp(
       theme: ThemeData(useMaterial3: true, colorScheme: lightColorScheme),

+ 10 - 2
lib/view/home/data_detail/data_detail.dart

@@ -1,4 +1,8 @@
 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 'data_detail_controller.dart';
 
 
@@ -37,7 +41,11 @@ class DataDetailPage extends StatelessWidget{
     );
   }
 
-  Widget content(BuildContext context, MapWatchService gameMap){
-    return Container();
+  Widget content(BuildContext context, MapWatchService map){
+    return ViewMapStack(plug: map.plugMap, children: [
+      ViewPlugLoading(map.plugMap),
+      ViewMapImage(map.plugMap),
+      ViewMapTouch(map.plugMap)
+    ]);
   }
 }

+ 0 - 2
lib/view/home/home_controller.dart

@@ -1,6 +1,4 @@
 import 'package:get/get.dart';
-import '../../model/game_map.dart';
-export '../../model/game_map.dart';
 
 class HomeController extends GetxController{
 

+ 17 - 1
pubspec.lock

@@ -33,6 +33,14 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.1.1"
+  bubble:
+    dependency: transitive
+    description:
+      name: bubble
+      sha256: "65b992b8f8ba2e7e2871190cbdfaa0818b6de2f340bef37cb5ee1b61debe0226"
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.2.1"
   build_cli_annotations:
     dependency: transitive
     description:
@@ -129,7 +137,7 @@ packages:
     source: hosted
     version: "2.1.0"
   fixnum:
-    dependency: transitive
+    dependency: "direct main"
     description:
       name: fixnum
       sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1"
@@ -532,6 +540,14 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "0.6.0"
+  transparent_pointer:
+    dependency: transitive
+    description:
+      name: transparent_pointer
+      sha256: "27f5a7a63e517b6a56962bd473bbfcdcacce13fc996a264d6665da9a24650eb9"
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.0.0"
   tuple:
     dependency: transitive
     description:

+ 1 - 0
pubspec.yaml

@@ -48,6 +48,7 @@ dependencies:
   system_clock: ^2.0.0
   f_cache: ^3.1.1
   http: ^1.1.0
+  fixnum: any
 
 
 dev_dependencies:

+ 1 - 1
third_party/common_pub

@@ -1 +1 @@
-Subproject commit 97389f7507892dd78ff50f981a65c9fd0d2aadc8
+Subproject commit 8a57ff30188327efba31dc87325aaa9d719990f5