当我在iPhone上运行以下代码时,GridView会弹出。
如果GridView的内容超过iPhone屏幕大小,我希望它滚动,但如果它在iPhone屏幕大小之内,我不希望它弹跳或滚动。
如何修改下面的代码?
import 'package:flutter/material.dart';
void main() {
runApp(const DemoPage());
}
class DemoPage extends StatelessWidget {
const DemoPage({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Demo'),
),
body: GridView.count(
crossAxisCount: 2,
mainAxisSpacing: 8,
crossAxisSpacing: 8,
children: const [
Text("A"),
Text("B"),
],
),
)
);
}
}
顺便说一句,当在Chrome中启动时,如果内容小于屏幕大小,它不会反弹,所以它可以按预期工作。我希望在iPhone应用程序上也有这种行为。
$ flutter run
Multiple devices found:
...
[1]: macOS (macos)
[2]: Chrome (chrome)
Please choose one (To quit, press "q/Q"): 2
2条答案
按热度按时间2wnc66cl1#
当我想在不同的设备上使用不同的逻辑时,我使用responsive_builder库。
您可以使用以下代码作为问题的答案。
qcbq4gxm2#
我注意到文档
physics
中提到了primary
。默认为匹配的平台约定。此外,如果primary为false,则用户在没有足够的内容可滚动时无法滚动,而如果primary为true,则用户始终可以尝试滚动。
而下面所提到的是
primary
。如果为true,则滚动视图是可滚动的,即使它没有足够的内容来实际滚动。否则,默认情况下,用户只能滚动视图,如果它有足够的内容。请参阅physics。
只需添加
primary: false,
。但是,一旦iPhone被侧转,这使得内容尺寸大于屏幕尺寸并可滚动,然后又转回到纵向,它似乎是可滚动的(反弹)出于某种原因(我的应用程序是固定为纵向,所以目前这不是一个问题)。