是否可以在颤动中不需要传递参数

is it possible to pass the parameter without required in flutter

是否可以在没有要求的情况下通过 this.title,我看过他们这样做的一些教程,但是当我尝试时它要求我将要求添加到 this.title。由于我的 2 屏幕不包含 appBar 标题,我想在不需要的情况下传递它。可能吗?

如果我将 required 添加到 this.title,我的代码可以正常工作。

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

import '../../logic/cubit/counter_cubit.dart';

class HomeScreen extends StatefulWidget {
const HomeScreen({Key? key,  this.title}) : super(key: key);

final String title;

@override
State<HomeScreen> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
[SS of code][1]

标题必须是 required,因为您已将其设置为 不可 为空。如果标题是可选的,您可以将其设置为 nullable

class HomeScreen extends StatefulWidget {
  const HomeScreen({Key? key, this.title}) : super(key: key);

  final String? title;

  @override
  State<HomeScreen> createState() => _HomeScreenState();
}

但是,现在您需要处理 build 函数中可能没有标题的事实:

class _HomeScreenState extends State<HomeScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title ?? "NO TITLE!?!"),
      ),
     );
  }
}

显然你不想要“没有标题!?!”出现在你的标题中,但由于我不知道你想要什么,所以你必须更改那部分。

除了@nvoigt 给出的答案之外,您还可以提供默认值而不是使 title 可为空:

class HomeScreen extends StatefulWidget {
  const HomeScreen({Key? key, this.title = 'Home Screen'}) : super(key: key);

  final String title;

  @override
  State<HomeScreen> createState() => _HomeScreenState();
}

这样,您不必提供标题,如果您不提供,它将使用 Home Screen 作为标题。