标签: flutter-sliver

水平可滚动的卡片,具有快速捕捉效果

我想创建一个水平滚动列表,当从左侧或右侧滑动时,使用捕捉以适应效果.

每张卡片之间有一些间距,适合屏幕,类似于下图

在此输入图像描述

除此之外,这些可水平滚动的列表元素应包含在垂直可滚动列表中.

我所能实现的只是在flutter docs中跟随示例之后才显示水平滚动卡列表.

class SnapCarousel extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final title = 'Horizontal List';

    return MaterialApp(
      title: title,
      home: Scaffold(
        appBar: AppBar(
          title: Text(title),
        ),
        body: Container(
          margin: EdgeInsets.symmetric(vertical: 20.0),
          height: 200.0,
          child: ListView(
            scrollDirection: Axis.horizontal,
            children: <Widget>[
              Container(
                width: 160.0,
                color: Colors.red,
              ),
              Container(
                width: 160.0,
                color: Colors.blue,
              ),
              Container(
                width: 160.0,
                color: Colors.green,
              ),
              Container(
                width: 160.0,
                color: Colors.yellow,
              ),
              Container(
                width: 160.0,
                color: Colors.orange,
              ),
            ],
          ),
        ),
      ),
    );
  } …
Run Code Online (Sandbox Code Playgroud)

dart flutter flutter-sliver flutter-layout flutter-animation

19
推荐指数
4
解决办法
2万
查看次数

17
推荐指数
2
解决办法
5390
查看次数

Flutter 如何滚动到 SliverList 中的特定项目位置?

我有一个SliverListwith SliverChildBuilderDelegate,我的问题是我无法设置ScrollControllerSliverList因为我想控制我的列表的滚动,我正在寻找滚动到列表中的特定项目(非常大),通常ListView这项工作很容易,我我想知道为什么没有像这样的controller财产?SliverListListView

注意我知道CustomScrollViewcontroller属性并且我已经测试过,但这将控制整个视口,而不仅仅是列表

 @override
  Widget build(BuildContext context) {
    MainState m = Provider.of<MainState>(context, listen: false);
    return DefaultTabController(
      length: m.itemCategoryList.length,
      child: Scaffold(
          // appBar: _createAppBar(),
          body: Builder(builder: (context) => _createBody(context))),
    );
  }

  AppBar _createAppBar() {
    MainState m = Provider.of<MainState>(context);

    return AppBar(
      title: Text(
        m.selectedPartner.fullname,
        style: Theme.of(context).textTheme.display3,
      ),
      leading: IconButton(
        icon: Icon(Icons.arrow_back),
        onPressed: () {
          Navigator.pop(context);
        },
      ),
    );
  }

  _createBody(BuildContext context) {
    MainState …
Run Code Online (Sandbox Code Playgroud)

flutter flutter-sliver flutter-widget

15
推荐指数
1
解决办法
4837
查看次数

如何在onPressed()中动态更改凸起按钮的背景颜色

我有一个凸起按钮列表,我希望所选按钮的背景颜色在其 onPressed() 中更改

我尝试更改 setState 中的颜色,但它没有做任何事情。

这是生成按钮列表的函数

List<Widget> _makeZoneList(List<Zone> zones) {
    List<Widget>Buttons = new List();
    for (int i = 0; i < zones.length; i++) {
      Buttons.add(RaisedButton(
        color: zones[i].isSelected ? AppColors.primaryColor : AppColors.white,
        onPressed: () {
          setState(() {
            if (zones[i].isSelected){
              zones[i].isSelected = false;
            }
            else{
              zones[i].isSelected = true;
            }
            print(zones[i].isSelected.toString());
          });
        },
        child: Text(zones.elementAt(i).text)
      ));
    }
    return Buttons;
  }
Run Code Online (Sandbox Code Playgroud)

这是我调用函数的地方

Widget _zoneBody() {
    return Padding(
        padding: EdgeInsets.all(32),
        child: StreamBuilder<List<Zone>>(
            stream: GetterBloc.zonesStream,
            builder: (context, snapshot) {
              if (snapshot.connectionState == ConnectionState.waiting) {
                return …
Run Code Online (Sandbox Code Playgroud)

setstate flutter flutter-sliver flutter-layout

13
推荐指数
1
解决办法
5万
查看次数

SliverList flutter 中的分隔符/分隔符

我们如何在 SliverList 中实现 Separator/Divider。ListView.separated 是在列表中创建分隔符的便捷方法,但我没有看到任何关于 SliverList 的文档或示例

dart flutter flutter-sliver

13
推荐指数
3
解决办法
7159
查看次数

颤振实现粘性标题和捕捉项目效果

在过去的几天里,我一直在阅读颤动的框架文档,特别是条子部分,但我不太清楚从哪里开始.我正在尝试实现粘性标题和捕捉效果.RenderSliv​​erList可能是一个好的开始吗?我需要重新布局吗?我需要做额外的绘图吗?如果是这样的话?

任何帮助,从哪里开始将是一个巨大的帮助,提前感谢!

编辑:我想我现在理解了布局部分,但我无法找到绘画应该发生的地方.

编辑2:为了澄清,这是所需的"粘性标题效果":

如何在RecyclerView中制作粘性标题?(没有外部库)

这是"快照"效果:

https://rubensousa.github.io/2016/08/recyclerviewsnap

dart flutter flutter-sliver

12
推荐指数
3
解决办法
1万
查看次数

有没有办法在 SliverAppBar 的底部小部件中实现动态高度

SliverAppBar有一个属性bottom,它必须有preferredSize。

现在我让它返回恒定值:

  ...
  new SliverAppBar(
    expandedHeight: _kFlexibleSpaceMaxHeight,
    flexibleSpace: new FlexibleSpaceBar(.....)
    ...                   
    bottom: new BottomBar(...), // has to have preferredSize
  ),
  ...

class BottomBar extends StatelessWidget implements PreferredSizeWidget {
    ...
    @override
      Size get preferredSize {
        return new Size.fromHeight(my_constant_height_value);
      }

    ...
    }
Run Code Online (Sandbox Code Playgroud)

我想在这个底部小部件中放置一个文本,但我不知道其中的文本有多长。

如何实现底部小部件的动态高度?

有没有办法在布局之前测量小部件的高度?

编辑2018年4月25日

最终,我遵循蒂博的指示并得到了以下结果:

// 'as rendering' to avoid conflict with 'package:intl/intl.dart'
import 'package:flutter/rendering.dart' as rendering; 

...

// this is the function that returns the height of a Text widget
// given the text
double getHeight(String text, BuildContext context, …
Run Code Online (Sandbox Code Playgroud)

layout appbar flutter bottombar flutter-sliver

12
推荐指数
1
解决办法
1万
查看次数

Flutter:折叠FlexibleSpaceBar 时更改文本

我查看了 Flutter 文档,试图找到一个事件、回调,甚至是在 FlexibleSpaceBar 折叠或展开时可以挂钩的状态。

return new FlexibleSpaceBar(
  title: new Column(
    crossAxisAlignment: CrossAxisAlignment.end,
    mainAxisAlignment: MainAxisAlignment.end,
    children: <Widget>[
        new Text(_name, style: textTheme.headline),
        new Text(_caption, style: textTheme.caption)
    ]),
  centerTitle: false,
  background: getImage());`
Run Code Online (Sandbox Code Playgroud)

当 FlexibleSpaceBar 被对齐(折叠)时,我想隐藏_caption文本并只显示_name文本。当它完全展开时,我显然想同时显示_name_caption

我该怎么做?

我不熟悉颤振,所以我对此有些迷失。

也报道在https://github.com/flutter/flutter/issues/18567

dart flutter flutter-sliver flutter-layout

12
推荐指数
4
解决办法
1万
查看次数

Flutter 中如何同时使用 SliverPersistentHeader 和 TabBarView?

我有主页SliverPersistentHeaderTabBarView喜欢下面的代码:

 @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Theme.of(context).backgroundColor,
      body: DefaultTabController(
        length: 3,
        child: NestedScrollView(
          headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
            return <Widget>[
              SliverAppBar(
                expandedHeight: 250.0,
                floating: false,
                pinned: true,
              ),
              SliverPersistentHeader(
                delegate: _SliverAppBarDelegate(
                  TabBar(
                    labelStyle: TextStyle(
                        fontFamily: 'Raleway',
                        fontSize: 17,
                        fontWeight: FontWeight.w400,
                        color: Theme.of(context).backgroundColor),
                    indicatorColor: Theme.of(context).hintColor,
                    labelColor: Theme.of(context).buttonColor,
                    unselectedLabelColor: Theme.of(context).dividerColor,
                    tabs: [
                      Tab(text: "Menu"),
                      Tab(text: "About"),
                      Tab(text: "Contact"),
                    ],
                  ),
                ),
                pinned: true,
              ),
            ];
          },
          body: TabBarView(
            children: <Widget>[MenuTab(), AboutTab(), ContactTab()],
          ),
        ), …
Run Code Online (Sandbox Code Playgroud)

listview tabbar flutter flutter-sliver

12
推荐指数
1
解决办法
8103
查看次数

扑。如何为 SliverGrid 添加填充

我将 CustomScrollView 与 SliverGrid 一起使用。我使用以下命令在网格项之间添加空间:mainAxisSpacing:8,crossAxisSpacing:8。但是是否可以在第一列之前和最后一列之后添加空间(边距/填充)。我尝试将 SliverGrid 包裹在 Padding 中,但出现错误:

RenderViewport 期望有一个 RenderSliv​​er 类型的子代,但收到了一个 RenderPadding 类型的子代。

渲染对象需要特定类型的子对象,因为它们在布局和绘制期间与其子对象进行协调。例如,RenderSliv​​er 不能是 RenderBox 的子级,因为 RenderSliv​​er 不理解

请帮助我如何添加 GridView 的开始和结束边距。

flutter flutter-sliver flutter-gridview

12
推荐指数
1
解决办法
1万
查看次数