【问题标题】:Dirty state error in flutter颤动中的脏状态错误
【发布时间】:2019-01-29 09:08:11
【问题描述】:

fifth.dart

import 'package:flutter/material.dart';
import 'package:emas_app/Dependant.dart' as Dep;
import 'package:emas_app/crm_dependent_list_model.dart';
import 'dart:convert';
import 'dart:async';
import 'package:http/http.dart' as http;
import 'package:emas_app/crm_dep_entitlement_model.dart';

final String url = "http://crm.emastpa.com.my/MemberInfo.json";

//Future to get list of dependent names
Future<List<DependantModel>> fetchUserInfo() async{

  http.Response response = await http.get(url);
  var responsejson = json.decode(response.body);

  return(responsejson[0]['Dependents'] as List)
      .map((user) => DependantModel.fromJson(user))
      .toList();
}

class Fifth extends StatefulWidget {
  @override
  _FifthState createState() => _FifthState();
}

class _FifthState extends State<Fifth> {

  static Future<List<DependantModel>> depState;

  @override
  void initState() {
    depState = fetchUserInfo();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {

    //ListView.builder inside FutureBuilder
    var futureBuilder = new FutureBuilder<List<DependantModel>>(
        future: depState,
        builder: (context, snapshot){
          switch(snapshot.connectionState){
            case ConnectionState.none:
            case ConnectionState.waiting:
              return new Center(
                child: new CircularProgressIndicator(),
              );
            default:
              if(snapshot.hasError){
                return new Text(snapshot.error);
              }else{

                List<DependantModel> user = snapshot.data;

                return new ListView.builder(
                    itemCount: user.length,
                    itemBuilder: (context, index){
                      return new Column(
                        children: <Widget>[
                          new ListTile(
                            title: new Text(user[index].name,
                                style: TextStyle(fontSize: 20.0)),
                            subtitle: new Text(user[index].relationship,
                                style: TextStyle(fontSize: 15.0)),
                            trailing: new MaterialButton(color: Colors.greenAccent,
                                textColor: Colors.white,
                                child: new Text("More"),
                                onPressed: (){
                                  Navigator.push(context,
                                      new MaterialPageRoute(builder: (context) => Dep.Dependents(name: user[index].name)));
                                }
                            ),
                          )
                        ],
                      );
                    });
              }
          }
        });

    return new Scaffold(
      body: futureBuilder,
    );
  }
}

我刚刚在我的颤振项目中出现以下错误。 I/flutter (12737):══╡小部件库发现异常╞═════════════════════════════════════════════ ═════════════════════════ I/flutter (12737):在构建 FutureBuilder>(dirty, state: 时抛出了以下断言 我/颤振(12737):_FutureBuilderState>#b09b6): I/flutter (12737):“NoSuchMethodError”类型不是“String”类型的子类型 I/flutter (12737):要么断言表明框架本身有错误,要么我们应该提供大量 I/flutter (12737):此错误消息中的更多信息可帮助您确定和修复根本原因。 I/flutter (12737):无论哪种情况,请通过在 GitHub 上提交错误来报告此断言:

什么是脏状态?

【问题讨论】:

  • 我猜问题出在这里。返回新文本(snapshot.error);尝试评论该行并检查。它说,“NoSuchMethodError”不是“String”类型的子类型,所以我猜问题就在那里
  • @JaswantSingh 我已经评论了这条线,但它仍然无法正常工作。 snapshot.hasError 将返回一个提及错误的文本 (snapshot.error)。所以这部分会捕获错误,不会有助于修复提到的错误。

标签: dart flutter


【解决方案1】:

正如错误提示,NoSuchMethodError,您已将 Future 的结果分配给一个变量,但 FutureBuilder 期望该构建器当前连接到的未来异步计算,depState 不是一种方法。可以直接在FutureBuilder中设置future: fetchUserInfo

试试这个,

@override
  Widget build(BuildContext context) {    
   var futureBuilder = new FutureBuilder<List<DependantModel>>(
        future: fetchUserInfo, //your Future method
        builder: (context, snapshot){
          //Your code goes here
          }
        });

    return new Scaffold(
      body: futureBuilder,
    );
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 2020-11-28
    • 2019-06-08
    • 1970-01-01
    • 2021-08-21
    • 2020-12-24
    相关资源
    最近更新 更多