自定义脚手架 class 不绘制 AppBar
Custom Scaffold class not draw the AppBar
我正在尝试创建一个扩展原始 class 的自定义脚手架。
如果没有传递一个新的,则使用默认的 AppBar。
class CommonScaffold extends Scaffold {
final AppBar? appBar;
final Widget body;
CommonScaffold({
Key? key,
this.appBar,
required this.body,
}) : super(
key: key,
body: body,
appBar: appBar ??
AppBar(
title: const Text("Default Text"),
),
);
}
如果我调用 class 避免传递 appBar 参数,AppBar 将不会出现。但是应该会出现。
@override
Widget build(BuildContext context) {
return CommonScaffold(
body: _createContent(),
);
}
如果我调用 class 将 AppBar 传递给 appBar 参数,AppBar 将出现。
@override
Widget build(BuildContext context) {
return CommonScaffold(
body: _createContent(),
appBar: AppBar(
title: const Text("TEST"),
),
);
}
如果你只想显示或不显示 appBar 你可以通过修改 bool 的值来使用这个例子来显示或不显示 bar
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: (showAppbar)? AppBar(
title: const Text("Default Text"),
): AppBar(
title: const Text("TEST"),
),
body: Center(
child: Text(
'Hello, a!',
),
),
);
}
这里的问题是 CommonScaffold
有两个 appBar
和 body
。第一组是因为 extends Scaffold
而第二组是在 CommonScaffold
.
上声明两个
您可以通过 运行 此代码段检查它在 OOP 上的工作方式。
On dartPad。我正在更改名称以更好地理解这个概念。
class Super {
final int? a;
final int? b;
const Super({this.a, this.b});
}
class Common extends Super {
final int? ca;
final int b;
const Common({this.ca, required this.b}) : super(a: ca ?? 10, b: b);
}
void main() {
final c = Common(b: 1);
print("supper a: ${c.a}"); // 10: will refer supper class
print("Common a: ${c.ca}"); // null: will refer common class
}
现在为您解答,最好更改 CommonScaffold
的属性名称以避免与超级 class.
冲突
这是 dartPad
上的答案
class CommonScaffold extends Scaffold {
final AppBar? cAppBar;
final Widget? cBody;
CommonScaffold({
Key? key,
this.cAppBar,
this.cBody,
}) : super(
key: key,
body: cBody,
appBar: cAppBar ??
AppBar(
title: Text("Default Appbar"),
));
}
class A extends StatelessWidget {
const A({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return CommonScaffold(
cBody: Text("body"),
);
}
}
我正在尝试创建一个扩展原始 class 的自定义脚手架。 如果没有传递一个新的,则使用默认的 AppBar。
class CommonScaffold extends Scaffold {
final AppBar? appBar;
final Widget body;
CommonScaffold({
Key? key,
this.appBar,
required this.body,
}) : super(
key: key,
body: body,
appBar: appBar ??
AppBar(
title: const Text("Default Text"),
),
);
}
如果我调用 class 避免传递 appBar 参数,AppBar 将不会出现。但是应该会出现。
@override
Widget build(BuildContext context) {
return CommonScaffold(
body: _createContent(),
);
}
如果我调用 class 将 AppBar 传递给 appBar 参数,AppBar 将出现。
@override
Widget build(BuildContext context) {
return CommonScaffold(
body: _createContent(),
appBar: AppBar(
title: const Text("TEST"),
),
);
}
如果你只想显示或不显示 appBar 你可以通过修改 bool 的值来使用这个例子来显示或不显示 bar
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: (showAppbar)? AppBar(
title: const Text("Default Text"),
): AppBar(
title: const Text("TEST"),
),
body: Center(
child: Text(
'Hello, a!',
),
),
);
}
这里的问题是 CommonScaffold
有两个 appBar
和 body
。第一组是因为 extends Scaffold
而第二组是在 CommonScaffold
.
您可以通过 运行 此代码段检查它在 OOP 上的工作方式。 On dartPad。我正在更改名称以更好地理解这个概念。
class Super {
final int? a;
final int? b;
const Super({this.a, this.b});
}
class Common extends Super {
final int? ca;
final int b;
const Common({this.ca, required this.b}) : super(a: ca ?? 10, b: b);
}
void main() {
final c = Common(b: 1);
print("supper a: ${c.a}"); // 10: will refer supper class
print("Common a: ${c.ca}"); // null: will refer common class
}
现在为您解答,最好更改 CommonScaffold
的属性名称以避免与超级 class.
这是 dartPad
上的答案
class CommonScaffold extends Scaffold {
final AppBar? cAppBar;
final Widget? cBody;
CommonScaffold({
Key? key,
this.cAppBar,
this.cBody,
}) : super(
key: key,
body: cBody,
appBar: cAppBar ??
AppBar(
title: Text("Default Appbar"),
));
}
class A extends StatelessWidget {
const A({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return CommonScaffold(
cBody: Text("body"),
);
}
}