检测小部件是否溢出
Detecting if widget is overflowing
我想根据蓝色小部件更改红色小部件的位置。
案例一:
如果蓝色列表小部件的高度小于屏幕高度,请将红色列表小部件定位到屏幕底部。
案例 2:
如果蓝色列表小部件的高度高于屏幕高度,请将红色列表小部件定位到小部件的底部。
当涉及列表的事情看起来过于复杂时,研究 slivers 通常很有趣。
对于您的情况,一条条子就可以解决您的问题:SliverFillRemaining
这是您问题的示例实现,很大程度上受到 flutter 团队提供的代码的启发。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: MyStatelessWidget(),
),
);
}
}
class MyStatelessWidget extends StatelessWidget {
MyStatelessWidget({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return CustomScrollView(
slivers: <Widget>[
SliverList(
delegate: SliverChildListDelegate(
[
Container(
color: Colors.amber[300],
height: 150.0,
),
Container(
color: Colors.green[300],
height: 150.0,
),
]
),
),
SliverFillRemaining(
hasScrollBody: false,
child: Container(
alignment: Alignment.bottomCenter,
color: Colors.red,
child: Icon(
Icons.sentiment_very_satisfied,
size: 75,
color: Colors.blue[900],
),
),
),
],
);
}
}
我想根据蓝色小部件更改红色小部件的位置。
案例一: 如果蓝色列表小部件的高度小于屏幕高度,请将红色列表小部件定位到屏幕底部。
案例 2: 如果蓝色列表小部件的高度高于屏幕高度,请将红色列表小部件定位到小部件的底部。
当涉及列表的事情看起来过于复杂时,研究 slivers 通常很有趣。
对于您的情况,一条条子就可以解决您的问题:SliverFillRemaining
这是您问题的示例实现,很大程度上受到 flutter 团队提供的代码的启发。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: MyStatelessWidget(),
),
);
}
}
class MyStatelessWidget extends StatelessWidget {
MyStatelessWidget({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return CustomScrollView(
slivers: <Widget>[
SliverList(
delegate: SliverChildListDelegate(
[
Container(
color: Colors.amber[300],
height: 150.0,
),
Container(
color: Colors.green[300],
height: 150.0,
),
]
),
),
SliverFillRemaining(
hasScrollBody: false,
child: Container(
alignment: Alignment.bottomCenter,
color: Colors.red,
child: Icon(
Icons.sentiment_very_satisfied,
size: 75,
color: Colors.blue[900],
),
),
),
],
);
}
}