flutter - 如何在多个屏幕之间共享一个 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(...
解决方案
您是否尝试将其设置为变量?
AppBar myAppBar = Appbar(...)
或作为返回函数,如果您需要将标题作为参数传递
AppBar myAppBar(String title){
return AppBar(...)
}
如果您仍想使用有状态或无状态小部件,则需要将 PreferredSizeWidget 添加到类中,但您需要覆盖一件事:
class SaneAppBar extends StatelessWidget with PreferredSizeWidget{
@override
Size get preferredSize => Size(screen.width, 75);
}
推荐阅读
- r - 使用 st_read 读取文件时选择列
- javascript - 将 Asp.net core Page Modal 对象转换为 Vue,js 数据对象
- java - 循环运行速度比 Firestore 查询任务快
- android - A problem occurred evaluating settings 'android'. gradle.groovy does not exist
- angular - 如何在 Angular 的 ngx-intl-tel-input 中添加验证?
- css - inline-flex 容器的 flex 项中的多行文本占用了不必要的空间
- python - 当另一行缺少数据或 drop_duplicates 与 NaN 匹配所有数据时 Dropna
- azure - Azure DevOps:如何通过发布管道中的 PowerShell 脚本从构建 Azure 管道中检索构建工件?
- javascript - 一旦类在正文上更改,更改 div 元素中的(内容)文本
- angular - 如何在循环中以角度实现多个顺序 Http 请求(每个新请求取决于先前的结果)