Flutter方向限制插件limiting_direction_csx的使用
Flutter方向限制插件limiting_direction_csx的使用
iOS项目横屏使用配置
一. 调整主项目的info.plist文件添加
<key>UIRequiresFullScreen</key>
<true/>
(即Xcode打开iOS项目,勾选中Targets->General->Deployment Info->Requires full screen(前面选中打勾☑️)) (这个配置主要针对pad的适配,需要添加,单纯的手机应用开发,这个配置可以不用勾选就可以实现其效果)
二 两种方式使用方式不一样,请对号入座!
1. 纯flutter项目: 主项目的Main.storyboard的控制器类型class从FlutterViewController调整为MainViewController
2. module形式接入主项目: 原生在跳转flutter页面的地方将承载flutter的FlutterViewController替换成MainViewController,并注册当前flutter的桥接到原生项目中
详细介绍module的使用为什么这样,看一查看我的博客:原生混合开发flutter Unhandled Exception…
使用代码介绍
void main() async {
WidgetsFlutterBinding.ensureInitialized();
if (Platform.isIOS) {
// 设置启动即强制横屏
await LimitingDirectionCsx.setScreenDirection(DeviceDirectionMask.Landscape);
} else {
await SystemChrome.setPreferredOrientations(
[DeviceOrientation.landscapeLeft, DeviceOrientation.landscapeRight]);
}
runApp(MyApp());
}
// 或者在需要的地方调用
if (Platform.isIOS) {
await LimitingDirectionCsx.setScreenDirection(DeviceDirectionMask.Landscape);
}
// 来设置枚举类型,选择自己想要的可支持方位
设备陀螺仪读取(这个无需配置)
// 直接读取当前陀螺仪方位(直接读取不建议使用在项目刚启动的地方):
LimitingDirectionCsx().currentDeviceOrientation
// 流的方式监听陀螺仪:LimitingDirectionCsx().getDeviceDirectionStream()
StreamBuilder<UIDeviceOrientation>(
stream: LimitingDirectionCsx().getDeviceDirectionStream(),
builder: (context, AsyncSnapshot snapshot) {
return Text('结果:${snapshot.data}');
},
)
// future的方式主动一次性获取陀螺仪转向
LimitingDirectionCsx().getNowDeviceDirection();
完整示例Demo
以下是完整的示例代码:
/*
* [@Author](/user/Author): Cao Shixin
* [@Date](/user/Date): 2020-12-28 15:12:15
* [@LastEditors](/user/LastEditors): Cao Shixin
* [@LastEditTime](/user/LastEditTime): 2021-01-14 13:44:10
* [@Description](/user/Description):
*/
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:limiting_direction_csx/limiting_direction_csx.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
if (Platform.isIOS) {
await LimitingDirectionCsx.setScreenDirection(DeviceDirectionMask.Landscape);
} else {
await SystemChrome.setPreferredOrientations(
[DeviceOrientation.landscapeLeft, DeviceOrientation.landscapeRight]);
}
runApp(MyApp());
}
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
Widget build(BuildContext context) {
print('>>${LimitingDirectionCsx().currentDeviceOrientation}');
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Plugin example app'),
),
body: StreamBuilder<UIDeviceOrientation>(
stream: LimitingDirectionCsx().getDeviceDirectionStream(),
builder: (context, AsyncSnapshot snapshot) {
return Text('结果:${snapshot.data}');
},
),
),
);
}
}
更多关于Flutter方向限制插件limiting_direction_csx的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter方向限制插件limiting_direction_csx的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,我可以为你提供一个关于如何在Flutter中使用limiting_direction_csx
插件的代码示例。这个插件通常用于限制用户在特定方向上滚动或拖动。
首先,你需要在你的pubspec.yaml
文件中添加这个插件的依赖:
dependencies:
flutter:
sdk: flutter
limiting_direction_csx: ^最新版本号 # 请替换为插件的最新版本号
然后运行flutter pub get
来获取依赖。
接下来,你可以在你的Flutter应用中使用这个插件。以下是一个简单的示例,展示了如何限制用户在水平方向上滚动:
import 'package:flutter/material.dart';
import 'package:limiting_direction_csx/limiting_direction_csx.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Limiting Direction Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Text('Limiting Direction Demo'),
),
body: Center(
child: LimitedDirectionListView(
direction: Axis.horizontal, // 限制滚动方向为水平
child: ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: 20,
itemBuilder: (context, index) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
color: Colors.primaries[index % Colors.primaries.length],
width: 100,
height: 100,
child: Center(
child: Text('Item $index'),
),
),
);
},
),
),
),
),
);
}
}
class LimitedDirectionListView extends StatelessWidget {
final Axis direction;
final Widget child;
const LimitedDirectionListView({Key? key, required this.direction, required this.child}) : super(key: key);
@override
Widget build(BuildContext context) {
return GestureDetector(
onPanUpdate: (details) {
// 根据方向限制拖动
if (direction == Axis.horizontal) {
// 阻止垂直方向上的拖动
if (details.delta.dy.abs() > details.delta.dx.abs()) {
return; // 忽略垂直拖动
}
} else if (direction == Axis.vertical) {
// 阻止水平方向上的拖动
if (details.delta.dx.abs() > details.delta.dy.abs()) {
return; // 忽略水平拖动
}
}
},
child: child,
);
}
}
注意:
-
上面的
LimitedDirectionListView
是一个自定义的Widget,用于演示如何根据指定的方向限制拖动。然而,limiting_direction_csx
插件可能有更高级和简便的方法来实现这一功能。由于我无法直接访问插件的具体实现,这里的代码仅作为一个概念验证。 -
在实际使用中,你应该查阅
limiting_direction_csx
插件的官方文档,以获取更详细和精确的使用方法。 -
如果
limiting_direction_csx
插件提供了内置的Widget或更简便的方法,请按照其文档进行使用。 -
上面的代码示例中,
LimitedDirectionListView
并没有直接使用limiting_direction_csx
插件,而是手动实现了方向限制的逻辑。这主要是为了展示如何限制方向的基本概念。在实际应用中,你应该使用插件提供的功能。