У меня есть класс модели для Inbox, который содержит нормальный конструктор и фабричный конструктор, который принимает список. Кажется, все работает, за исключением того, что после вызова конструктора фабрики код не переходит к следующей строке. _inbox = Inbox.fromList (_fetchInboxResBody ['inbox']);
Вот код, в котором я вызвал конструктор фабрики Inbox
import 'package:flutter/foundation.dart';
import 'dart:async';
import 'package:http/http.dart' as http;
import 'dart:convert';
import '../models/inbox.dart';
class InboxProvider with ChangeNotifier {
final _rootUrl = 'http://localhost:8080';
// final _rootUrl = 'http://firstcarestartup.appspot.com';
//inbox as an array
Map<String, dynamic> _fetchInboxResBody;
Map<String, dynamic> _fetchInboxResError;
Inbox _inbox;
//getters
Inbox get inbox => _inbox;
Map<String, dynamic> get fetchInboxResError => _fetchInboxResError;
fetchInbox(String accessToken) async {
print('fetching inbox');
try {
var response = await http.get('$_rootUrl/customer/inbox', headers: {
'Content-Type': 'application/json',
'Authorization': 'bearer $accessToken'
});
_fetchInboxResBody = json.decode(response.body);
if (_fetchInboxResBody.containsKey('error')) {
_fetchInboxResError = _fetchInboxResBody;
notifyListeners();
} else {
_fetchInboxResError = null;
print('yeah1');
_inbox = Inbox.fromList(_fetchInboxResBody['inbox']);
print('yeah');
notifyListeners();
}
} catch (e) {
_fetchInboxResError = {'error': e.toString()};
notifyListeners();
}
}
}
А вот inbox.dart
import 'package:flutter/material.dart';
class Inbox {
List<Message> messages;
int unread;
Inbox({@required this.messages, @required this.unread});
factory Inbox.fromList(List response) {
int counter = 0;
List msgs = new List();
response.forEach((f) {
if(f['read'] == false){
counter++;
}
Message msg = Message.fromMap(f);
msgs.add(msg);
});
print(msgs[2].content);
return new Inbox(messages: msgs, unread: counter);
}
}
class Message {
String content;
String date;
String header;
String id;
String imageUrl;
bool read;
String type;
Message(
{@required this.content,
@required this.date,
@required this.header,
@required this.id,
this.imageUrl,
@required this.read,
this.type});
factory Message.fromMap(Map messageMap) {
var content = messageMap['content'];
var date = messageMap['date'];
var header = messageMap['header'];
var id = messageMap['id'];
var imageUrl = messageMap['image'] ?? null;
var read = messageMap['read'];
var type = messageMap['type'];
return new Message(content: content, date: date, header: header, id: id, read: read, imageUrl: imageUrl, type: type);
}
}