Flutter如何检查Sliver AppBar是展开还是折叠?

我正在Flutter中使用带有背景小部件的SliverAppBar。

问题是,展开后,标题和图标(引导和动作)应为白色,以便正确看到;折叠时,应将其更改为黑色。

我如何能得到任何想法布尔出来的吗?或其他解决此问题的方法。

谢谢。

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 = 80.0时,实际上意味着条子appbar被折叠。

这是一个完整的示例:

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 == 80.0 ? 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是展开还是折叠? 的全部内容, 来源链接: utcz.com/qa/433997.html

回到顶部