Dart / Flutter Проблема с вызовом фабричного конструктора модели - PullRequest
1 голос
/ 16 февраля 2020

У меня есть класс модели для 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);
  }
}
...