gpt4 book ai didi

flutter - 在灵活空间中使用重叠内容滚动应用栏

转载 作者:IT老高 更新时间:2023-10-28 12:38:18 25 4
gpt4 key购买 nike

我正在尝试使用 flutter 在灵活空间中重新创建具有重叠内容的应用栏滚动。

这里演示了行为:

http://karthikraj.net/2016/12/24/scrolling-behavior-for-appbars-in-android/

我已经使用 SliverAppBar 创建了折叠 AppBar,使用我粘贴在这里的代码,我正在尝试创建 THIS

我无法使用 Stack,因为我找不到任何 onScroll 回调,到目前为止,我使用flexibleSpace创建了应用栏,应用栏在滚动时折叠:

Scaffold(
body: NestedScrollView(
headerSliverBuilder:
(BuildContext context, bool innerBoxIsScrolled) => <Widget>[
SliverAppBar(
forceElevated: innerBoxIsScrolled,
pinned: true,
expandedHeight: 180.0,
),
],
body: ListView.builder(
itemCount: 30,
itemBuilder: (context, index) => Text(
"Item $index",
style: Theme.of(context).textTheme.display1,
),
),
),
);

What i created so far

编辑:Example of what i want to create

最佳答案

ScrollViews 采用 ScrollController,它是一个可通知滚动偏移更新的 Listenable。

你可以监听ScrollController,使用Stack根据滚动偏移量达到你感兴趣的效果。

这是一个简单的例子:

import 'package:flutter/material.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Scroll demo',
home: new Scaffold(
appBar: new AppBar(elevation: 0.0),
body: new CustomScroll(),
),
);
}
}

class CustomScroll extends StatefulWidget {
@override
State createState() => new CustomScrollState();
}

class CustomScrollState extends State<CustomScroll> {
ScrollController scrollController;
double offset = 0.0;
static const double kEffectHeight = 100.0;

@override
Widget build(BuildContext context) {
return new Stack(
alignment: AlignmentDirectional.topCenter,
children: <Widget> [
new Container(
color: Colors.blue,
height: (kEffectHeight - offset * 0.5).clamp(0.0, kEffectHeight),
),
new Positioned(
child: new Container(
width: 200.0,
child: new ListView.builder(
itemCount: 100,
itemBuilder: buildListItem,
controller: scrollController,
),
),
),
],
);
}

Widget buildListItem(BuildContext context, int index) {
return new Container(
color: Colors.white,
child: new Text('Item $index')
);
}

void updateOffset() {
setState(() {
offset = scrollController.offset;
});
}

@override
void initState() {
super.initState();
scrollController = new ScrollController();
scrollController.addListener(updateOffset);
}

@override
void dispose() {
super.dispose();
scrollController.removeListener(updateOffset);
}
}

关于flutter - 在灵活空间中使用重叠内容滚动应用栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51469159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com