Дарт: Использование интерфейса выдает ошибку: «неверное переопределение» - PullRequest
0 голосов
/ 20 марта 2020

Я создал небольшой интерфейс:

import ...

abstract class IController {
  void navigateTo(BuildContext context, String routeName);
  Future<LocationData> get location;

  // registration process
  void registerGender(Gender gender);
  void registerBirthday(DateTime birthday);
  Future<bool> register(String email, String password);
}

И затем я попытался реализовать это:

import ...

class Controller implements IController {
  static final Controller _instance = Controller._internal();
  final ServiceAuthenticate _serviceAuth = ServiceAuthenticate();
  final ServiceDatabase _serviceDb = ServiceDatabase();
  final ServiceGPS _serviceGPS = ServiceGPS();
  User _user;
  String _routeName;
  UserData _userData;

  Controller._internal() {
    this._routeName = ROUTE_WELCOME;
  }

  factory Controller() => _instance;

  void navigateTo(BuildContext context, String routeName) {
    this._routeName = routeName;
    Navigator.pushReplacementNamed(context, routeName);
  }

  Future<LocationData> get location async{
    this._userData.location = await this._serviceGPS.location;
    print(this._userData.location);
    return this._userData.location;
  }

  void registerGender(Gender gender){
    this._userData = UserData();
    this._userData.gender = gender;
  }

  void registerBirthday(DateTime birthday) {
    this._userData.birthday = birthday;
  }

  Future<bool> register(String email, String password) async {
    User user = await this._serviceAuth.registerWithEmailAndPassword(email, password);
    if(user == null){
      return false;
    }
    this._user = user;
    return true;
  }
}

Но этот код выдает следующую ошибку:

error: 'Controller.navigateTo' ('void Function(BuildContext, String)') isn't a valid override of 'IController.navigateTo' ('void Function(dynamic, String)'). (invalid_override at [prototype] lib\controller\controller.dart:30)

Похоже, Дарт думает, что BuildContext в IController - это dynamic, но это, очевидно, не тот случай. Как я могу это исправить? Я новичок в Дарт и не знаю, что делать. Спасибо за помощь:)

1 Ответ

0 голосов
/ 20 марта 2020

Я тупой. Мое утверждение импорта было неверным. Строка

import 'package:prototype/Controller/IController.dart';

вызвала эту ошибку, поскольку папка controller начинается с строчной буквы Буква.

Правильный оператор импорта -

import 'package:prototype/controller/IController.dart';

Но независимо от моей глупой ошибки сообщение об ошибке довольно интересное.

...