Yac*_*rbi 5 flutter flutter-layout
我有一个导航器和一个嵌套在堆栈中的地图,导航器的子级具有动态大小。只有导航员强迫自己占据尽可能多的空间并覆盖身后的地图。因此不可能移动地图。可以让导航器适应孩子的大小吗?
class Home extends StatefulWidget {
Home({Key key}) : super(key: key);
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
children: [
StreamProvider(
create: (context) => LocationService().locationStream,
child: MapView()
),
Positioned(
width: MediaQuery.of(context).size.width * 1,
bottom: 0,
child: ConstrainedBox(
constraints: BoxConstraints(
maxHeight: MediaQuery.of(context).size.height * 1,
maxWidth: MediaQuery.of(context).size.width * 1
),
child: navigator(),
)
),
],
)
);
}
navigator() {
return Navigator(
initialRoute: 'anyview',
onGenerateRoute: (settings) {
Widget view;
switch (settings.name) {
case 'anyview':
view = AnyViewDraggableScrollableSheet();
break;
case 'otheranyview':
view = OtherAnyViewDraggableScrollableSheet();
break;
}
var builder = (BuildContext _) {
return view;
};
return MaterialPageRoute(builder: builder, settings: settings);
},
);
}
}
Run Code Online (Sandbox Code Playgroud)
这是问题的演示,导航器占用了所有可用空间,因此通过点击红色块来阻止它。 https://dartpad.dev/cd1c4d8f1067db0cc65ea2f62c2cbaad
小智 0
Navigator 管理一堆路由,您可以从中将路由推送到页面或从中弹出路由。如果您尝试在 Map 上方的同一页面中放置某个容器,我不认为 Navigator 是正确的小部件,除非您确实希望在其上方放置一个页面。
我建议您使用一个向上滑动的面板,该面板可以放置在地图上方页面的底部,用户只需向上滑动它即可使用或查看您希望在其上播放的任何信息或按钮。
如果您不想自己创建一个,我过去在相同的案例场景中使用这个包取得了成功。
另外,我相信使用导航器的更简单方法是
Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) => MyPage()));
,如果您希望路由到与当前所在页面不同的页面,或者Navigator.pop(context);
您希望返回到上一页。还有许多其他更具体的推送和弹出方法,您可以在详细的 Flutter 文档中查找。
归档时间: |
|
查看次数: |
812 次 |
最近记录: |