- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在使用 SliverAppBar在 Flutter 中,带有背景小部件。
问题是,当它展开时,标题和图标(引导和操作)应该是白色以便正确看到,当它折叠时,它们应该改为黑色。
关于如何从中获得 bool 的任何想法?或其他解决此问题的方法。
谢谢。
class SliverExample extends StatefulWidget {
final Widget backgroundWidget;
final Widget bodyWidgets;
SliverExample({
this.backgroundWidget,
this.body,
});
@override
_SliverExampleState createState() => _SliverExampleState();
}
class _SliverExampleState extends State<SliverExample> {
// I need something like this
// To determine if SliverAppBar is expanded or not.
bool isAppBarExpanded = false;
@override
Widget build(BuildContext context) {
// To change the item's color accordingly
// To be used in multiple places in code
Color itemColor = isAppBarExpanded ? Colors.white : Colors.black;
// In my case PrimaryColor is white,
// and the background widget is dark
return Scaffold(
body: CustomScrollView(
slivers: <Widget>[
SliverAppBar(
pinned: true,
leading: BackButton(
color: itemColor, // Here
),
actions: <Widget>[
IconButton(
icon: Icon(
Icons.shopping_cart,
color: itemColor, // Here
),
onPressed: () {},
),
],
expandedHeight: 200.0,
flexibleSpace: FlexibleSpaceBar(
centerTitle: true,
title: Text(
'title',
style: TextStyle(
fontSize: 18.0,
color: itemColor, // Here
),
),
// Not affecting the question.
background: widget.backgroundWidget,
),
),
// Not affecting the question.
SliverToBoxAdapter(child: widget.body),
],
),
);
}
}
最佳答案
您可以使用 LayoutBuilder 来获取 sliver AppBar 的最大高度。当maximum.height = MediaQuery.of(context).padding.top + kToolbarHeight 时,其实就是sliver appbar被折叠了。
这是一个完整的例子,在这个例子中 MediaQuery.of(context).padding.top + kToolbarHeight = 80.0:
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(
home: MyApp(),
));
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
var top = 0.0;
@override
Widget build(BuildContext context) {
return Scaffold(
body: NestedScrollView(
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
return <Widget>[
SliverAppBar(
expandedHeight: 200.0,
floating: false,
pinned: true,
flexibleSpace: LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) {
// print('constraints=' + constraints.toString());
top = constraints.biggest.height;
return FlexibleSpaceBar(
centerTitle: true,
title: AnimatedOpacity(
duration: Duration(milliseconds: 300),
//opacity: top == MediaQuery.of(context).padding.top + kToolbarHeight ? 1.0 : 0.0,
opacity: 1.0,
child: Text(
top.toString(),
style: TextStyle(fontSize: 12.0),
)),
background: Image.network(
"https://images.unsplash.com/photo-1542601098-3adb3baeb1ec?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=5bb9a9747954cdd6eabe54e3688a407e&auto=format&fit=crop&w=500&q=60",
fit: BoxFit.cover,
));
})),
];
},body: ListView.builder(
itemCount: 100,
itemBuilder: (context,index){
return Text("List Item: " + index.toString());
},
),
));
}
}
最终结果:
关于Flutter 如何检查 Sliver AppBar 是展开还是折叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53372276/
我正在尝试使嵌套的 Sliver header 具有粘性。 我无法在“bruh”标题(粘性)下使“今天”标题具有粘性。让它感觉像是一些折叠的标题。 有人可以帮忙吗 class ListExample
我尝试在 Sliver List (CustomScrollview - SliverList) 中制作水平滚动列表 这是我的代码: import 'package:flutter/material.
我在 CustomScrollView 中有一个 Sliver 网格,我想在下拉网格时刷新内容。 我深入研究了小部件,但似乎不容易。看起来它实际上与sliver没有密切关系,而是 ListView 。
因此,我正在基于 this 创建一个基于 sliver 的 AppBar我发现的示例,并且正面临错误 named parameter 'slivers' isn't defined。 我的代码看起来有
我试图将 Sliver AppBar 的标题居中并在其下方添加第二个文本。我做不到。 下面是现在的图像以及它应该如何。 谁能帮帮我? 这是我的代码。 import 'package:flutter/m
我制作了一个 sliverappbar,我想在这个 sliverappbar 上放一张卡片。如何在 sliverappbar 上放一张卡片,然后这张卡片与 sliverappbar 一起折叠? 卡片应
我正在尝试使用 Sliver 来实现可折叠列表标题。当我将小部件从正常更改为 Sliver 时,我经常会遇到如下错误: I/flutter ( 3141): ══╡ EXCEPTION CAUGHT
希望你有美好的一天。我想在下面实现这样的事情 => gif image 1 谁的 gif 不清楚。这是来自名为 Yelp 的应用程序的屏幕截图.它是具有扩展和折叠功能的银色应用栏。当它折叠搜索栏固定到
在下面的代码中我遇到了问题,我正在尝试为 Sliver child 的每个 child 设置自定义高度,我刚刚在 Flutter 上了解了这个小部件,我想修复它,例如: CustomScrollVie
我有一个简单的银色应用栏,我将我的主要颜色设置为: theme: ThemeData(primary Color: Color. fromRGBO(50, 50, 205, 1)), 在我添加 sl
我试图在我的 sliver 应用栏上包含一个圆形个人资料图像按钮,但 sliver 应用栏并没有完全正确地呈现它。这就是我得到的,如何在条形应用栏上获得圆形个人资料图片? 我的代码: @ove
将 SliverAppBar 添加到 DraggableScrollableSheet 后,我无法将工作表向上或向下滚动到屏幕,但 SliverAppbar 内的列表工作正常, 完整源代码: impo
我正在使用 SliverAppBar在 Flutter 中,带有背景小部件。 问题是,当它展开时,标题和图标(引导和操作)应该是白色以便正确看到,当它折叠时,它们应该改为黑色。 关于如何从中获得 bo
@override Widget build(BuildContext context) { return Scaffold( body: CustomScrollView(
我在 GridView 上方使用 2 个 Sliver Headers,在 CustomScrollView 上使用 ListView。当我向下滚动时,我只想固定 1 个标题(我正在滚动的标题)。我希
我将 CustomScrollView 与 Sliver 一起使用。在 header 中,我有一些带有自动完成功能的文本字段(在数据库中搜索数据),当输入文本等于某个值时,我需要做一些事情。我尝试使用
因为我的屏幕上有条状应用栏,所以我没有使用 AppBar() 小部件。所以默认情况下状态栏颜色是白色。 有没有办法将状态栏的颜色从银色更改。 下面的代码按预期适用于 Android,但不适用于 iOS
我想要屏幕顶部的 SliverAppBar 和 ReorderableListView 下方的 SliverFillRemaining。 我尝试了多种解决方案,但每一种都不断出现不同的错误。将 Reo
我正在研究您可以在下面的屏幕截图中看到的概念: design concept 注意:箭头不是 UI 的一部分,而是添加来演示可拖动功能。 屏幕有一个显示位置标题的 SliverAppBar,包含位置描
我正在尝试在 SliverList 中运行 Markdown 小部件(包:flutter_markdown 0.2.0),但我遇到了一些问题。 理想情况下,我想在 Sliver 内的 ExpandTi
我是一名优秀的程序员,十分优秀!