d3b6026bfd
- Filled empty libs/hbb_common/ submodule (cloned from rustdesk/hbb_common) - Patched Flutter 3.44 / Dart 3.12 compatibility: * flutter/lib/generated_bridge.dart: asTypedList with cast<>, DartPort=Int64 * flutter/lib/common.dart: DialogTheme->DialogThemeData, TabBarTheme->TabBarThemeData * flutter/pubspec.yaml: extended_text 14.0.0->15.0.2, google_fonts override 5.0.0 * flutter/macos/Runner/Configs/Release.xcconfig: EXCLUDED_ARCHS=x86_64 - Build verified: cargo check + cargo build --features flutter + cargo build --release --features flutter - Verified flutter build macos --debug and --release both produce working .app - Verified .dmg installer (27MB arm64) created via hdiutil - Build deps: Xcode 26.5, CocoaPods 1.16.2, Flutter 3.44, VCPKG arm64-osx
72 lines
2.2 KiB
Dart
72 lines
2.2 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_hbb/models/model.dart';
|
|
import 'package:flutter_hbb/common.dart';
|
|
import 'package:flutter_hbb/common/widgets/custom_scale_base.dart';
|
|
|
|
class MobileCustomScaleControls extends StatefulWidget {
|
|
final FFI ffi;
|
|
final ValueChanged<int>? onChanged;
|
|
const MobileCustomScaleControls({super.key, required this.ffi, this.onChanged});
|
|
|
|
@override
|
|
State<MobileCustomScaleControls> createState() => _MobileCustomScaleControlsState();
|
|
}
|
|
|
|
class _MobileCustomScaleControlsState extends CustomScaleControls<MobileCustomScaleControls> {
|
|
@override
|
|
FFI get ffi => widget.ffi;
|
|
|
|
@override
|
|
ValueChanged<int>? get onScaleChanged => widget.onChanged;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
// Smaller button size for mobile
|
|
const smallBtnConstraints = BoxConstraints(minWidth: 32, minHeight: 32);
|
|
|
|
final sliderControl = Slider(
|
|
value: scalePos,
|
|
min: 0.0,
|
|
max: 1.0,
|
|
divisions: (CustomScaleControls.maxPercent - CustomScaleControls.minPercent).round(),
|
|
label: '$scaleValue%',
|
|
onChanged: onSliderChanged,
|
|
);
|
|
|
|
return Padding(
|
|
padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 8.0),
|
|
child: Column(
|
|
mainAxisSize: MainAxisSize.min,
|
|
children: [
|
|
Text(
|
|
'${translate("Scale custom")}: $scaleValue%',
|
|
style: const TextStyle(fontSize: 14, fontWeight: FontWeight.w500),
|
|
),
|
|
const SizedBox(height: 8),
|
|
Row(
|
|
children: [
|
|
IconButton(
|
|
iconSize: 20,
|
|
padding: const EdgeInsets.all(4),
|
|
constraints: smallBtnConstraints,
|
|
icon: const Icon(Icons.remove),
|
|
tooltip: translate('Decrease'),
|
|
onPressed: () => nudgeScale(-1),
|
|
),
|
|
Expanded(child: sliderControl),
|
|
IconButton(
|
|
iconSize: 20,
|
|
padding: const EdgeInsets.all(4),
|
|
constraints: smallBtnConstraints,
|
|
icon: const Icon(Icons.add),
|
|
tooltip: translate('Increase'),
|
|
onPressed: () => nudgeScale(1),
|
|
),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|