Flutter Programmatic Programmatic Programmatic IPAD сбой, когда «требует полного экрана».IOS

Программируем под IOS
Ответить
Anonymous
 Flutter Programmatic Programmatic Programmatic IPAD сбой, когда «требует полного экрана».

Сообщение Anonymous »

Я работаю над приложением Flutter, нацеленного на iOS, в частности, занимаясь ориентацией устройства на iPad. Я столкнулся с общей проблемой, в которой изменение программной ориентации (с использованием SystemChrome.SetPreferredorations) не работают надежно на iPad, когда опция «Требуется полный экран» отключена в целевых настройках Xcode. iPhone, однако, кажутся не зависящими от этой настройки для изменений ориентации. < /p>
Моя текущая цель состоит в том, чтобы позволить пользователю вручную изменить ориентацию приложения на ландшафт, нажав кнопку, не делая режим ландшафта обязательным при запуске или по всей стране. < /p>
контекст проекта: < /prong> < /putmer. XCODE
Целевые устройства: iPad (различные модели), iPhone (различные модели)
Управление ориентацией: использование SystemChrome.SetPreferredorations в Flutter. Этот код должен быть размещен в Statefulwidget. < /P>
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() {
// Ensure Flutter is initialized before setting preferred orientations
WidgetsFlutterBinding.ensureInitialized();
// Set initial orientation if needed, e.g., portrait
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);

runApp(const MyApp());
}

class MyApp extends StatelessWidget {
const MyApp({super.key});

@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Orientation Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const OrientationPage(),
);
}
}

class OrientationPage extends StatefulWidget {
const OrientationPage({super.key});

@override
State createState() => _OrientationPageState();
}

class _OrientationPageState extends State {
@override
Widget build(BuildContext context) {
// Determine current orientation for display purposes
final mediaQuery = MediaQuery.of(context);
final isLandscape = mediaQuery.orientation == Orientation.landscape;

return Scaffold(
appBar: AppBar(
title: const Text('Flutter Orientation Control'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'Current Orientation: ${isLandscape ? 'Landscape' : 'Portrait'}',
style: const TextStyle(fontSize: 18),
),
const SizedBox(height: 30),
ElevatedButton(
onPressed: () async {
try {
// Request landscape orientation
await SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeLeft,
DeviceOrientation.landscapeRight,
]);
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Attempting to set Landscape Mode')),
);
// Force a rebuild to reflect orientation change if UI depends on it
setState(() {});
} catch (e) {
// Log or display error if orientation change fails
print("Error setting orientation: $e");
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Failed to set Landscape Mode: $e')),
);
}
},
child: const Text('Set Orientation to Landscape'),
),
const SizedBox(height: 10),
// Optional: Button to revert to portrait
ElevatedButton(
onPressed: () async {
try {
// Request portrait orientation
await SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Attempting to set Portrait Mode')),
);
// Force a rebuild to reflect orientation change if UI depends on it
setState(() {});
} catch (e) {
// Log or display error if orientation change fails
print("Error setting orientation: $e");
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Failed to set Portrait Mode: $e')),
);
}
},
child: const Text('Set Orientation to Portrait'),
),
],
),
),
);
}
}
< /code>
наблюдаемое поведение: < /strong> < /p>

»требуется полный экран" (настройки целевого кода -> Общий): < /li>
< /ol>
iPad: Программная ориентация изменений (E.G., для Landscape). Ожидается. < /p>

"требуется полный экран" отключен (настройки цели Xcode -> Общие): < /li>
< /ol>
iPad: изменение программной ориентации. Приложение остается в своей текущей ориентации, независимо от вызовов SystemChrome.SetPreferreDorientations.
iPhone: Изменения программной ориентации продолжают работать, как и ожидалось. Славки, сценический менеджер) не так, как iOS на iPhone. Когда «Требуется полноэкранный» отключен, iPados может расставить приоритеты в стабильности и поведении этих многозадачных функций над прямым контролем отдельного приложения над его ориентацией. Это может включать ограничения на уровне системы, которые не позволяют приложениям одностороннее изменение их ориентации, когда они не находятся в истинном полноэкранном, выделенном состоянии. /> Существуют ли какие-либо известные ограничения или конкретные конфигурации, требуемые в Info.plist или настройках проекта xcode, чтобы внести программную ориентацию, надежно работать на iPad в неполноценных сценариях? Управление?>

Подробнее здесь: https://stackoverflow.com/questions/797 ... l-screen-o
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»