如何在块颤动中处理列表模型
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<LoginRespon>' 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<LoginRespon>
【讨论】:
有没有办法把String result
改成List
根据需要的数据类型更改StreamController。以上是关于如何在块颤动中处理列表模型的主要内容,如果未能解决你的问题,请参考以下文章