【问题标题】:Widget not returning view on Future<bool> condition in flutter小部件未在 Flutter 中返回 Future<bool> 条件的视图
【发布时间】:2019-04-15 13:13:19
【问题描述】:

小部件不返回视图。 isAttrAssignedToProduct 在此方法中,如果产品存在于表中,则我试图在表中查找分配的属性,然后返回 true,并且图像将根据 true 或 false 在 listview 项目中膨胀。我的数据库在条件下返回真或假,但视图不可见。

Widget isAttrAssigned(int index){
Future result = isAttrAssignedToProduct(index);
return FutureBuilder(
    future: result,
    builder: (BuildContext context, AsyncSnapshot snapshot) {
      result.then((v){
        debugPrint('FUTURE VALE ${v}');
        attr(v);
      });
},);
 Widget attr(bool v){
    return v==true?Container(
      width: 20.0,
      height: 20.0,
      decoration: BoxDecoration(
          color: Colors.yellow),
      child: Image.asset('assets/images/right.png'),
    ):Text('df');
  }

我的查询工作正常

 Future<bool> isAttrAssignedToProduct(int index) async {
    List<Map<String, dynamic>> assd=new List<Map<String, dynamic>>();
    try{
      assd= await dbHelper.queryReadGroupAssignedAttribute(productList[index][DatabaseHelper.columnpid]);
      if(assd.length>0){
       // debugPrint('ASSIGNED ATTR PRESENT ${assd.length}');
        return true;
      }else{
        return false;
      }
    }catch(e){
      //debugPrint('ASSIGNED ATTR EXCEPTION ${e}');
      return false;
    }
  }

我的列表磁贴

ListTile(
          contentPadding: EdgeInsets.only(left: height*0.03,right: height*0.03 ),
          onTap: (){
            Navigator.push(context,
              MaterialPageRoute(builder: (context) => ProductDetails(pid: productList[index]["pid"],),
                  settings: RouteSettings(name: '/productdetail')),).then((value){
                    setState(() {
                      length=value;
                    });
                    debugPrint('CEHCK BACK FROM DAETAIL $length');
            });
          },
          title: Text(
              '${title}',
              style: TextStyle(fontFamily: 'semibold',color: MyColors.colorPrimaryDark,fontSize: 18.0)),
          subtitle: Text(
              'Price \$${price}',
              style: TextStyle(color: Colors.grey,fontSize: 14.0,fontFamily: 'semibold')),
          trailing:isAttrAssigned( index), //here i'm trying to inflate image
        ),

【问题讨论】:

    标签: android dart flutter


    【解决方案1】:

    您的函数 Widget isAttrAssigned 没有返回任何内容。

    如果你想基于 Future 构建一个小部件,你可以使用 FutureBuilder https://docs.flutter.io/flutter/widgets/FutureBuilder-class.html

    Widget isAttrAssigned(int index) {
       // maybe you want to cache your result here, to avoid doing a call at each rebuild
       Future result = isAttrAssignedToProduct(index);
    
       return FutureBuilder(
          future: result
          builder: (BuildContext context, AsyncSnapshot snapshot) {
         // return widget
       });
    
    }
    

    snapshot.data 是您的布尔值

    switch (snapshot.connectionState) { 
    case ConnectionState.none: 
    return Container(); // empty or show a placeholder 
    case ConnectionState.active: 
    case ConnectionState.waiting: 
    return Text('Loading ...'); 
    case ConnectionState.done: 
    if (snapshot.hasError) { 
    return Text('Error: ${snapshot.error}'); 
    } 
    return attr(snapshot.data); 
    }
    

    【讨论】:

    • 我如何才能在isAttrAssignedToProduct 中找到builder 的值。
    • 我正在返回构建器中的视图,但它显示为空。
    • 抱歉没看懂你的第一个问题,什么显示为空?
    • 内部构建器,当结果为真时返回视图但显示build function must never return null
    • 确定,请检查。
    【解决方案2】:

    您应该使用FutureBuilder。链接中的示例。非常容易使用

    【讨论】:

      猜你喜欢
      • 2019-07-08
      • 2020-08-16
      • 1970-01-01
      • 1970-01-01
      • 2021-09-10
      • 2023-04-11
      • 2019-10-26
      • 2020-10-21
      • 2021-11-11
      相关资源
      最近更新 更多