我有一个用于购物车图标的计数器徽章,但是事情是在执行该功能之前,将$ count变量分配给文本小部件,因此在切换到其他屏幕然后转到此屏幕之后,它第一次返回null。出现值是因为执行的函数可以在下面看到我的图标徽章代码,countForBadge()是我的函数,count是我的变量,我不知道我的函数是将来的类型,也许就是这个原因,任何帮助将不胜感激,谢谢
import 'package:flutter/material.dart';
import 'package:restaurant_ui_kit/models/user.dart';
import 'package:restaurant_ui_kit/util/database_helper.dart';
class IconBadge extends StatefulWidget {
final IconData icon;
final double size;
static int counteer;
IconBadge({Key key, @required this.icon, @required this.size})
: super(key: key);
@override
_IconBadgeState createState() => _IconBadgeState();
}
class _IconBadgeState extends State<IconBadge> {
//List _users;
static int count ;
Future countForBadge() async{
var db = new DatabaseHelper();
count = await db.getCount();
print("Count: $count");
//print("khAN NNNN $counteer");
}
@override
void initState() {
// TODO: implement initState
super.initState();
countForBadge();
}
@override
Widget build(BuildContext context) {
if (count == null){
count = 0;
}
print("Count lande: $count");
return Stack(
children: <Widget>[
Icon(
widget.icon,
size: widget.size,
),
Positioned(
right: 0.0,
child: Container(
padding: EdgeInsets.all(1),
decoration: BoxDecoration(
color: Colors.red,
borderRadius: BorderRadius.circular(6),
),
constraints: BoxConstraints(
minWidth: 13,
minHeight: 13,
),
child: Padding(
padding: EdgeInsets.only(top: 1),
child:Text(
"$count",
style: TextStyle(
color: Colors.white,
fontSize: 8,
),
textAlign: TextAlign.center,
),
),
),
),
],
);
}
}
build
方法-使用FutureBuilder
检索并显示count
数据:] >Widget build(BuildContext context) {
return Stack(
children: <Widget>[
Icon(
widget.icon,
size: widget.size,
),
Positioned(
right: 0.0,
child: Container(
padding: EdgeInsets.all(1),
decoration: BoxDecoration(
color: Colors.red,
borderRadius: BorderRadius.circular(6),
),
constraints: BoxConstraints(
minWidth: 13,
minHeight: 13,
),
child: Padding(
padding: EdgeInsets.only(top: 1),
child: FutureBuilder(
future: countForBadge(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if(snapshot.hasData){
return Text(
snapshot.data.toString(),
style: TextStyle(
color: Colors.white,
fontSize: 8,
),
textAlign: TextAlign.center,
);
}
return Container();
}
),
),
),
),
],
);
}
使用此方法,您可以删除静态count
变量,而不必在countForBadge
中执行initState()
。