首页 > 解决方案 > 如何在多个屏幕之间共享一个 AppBar

问题描述

我试图遵循@rmtmckenzie 对类似问题的回答中的解决方案1( Persisting AppBar Drawer across all Pages Flutter但是当我尝试以下代码时,我收到错误The argument type 'SaneAppBar' can't be assigned to the parameter type 'PreferredSizeWidget?'。因为我可以将不可为空的成员分配给可空的成员(例如 String?= String),所以我不明白我做错了什么。也许这是你可以用抽屉参数做的事情,但是没有 appBar 参数?如果是这样,我将不胜感激任何关于我应该如何预先确定这一点的指针。我还想知道是否需要修改示例代码以在空安全环境中工作?

sane_app_bar.dart:

import 'package:flutter/material.dart';
class SaneAppBar extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return AppBar(
        title: const Text('SANE Finder'),
        centerTitle: true,
      );
  }
}

我的屏幕小部件以这种方式使用:

class _WelcomeScreenState extends State<WelcomeScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: SaneAppBar(),
      body: Padding(...

标签: flutterdart

解决方案


您是否尝试将其设置为变量?

AppBar myAppBar = Appbar(...)

或作为返回函数,如果您需要将标题作为参数传递

AppBar myAppBar(String title){
    return AppBar(...)
 }

如果您仍想使用有状态或无状态小部件,则需要将 PreferredSizeWidget 添加到类中,但您需要覆盖一件事:

class SaneAppBar extends StatelessWidget with PreferredSizeWidget{
     @override         
     Size get preferredSize => Size(screen.width, 75); 
}

推荐阅读