我在flutter应用中创建了一个AppBar
,但我想让它通用(也就是说,我希望在应用的大多数屏幕中使用相同的AppBar
)。我创建了一个新的dart文件,其中包含一个StatefulWidget
,我将其命名为AppBarscreen
,然后返回了一个AppBar
小部件。当我试图调用另一个文件中的小部件时,我收到了如下错误:
[![我在它下面画了这些红线][1]][1]
下面是我创建的AppBarscreen
类的代码:
import 'package:flutter/material.dart';
class AppBarScreen extends StatefulWidget {
const AppBarScreen({super.key});
@override
State<AppBarScreen> createState() => _AppBarScreenState();
}
class _AppBarScreenState extends State<AppBarScreen> {
final GlobalKey<ScaffoldState> scaffoldkey = new GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context) {
return AppBar(
iconTheme: IconThemeData(color: Colors.black),
toolbarHeight: 70,
elevation: 0.0,
backgroundColor: Color(0xFFE5E5E5),
actions: [
SizedBox(
width: 10,
),
Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
height: 50,
width: 80,
],
),
SizedBox(
width: 90,
),
Image.asset(
"lib/assets/activity.png",
height: 30,
width: 30,
),
SizedBox(
width: 15,
),
Image.asset(
"lib/assets/notification-bing.png",
height: 30,
width: 30,
),
SizedBox(
width: 10,
),
CircleAvatar(
child: Icon(
Icons.person,
color: Colors.grey,
),
backgroundColor: Colors.grey[300],
),
SizedBox(
width: 10,
),
],
leadingWidth: 100,
leading: GestureDetector(
onTap: () => scaffoldkey.currentState!.openDrawer(),
child: Row(
children: [
SizedBox(width: 20),
Icon(Icons.menu, color: Colors.black),
],
),
),
);
}
}
这是我调用AppBarscreen
小部件的屏幕代码:
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
class Home extends StatefulWidget {
Home({Key? key}) : super(key: key);
@override
State<Home> createState() => _HomeState();
}
class _HomeState extends State<Home> {
final GlobalKey<ScaffoldState> scaffoldkey = new GlobalKey<ScaffoldState>();
final user = FirebaseAuth.instance.currentUser;
@override
Widget build(BuildContext context) {
return DefaultTabController(
length: 2,
child: Scaffold(
key: scaffoldkey,
drawer: SideMenu(),
backgroundColor: Color(0xFFE5E5E5),
appBar: AppBarScreen(),
body: Padding(
padding: const EdgeInsets.symmetric(vertical: 15, horizontal: 20),
child: SingleChildScrollView(
child:
Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"Dashboard",
style: TextStyle(fontSize: 35, letterSpacing: 0.2),
),
Container(
child: Padding(
padding: const EdgeInsets.fromLTRB(8, 10, 15, 10),
child: Icon(
Icons.history,
size: 30,
color: Colors.green,
),
),
decoration: BoxDecoration(
border: Border.all(color: Colors.green, width: 2),
borderRadius: BorderRadius.circular(10),
),
)
],
),
Row(
children: [
Text(
"How are you today?",
style: TextStyle(fontSize: 18),
),
Image.asset(
"lib/assets/goodbye.png",
height: 20,
),
],
),
SizedBox(
height: 10,
),
Container(
height: 140,
child: PageView(
scrollDirection: Axis.horizontal,
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 5),
child: MyCards(
title: "Revenue",
rate: 0,
icon: "lib/assets/moneyrounded.png",
balance: 0,
color: Colors.green,
),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 5),
child: MyCards(
title: "Total Orders",
rate: 0,
icon: "lib/assets/clipboard2.png",
balance: 0,
color: Colors.blue),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 5),
child: MyCards(
title: "Total Products",
rate: 0,
icon: "lib/assets/box.png",
balance: 0,
color: Colors.orange),
),
],
),
),
SizedBox(
height: 30,
),
//sales info card
SalesInfo(),
SizedBox(
height: 50,
),
//product info card
ProductInfo(),
SizedBox(
height: 50,
),
//expiry info card
ExpiryInfo(),
SizedBox(
height: 50,
),
//transaction card
TransactionsCard(),
SizedBox(
height: 30,
),
]),
),
),
),
);
}
}
请问我怎样才能消除这个错误?
5条答案
按热度按时间uqzxnwby1#
这是AppbarScreeen的完整代码:
这是要使用appbarscreen类的地方
yqkkidmi2#
为它创建一个方法,你可以在每个屏幕示例代码中使用它。
z9gpfhce3#
无论您在
appBar
中放入什么,都需要实现PreferredSizeWidget
。例如,您可以更改
AppBarScreen
以使其正常工作kokeuurv4#
创建一个将在其中实现AppBar的ParentContainer。
并将该类称为每个类中的顶级小部件。
pzfprimi5#
How can I have my AppBar in a separate file in Flutter while still having the Widgets show?
因此,在可重用的应用程序栏上,类实现PreferredSizeWidget并重写
@override大小获取首选大小=〉新大小.从高度(appBar.首选大小.高度);
然后你就可以访问。