Selaa lähdekoodia

单选框完善,适配Json模板

loki.wu 2 vuotta sitten
vanhempi
commit
f6676dd850

+ 1 - 1
lib/converts/alignment_convert.dart

@@ -41,7 +41,7 @@ class AlignmentConvert {
     } else {
       switch (value) {
         case HorizontalLayout.Left:
-          return MainAxisAlignment.start;
+          return MainAxisAlignment.spaceAround;
         case HorizontalLayout.Center:
           return MainAxisAlignment.center;
         case HorizontalLayout.Right:

+ 129 - 0
lib/pages/components/single_select.dart

@@ -0,0 +1,129 @@
+import 'package:fis_lib_report/converts/pt_to_px_converter.dart';
+import 'package:fis_lib_report/report/singleSelected.dart';
+import 'package:flutter/material.dart';
+import 'package:dropdown_button2/dropdown_button2.dart';
+import 'package:fis_ui/simple/select.dart';
+
+class RSingleSelected extends StatefulWidget {
+  SingleSelected singleSelected;
+  RSingleSelected(this.singleSelected);
+  @override
+  State<StatefulWidget> createState() {
+    return _RSingleSelectState(singleSelected);
+  }
+}
+
+class _RSingleSelectState extends State<RSingleSelected> {
+  SingleSelected singleSelected;
+  _RSingleSelectState(this.singleSelected);
+  String _value = '';
+  List<String>? _items = [];
+
+  @override
+  initState() {
+    if (singleSelected.items!.isNotEmpty) {
+      _items = singleSelected.items;
+    }
+    super.initState();
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    if (_items!.isEmpty) {
+      return const SizedBox();
+    }
+    var buttonDecoration = BoxDecoration(
+      border: Border.all(color: Colors.grey, width: 0.8),
+      // border: Border.all(color: Colors.grey[200]!, width: 0.5),
+      borderRadius: BorderRadius.circular(0),
+      color: Colors.white,
+    );
+    return SizedBox(
+      height: 28,
+      child: DropdownButtonHideUnderline(
+        child: DropdownButton2<String>(
+          dropdownMaxHeight: 280,
+          buttonWidth: PtToPxConverter.ptToPx(singleSelected.lineWidth),
+          buttonHeight: 28,
+          itemHeight: 28,
+          itemPadding: const EdgeInsets.symmetric(horizontal: 4, vertical: 2),
+          isExpanded: false,
+          dropdownOverButton: false,
+          scrollbarAlwaysShow: true,
+          scrollbarThickness: 4,
+          scrollbarRadius: const Radius.circular(2),
+          buttonPadding: const EdgeInsets.symmetric(horizontal: 4, vertical: 2),
+          dropdownDecoration: BoxDecoration(
+            borderRadius: BorderRadius.circular(4),
+          ),
+          buttonDecoration: buttonDecoration,
+          offset: const Offset(0, -4),
+          selectedItemHighlightColor: Theme.of(context).secondaryHeaderColor,
+          selectedItemBuilder: (_) => _items!
+              .map((e) => _OptionRow(
+                    singleSelected,
+                    e,
+                    height: 22,
+                  ))
+              .toList(),
+          value: _value.isEmpty ? null : _value,
+          items: buildItems(),
+          onChanged: (v) {
+            setState(() {
+              _value = v!;
+            });
+          },
+        ),
+      ),
+    );
+  }
+
+  List<DropdownMenuItem<String>> buildItems() {
+    return _items!.map((String e) {
+      final active = e == _value;
+      return DropdownMenuItem<String>(
+        child: _OptionRow(singleSelected, e, isActive: active),
+        value: e,
+      );
+    }).toList();
+  }
+}
+
+class _OptionRow extends StatelessWidget {
+  _OptionRow(
+    this.singleSelected,
+    this.label, {
+    Key? key,
+    this.isActive = false,
+    this.height,
+  }) : super(key: key);
+
+  SingleSelected singleSelected;
+  final String label;
+  final bool isActive;
+  final double? height;
+
+  @override
+  Widget build(BuildContext context) {
+    final color = singleSelected.fontColor!;
+    final background = singleSelected.background!;
+    final text = Text(
+      label,
+      style: TextStyle(
+        backgroundColor: Color.fromARGB(
+            background.a!, background.r!, background.g!, background.b!),
+        fontSize: PtToPxConverter.ptToPx(singleSelected.fontSize),
+        color: Color.fromARGB(color.a!, color.r!, color.g!, color.b!),
+      ),
+    );
+    if (height != null) {
+      return Container(
+        alignment: Alignment.centerLeft,
+        height: height,
+        child: text,
+      );
+    } else {
+      return text;
+    }
+  }
+}

+ 2 - 18
lib/pages/paragraph_page.dart

@@ -3,6 +3,7 @@ import 'package:fis_lib_report/pages/components/RDateTime.dart';
 import 'package:fis_lib_report/pages/components/input_text.dart';
 import 'package:fis_lib_report/pages/components/line.dart';
 import 'package:fis_lib_report/pages/components/multi_select.dart';
+import 'package:fis_lib_report/pages/components/single_select.dart';
 import 'package:fis_lib_report/pages/components/static_Text.dart';
 import 'package:fis_lib_report/report/dateTimeElement.dart';
 import 'package:fis_lib_report/report/element_type.dart';
@@ -73,24 +74,7 @@ class _ParagraphState extends State<ParagraphPage> {
             } else if (element.elementType!.name ==
                 ElementType.singleSelected!.name) {
               SingleSelected singleSelected = element as SingleSelected;
-
-              List<String>? values = singleSelected.items;
-
-              if (values != null && values.isNotEmpty) {
-                return SizedBox(
-                  width: 104,
-                  height: 28,
-                  child: DropdownButton(
-                    onChanged: (Object? value) {},
-                    items: values.map<DropdownMenuItem<String>>((String value) {
-                      return DropdownMenuItem<String>(
-                        value: value,
-                        child: Text(value),
-                      );
-                    }).toList(),
-                  ),
-                );
-              }
+              return RSingleSelected(singleSelected);
             } else if (element.elementType!.name == ElementType.line!.name) {
               Line line = element as Line;
               return RLine(line);

+ 217 - 0
pubspec.lock

@@ -1,6 +1,13 @@
 # Generated by pub
 # See https://dart.dev/tools/pub/glossary#lockfile
 packages:
+  archive:
+    dependency: transitive
+    description:
+      name: archive
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "3.3.0"
   async:
     dependency: transitive
     description:
@@ -57,6 +64,13 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "1.0.5"
+  custom_pop_up_menu:
+    dependency: transitive
+    description:
+      name: custom_pop_up_menu
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.2.2"
   dio:
     dependency: "direct main"
     description:
@@ -64,6 +78,13 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "4.0.6"
+  dropdown_button2:
+    dependency: transitive
+    description:
+      name: dropdown_button2
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.2.2"
   fake_async:
     dependency: transitive
     description:
@@ -71,11 +92,82 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "1.2.0"
+  ffi:
+    dependency: transitive
+    description:
+      name: ffi
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.2.1"
+  file:
+    dependency: transitive
+    description:
+      name: file
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "6.1.2"
+  fis_common:
+    dependency: transitive
+    description:
+      path: "."
+      ref: "^1.0.0"
+      resolved-ref: "5414cdaf5f6747dec9a093e3b2579965efb2e83a"
+      url: "http://git.ius.plus:88/Project-Wing/fis_lib_common.git"
+    source: git
+    version: "0.0.2"
+  fis_jsonrpc:
+    dependency: transitive
+    description:
+      path: "."
+      ref: "^1.0.0"
+      resolved-ref: eaf6fe995b5499a05c7b192f1f37632a965ec54f
+      url: "http://git.ius.plus:88/Project-Wing/fis_lib_jsonrpc.git"
+    source: git
+    version: "0.0.1"
+  fis_theme:
+    dependency: "direct overridden"
+    description:
+      path: "."
+      ref: "6991f8ef7f"
+      resolved-ref: "6991f8ef7f0e86a525f7cc70193f3eb97e85d824"
+      url: "http://git.ius.plus:88/Project-Wing/fis_lib_theme.git"
+    source: git
+    version: "0.0.1"
+  fis_ui:
+    dependency: "direct overridden"
+    description:
+      path: "."
+      ref: f574c3bfee
+      resolved-ref: f574c3bfee3a5f6190dfa0ea5a50316fde8e1190
+      url: "http://git.ius.plus:88/Project-Wing/fis_lib_ui.git"
+    source: git
+    version: "0.0.1"
   flutter:
     dependency: "direct main"
     description: flutter
     source: sdk
     version: "0.0.0"
+  flutter_keyboard_visibility:
+    dependency: transitive
+    description:
+      name: flutter_keyboard_visibility
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "5.3.0"
+  flutter_keyboard_visibility_platform_interface:
+    dependency: transitive
+    description:
+      name: flutter_keyboard_visibility_platform_interface
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.0.0"
+  flutter_keyboard_visibility_web:
+    dependency: transitive
+    description:
+      name: flutter_keyboard_visibility_web
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.0.0"
   flutter_lints:
     dependency: "direct dev"
     description:
@@ -88,6 +180,25 @@ packages:
     description: flutter
     source: sdk
     version: "0.0.0"
+  flutter_typeahead:
+    dependency: transitive
+    description:
+      name: flutter_typeahead
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "3.2.4"
+  flutter_web_plugins:
+    dependency: transitive
+    description: flutter
+    source: sdk
+    version: "0.0.0"
+  http:
+    dependency: transitive
+    description:
+      name: http
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "0.13.4"
   http_parser:
     dependency: transitive
     description:
@@ -95,6 +206,20 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "4.0.1"
+  intl:
+    dependency: transitive
+    description:
+      name: intl
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "0.17.0"
+  js:
+    dependency: transitive
+    description:
+      name: js
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "0.6.3"
   lints:
     dependency: transitive
     description:
@@ -130,6 +255,76 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "1.8.0"
+  path_provider:
+    dependency: transitive
+    description:
+      name: path_provider
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.0.11"
+  path_provider_android:
+    dependency: transitive
+    description:
+      name: path_provider_android
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.0.14"
+  path_provider_ios:
+    dependency: transitive
+    description:
+      name: path_provider_ios
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.0.9"
+  path_provider_linux:
+    dependency: transitive
+    description:
+      name: path_provider_linux
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.1.7"
+  path_provider_macos:
+    dependency: transitive
+    description:
+      name: path_provider_macos
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.0.6"
+  path_provider_platform_interface:
+    dependency: transitive
+    description:
+      name: path_provider_platform_interface
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.0.4"
+  path_provider_windows:
+    dependency: transitive
+    description:
+      name: path_provider_windows
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.0.7"
+  platform:
+    dependency: transitive
+    description:
+      name: platform
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "3.1.0"
+  plugin_platform_interface:
+    dependency: transitive
+    description:
+      name: plugin_platform_interface
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.1.2"
+  process:
+    dependency: transitive
+    description:
+      name: process
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "4.2.4"
   sky_engine:
     dependency: transitive
     description: flutter
@@ -163,6 +358,13 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "1.1.0"
+  synchronized:
+    dependency: transitive
+    description:
+      name: synchronized
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "3.0.0+2"
   term_glyph:
     dependency: transitive
     description:
@@ -198,5 +400,20 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.1.1"
+  win32:
+    dependency: transitive
+    description:
+      name: win32
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.5.2"
+  xdg_directories:
+    dependency: transitive
+    description:
+      name: xdg_directories
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "0.2.0+1"
 sdks:
   dart: ">=2.16.1 <3.0.0"
+  flutter: ">=2.8.1"

+ 10 - 0
pubspec.yaml

@@ -37,6 +37,16 @@ dependencies:
   # Use with the CupertinoIcons class for iOS style icons.
   cupertino_icons: ^1.0.2
 
+dependency_overrides:
+  fis_theme:
+    git:
+      url: http://git.ius.plus:88/Project-Wing/fis_lib_theme.git
+      ref: 6991f8ef7f
+  fis_ui:
+    git:
+      url: http://git.ius.plus:88/Project-Wing/fis_lib_ui.git
+      ref: f574c3bfee
+
 dev_dependencies:
   flutter_test:
     sdk: flutter