如何在块颤动中处理列表模型

Posted

技术标签:

【中文标题】如何在块颤动中处理列表模型【英文标题】:How to handle list model in bloc flutter 【发布时间】:2020-08-17 14:59:15 【问题描述】:

我正在尝试在我的登录页面中使用 BLOC.. 但是我总是因为异常而暂停,说 Exception has occurred. _TypeError (type 'List<LoginRespon>' is not a subtype of type 'String') 这里是代码

isClick == true
                                        ? StreamBuilder(
                                            initialData: bloc.inData(_name.text,_password.text),
                                            stream: bloc.loginData,
                                            builder: (context,
                                                AsyncSnapshot snapshot) 
                                              if (snapshot.hasData) 
                                                  print(snapshot.data);
                                                  print('ppp ');

                                                  return Text('ok');
                                                 else
                                                  return Text(snapshot.error
                                                      .toString());
                                            )
                                        : RaisedButton(
                                            child: Text('Login'),
                                            onPressed: () 
                                              setState(() 
                                                isClick = true;
                                              );
                                            ,
                                          ),

这里是块文件

class MyBLoc

  final _repository = Repository();
  final _loginController = StreamController<String>();
  Stream<String> get loginData => _loginController.stream;

final _name = BehaviorSubject<String>();
  final _password = BehaviorSubject<String>();
  saving()
    _repository.saving(_name.value,_password.value);
  


  inData(String name, String password) async 
// I get paused on exception inside this method...
    String result = await _repository.saving(name, password);
    _loginController.sink.add(result);
  


  dispose()
    _input.close();
    _loginController.close();
    _password.close();
  

final bloc = MyBLoc();

这是我的存储库文件

class Repository
  static final userAPIProvider = UserProvider();
  Future saving(String name, String password) => userAPIProvider.saving(name, password);

这是我的提供者

class UserProvider 
  final _url = '...';
  Future<List<LoginRespon>> saving(String name, String password) async 
    List<LoginRespon> datalogin = [];
    try 
      bool trustSelfSigned = true;
      HttpClient httpClient = new HttpClient()
        ..badCertificateCallback =
            ((X509Certificate cert, String host, int port) => trustSelfSigned);
      IOClient client = new IOClient(httpClient);
      print("cek");
      final response = await client.post(_url,
          headers: 
            HttpHeaders.contentTypeHeader: 'application/json',
          ,
          body: json.encode(
            "name": name,
            "pas": password,
          ));
      Map<String, dynamic> responseJson = json.decode(response.body);

      if (responseJson["status"] == "200") 
        datalogin.add(LoginRespon(
            status: responseJson['status'],
            data: Data(
                name: responseJson['data']['name'],
                status: responseJson['data']['status'])));
        return datalogin;
       else 
        print("ppp");
      
     on Exception 
      rethrow;
    
    return datalogin;
  

我的 LoginRespon 模型可在此处获得 how to create a list from json string in flutter 在 inData 方法中的 bloc 文件内发生异常时暂停有没有办法解决这个问题 Exception has occurred. _TypeError (type 'List&lt;LoginRespon&gt;' is not a subtype of type 'String')

【问题讨论】:

代码不清晰,乱七八糟。我找不到 userAPIProvider.saving 方法。是 addSave() 是的。我刚刚编辑了我的代码 【参考方案1】:

在MyBloc中,返回值应该是String

 String result = await _repository.saving(name, password); 

但存储库中的以下行并非如此

Future saving(String name, String password) => userAPIProvider.saving(name, password);

它正在返回List&lt;LoginRespon&gt;

【讨论】:

有没有办法把String result改成List 根据需要的数据类型更改StreamController。

以上是关于如何在块颤动中处理列表模型的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动的多部分请求中发送对象列表?

如何在颤动中使用动画列表对最初渲染的项目进行动画处理

颤动 - 如何在颤动中保存状态选择的单选按钮列表?

如何在颤动中制作变量列表?

如何遍历地图列表并在颤动列表视图中显示文本小部件?

在颤动中向上/向下滚动列表时如何在列表中插入和删除项目?