尝试用谷歌搜索会产生数千篇不相关的文章,例如设置或锁定特定方向。
我的问题是,虽然手机的方向被锁定为纵向模式,但屏幕转向侧面,有没有办法检测到这种转变并调整屏幕上的小部件作为响应?
就像是
if (MediaQuery.of(context).orientation == Orientation.portrait) {
return Text('text', style: TextStyle(fontSize: 200));
} else {
return Text('flipped text', style: TextStyle(fontSize: 200));
}
Run Code Online (Sandbox Code Playgroud)
不起作用。同样的事情OrientationBuilder- 这些似乎取决于手机认为它所处的模式。
我看到有传感器包,我确信我最终能让它工作,但这有点像用火箭筒杀死蚊子。我希望在尝试用谷歌搜索这个问题时我错过了一些简单的事情。
好吧,毕竟使用传感器包并不困难。只需使用accelerometer值的第二个坐标并比较它是否大于〜4(我假设这是m/s^2,因为静止值是〜9)。
所以添加的代码是这样的:
class _SampleScreenState extends State<SampleScreen> {
//...
List<double> _accelerometerValues;
List<StreamSubscription<dynamic>> _streamSubscriptions =
<StreamSubscription<dynamic>>[];
//...
void initState() {
//...
_streamSubscriptions
.add(accelerometerEvents.listen((AccelerometerEvent event) {
setState(() {
_accelerometerValues = <double>[event.x, event.y, event.z];
});
}));
}
//...
sampleWidget() {
if (_accelerometerValues[1] > 4) {
return Text('portrait');
} else {
return Text('landscape');
}
}
//...
Run Code Online (Sandbox Code Playgroud)
我可能会为此添加一些滞后以使其更清晰,但这是一个可行的解决方案。
| 归档时间: |
|
| 查看次数: |
666 次 |
| 最近记录: |