【问题标题】:How to add a fixed AppBar over multiple scrollable PageViews in flutter如何在颤动的多个可滚动页面视图上添加固定的 AppBar
【发布时间】:2018-10-10 15:08:12
【问题描述】:

我想在 PageView 上添加一个透明的 appBar。

Pageview 是在 Flutter 中使用 Stacks 实现的,所以所有的内容都放在一张图片上。由于它与选项卡的工作方式不同,我需要放置一个 appBar,以便即使在 Scrolling b/w multiple pageViews 期间,appBar 仍然固定在给定位置。

我正在使用以下代码来实现这一点,但它显示了各种错误。

import 'package:flutter/material.dart';
import 'package:page_transformer/data.dart';
import 'package:page_transformer/intro_page_item.dart';
import 'package:page_transformer/page_transformer.dart';

class IntroPageView extends StatelessWidget{


  @override
  Widget build(BuildContext context) {
    List<Widget> children = new List();



    return
        Stack(
        fit: StackFit.expand,
        children: [
          _buildBackground(),
          _buildforeground()

        ],
      );
  }



  Widget _buildforeground() => new AppBar(

  title: Text('Antara',
    textDirection: TextDirection.rtl,),


  );

  Widget _buildBackground() =>  PageTransformer(
    pageViewBuilder: (context, visibilityResolver) {
      return PageView.builder(
        controller: PageController(viewportFraction: 1.0),
        itemCount: sampleItems.length,
        itemBuilder: (context, index) {
          final item = sampleItems[index];
          final pageVisibility =
          visibilityResolver.resolvePageVisibility(index);

          return IntroPageItem(
            item: item,
            pageVisibility: pageVisibility,
          );
        },
      );
    },
  );
}

请告诉我我哪里错了,另外,我忘了提到网页浏览是有状态的小部件,并且 PageTransformer 小部件用于在滚动黑白网页浏览时提供视差效果。

谢谢

【问题讨论】:

    标签: android user-interface flutter flutter-layout


    【解决方案1】:

    您应该对代码应用两个更改以强制高度

    • 删除StackFit.expand,因为它会使栏占据整个屏幕
    • 用 Container 或 SizedBox 包裹 AppBar 并提供一个高度来约束它

    最后将透明色和高程设置为0.0

      @override
      Widget build(BuildContext context) {
        List<Widget> children = new List();
    
        return Stack(
          //fit: StackFit.expand,
          children: [
            _buildBackground(),
            _buildforeground(),
          ],
        );
      }
    
      Widget _buildforeground() => SizedBox(
            height: 80.0,
            child: new AppBar(
              backgroundColor: Colors.transparent,
              elevation: 0.0,
              title: Text(
                'Antara',
                textDirection: TextDirection.rtl,
                style: TextStyle(color: Colors.grey),
              ),
            ),
          );
    

    【讨论】:

    • 非常感谢先生。它实际上解决了我的问题,再次感谢您。
    猜你喜欢
    • 1970-01-01
    • 2022-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 2011-12-23
    • 1970-01-01
    • 2019-01-16
    相关资源
    最近更新 更多