我的函数执行的时间比在颤动中将变量转换为文本小部件的时间晚

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

我有一个用于购物车图标的计数器徽章,但是事情是在执行该功能之前,将$ 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,
              ),
            ),
          ),
        ),
      ],
    );
  }
}
flutter dart
1个回答
0
投票
您是正确的,它不起作用的原因是因为它是未来。我个人将使用的潜在解决方案(不确定是否完全适合您,取决于您的应用程序)是以下修改的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()
© www.soinside.com 2019 - 2024. All rights reserved.