Dom*_*ski 8 user-interface dart flutter
我想在普通 Scaffold 应用程序的 NestedScrollView 中使用 SliverAppBar。当用户向下滚动时,我还希望应用栏的最小高度。
我无法弄清楚如何使用 PreferredSize 小部件或在线找到的任何其他解决方案,例如this。
这是我目前的简化解决方案:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(primarySwatch: Colors.blue, fontFamily: 'Oswald'),
home: SliverHome(),
);
}
}
class SliverHome extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
child: testHome(),
);
}
Widget testHome() {
return Scaffold(
body: NestedScrollView(
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
return <Widget>[
SliverAppBar( // this is where I would like to set some minimum constraint
expandedHeight: 300,
floating: false,
pinned: true,
flexibleSpace: Container(
padding: EdgeInsets.all(10),
height: 340,
width: double.infinity,
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
height: 40,
),
Container(
height: 60,
),
Expanded(child: Container()),
Text('TEST'),
],
),
decoration: BoxDecoration(
image: DecorationImage(
image: NetworkImage('https://picsum.photos/400/400'),
fit: BoxFit.cover)),
),
)
];
},
body: Container(),
),
floatingActionButton: FloatingActionButton(
onPressed: () => {},
tooltip: '+',
child: Icon(Icons.accessibility_new),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
我想在 60 dp 附近停止缩小应用栏

anm*_*ail 15
这实际上是一个请求的功能 - https://github.com/flutter/flutter/issues/21298
解决方法是使用 Bottom
SliverAppBar(
// this is where I would like to set some minimum constraint
expandedHeight: 300,
floating: false,
pinned: true,
bottom: PreferredSize( // Add this code
preferredSize: Size.fromHeight(60.0), // Add this code
child: Text(''), // Add this code
), // Add this code
flexibleSpace: Container(
padding: EdgeInsets.all(10),
height: 340,
width: double.infinity,
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
height: 40,
),
Container(
height: 60,
),
Expanded(child: Container()),
Text('TEST'),
],
),
decoration: BoxDecoration(
image: DecorationImage(
image: NetworkImage('https://picsum.photos/400/400'),
fit: BoxFit.cover)),
),
)
Run Code Online (Sandbox Code Playgroud)
小智 9
只需使用collapsedHeight并指定您的最小高度即可。
SliverAppBar(
// Display a placeholder widget to visualize the shrinking size.
flexibleSpace: Placeholder(),
expandedHeight: 300,
collapsedHeight: 60,
);
Run Code Online (Sandbox Code Playgroud)
小智 5
我不知道从什么时候开始,但截至目前,您还可以使用 collapsedHeight 属性,记录如下:
https://api.flutter.dev/flutter/material/SliverAppBar/collapsedHeight.html
目前我在 flutter 1.20.1 上,我有这个属性。
| 归档时间: |
|
| 查看次数: |
14763 次 |
| 最近记录: |