flutter 中所有屏幕上的 AppBar

问题描述 投票:0回答:1

我想我有一个简单的问题,但我不知道为什么它不起作用

简单: main.dart

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: const Welcome(),
    );
  }
}

第二个文件: 欢迎.dart

  class Welcome extends StatelessWidget {
  const Welcome({super.key});

  @override
  Widget build(BuildContext context) {
    return const Scaffold(
      appBar: AppBarNav(
        title: 'JobFinder',
      ),
    );
  }
}

应用栏文件: appbar.dart

import 'package:flutter/material.dart';

class AppBarNav extends StatelessWidget {
  final String title;
  const AppBarNav({super.key, required this.title});

  @override
  Widget build(BuildContext context) {
    return AppBar(
      title: Text(title),
    );
  }
}

调试器说: 参数类型“AppBarNav”无法分配给参数类型“PreferredSizeWidget?”

为什么?

你知道为什么调试器告诉我不能在Welcome.dart文件中使用AppBar吗? 我知道这可能很简单,但我找不到解决方案。

一般我想在每个屏幕上放置一个appBar(相同的Appbar)

flutter appbar
1个回答
0
投票

参数

appBar
需要直接是
AppBar
。您给它一个
AppBarNav
,但它不是
AppBar
,即使它只包含一个。

从技术上讲,它不需要是

AppBar
,而是
PreferredSizeWidget
实现的
AppBar
。因此,您也可以让您的
AppBarNav
像这样实现
PreferredSizeWidget

class AppBarNav extends StatelessWidget implements PreferredSizeWidget {
  final String title;
  const AppBarNav({super.key, required this.title});

  @override
  Widget build(BuildContext context) {
    return AppBar(
      title: Text(title),
    );
  }

  @override
  // TODO: implement preferredSize
  Size get preferredSize => throw UnimplementedError();
}

但是你还需要提供

preferredSize
的实现

© www.soinside.com 2019 - 2024. All rights reserved.