屏幕旋转

main
hs 2025-08-21 10:53:10 +08:00
parent 4727e01e89
commit 3b95b8b58d
3 changed files with 78 additions and 7 deletions

View File

@ -1,13 +1,77 @@
import Flutter
import UIKit
import Flutter
@main
@objc class AppDelegate: FlutterAppDelegate {
//
static var orientationMask: UIInterfaceOrientationMask = .portrait
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
let controller = window?.rootViewController as! FlutterViewController
let channel = FlutterMethodChannel(name: "app.orientation",
binaryMessenger: controller.binaryMessenger)
channel.setMethodCallHandler { [weak self] call, result in
guard let self = self else { return }
if call.method == "setOrientation" {
guard let arg = call.arguments as? String else {
result(FlutterError(code: "BAD_ARGS", message: "need 'landscape' | 'portrait'", details: nil))
return
}
//
if arg == "landscape" {
AppDelegate.orientationMask = .landscape
} else if arg == "portrait" {
AppDelegate.orientationMask = .portrait
} else {
result(FlutterError(code: "BAD_ARGS", message: "unknown arg", details: nil))
return
}
//
if #available(iOS 16.0, *) {
// VC supportedInterfaceOrientations
self.window?.rootViewController?.setNeedsUpdateOfSupportedInterfaceOrientations()
if let scene = self.window?.windowScene {
let orientations: UIInterfaceOrientationMask =
(arg == "landscape") ? .landscape : .portrait
do {
try scene.requestGeometryUpdate(.iOS(interfaceOrientations: orientations))
} catch {
result(FlutterError(code: "GEOMETRY_UPDATE_FAILED",
message: error.localizedDescription, details: nil))
return
}
}
} else {
let target: UIInterfaceOrientation =
(arg == "landscape") ? .landscapeLeft : .portrait
UIDevice.current.setValue(target.rawValue, forKey: "orientation")
UIViewController.attemptRotationToDeviceOrientation()
}
result(true)
} else {
result(FlutterMethodNotImplemented)
}
}
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
//
override func application(_ application: UIApplication,
supportedInterfaceOrientationsFor window: UIWindow?)
-> UIInterfaceOrientationMask {
return AppDelegate.orientationMask
}
}

View File

@ -86,17 +86,13 @@ class HttpManager {
}) async {
Response resp;
final url = baseUrl + path;
final options = Options(
method: method.name.toUpperCase(),
contentType: headerType,
);
try {
switch (method) {
case Method.get:
final queryParameters = <String, dynamic>{};
if (params != null) queryParameters.addAll(params);
if (data != null) queryParameters.addAll(data);
if (params != null && params.isNotEmpty) queryParameters.addAll(params);
if (data != null && data.isNotEmpty) queryParameters.addAll(data);
resp = await _dio.get(
url,
queryParameters: queryParameters,

View File

@ -1,5 +1,6 @@
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
@ -396,4 +397,14 @@ class NoDataWidget {
);
}
}
class NativeOrientation {
static const MethodChannel _channel = MethodChannel('app.orientation');
static Future<void> setLandscape() async {
await _channel.invokeMethod('setOrientation', 'landscape');
}
static Future<void> setPortrait() async {
await _channel.invokeMethod('setOrientation', 'portrait');
}
}