Как расширить класс, если один из необязательных аргументов не является переменной-членом и требуется? - PullRequest
3 голосов
/ 26 мая 2019

Вот код. У нас есть TabController (из sdk), я расширяю этот TabController класс:

class TabController extends ChangeNotifier {
   int length;
   TabController({ int initialIndex = 0,
      @required this.length, 
      @required TickerProvider vSync
   }):assert(length != null),
       assert(vSync != null);

} //end of TabController

class AppTabController extends TabController {

    AppTabController(int mInitialIndex,
       int mLength,
      TickerProvider mVsync):super(length: mLength, mVsync: vsync ){}

}

Теперь этот конструктор AppTabController выдает синтаксическую ошибку. Кажется, я не могу расширить TabController class, потому что:

  1. vsync не является переменной-членом TabController
  2. В самом конструкторе TabController есть некоторые утверждения, из-за которых, если требуемые аргументы не будут переданы, произойдет сбой.

Это ошибки компиляции:

  1. ошибка: названный параметр vsync не определен

1 Ответ

1 голос
/ 26 мая 2019
  1. this.length требуется переменная-член.
  2. @required требует assert
  3. использовать : вместо =
  4. сделать классрасширен TickerProvider, потому что это abstract class.Я сделал myTickerProvider в качестве примера.
AppTabController appTabController = new AppTabController(mLength:10, mVsync:new myTickerProvider());

class TabController extends ChangeNotifier {
  int length;
  TabController({
    int initialIndex = 0,
    @required this.length,
    @required TickerProvider vSync
  }) : assert(length != null),
       assert(vSync != null);
} //end of TabController

class AppTabController extends TabController {

  AppTabController({int mInitialIndex,
      int mLength,
      TickerProvider mVsync}):super(length: mLength, vSync: mVsync);
}


class myTickerProvider extends TickerProvider{
  @override
  Ticker createTicker(onTick) {
    // TODO: implement createTicker
    return null;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...