0

我有这堂课:

 class BeatCounter extends StateNotifier<int> {
 BeatCounter() : super(8);

 int get counter => state;

 void increment() {
   if (state < 16) {
     state++;
     print('State $state');
   } else
   return;
 }

  void decrement() {
   if (state > 1) {
     state--;
   } else
     return;
   }
 }

   final beatCounterProvider = StateNotifierProvider((ref) => BeatCounter());

并且想要访问扩展我不想(/知道如何)更改的 StatefullWidget 的类中的状态。所以我不能用'with'来扩展'ConsumerWidget'或'HookWidget'。我如何获得这堂课的状态?

class ChordsTrack extends BaseWidget {
  ChordsTrack({Key key, @required this.sample}) : super(key: key);
  final SOUND_SAMPLE sample;

  @override
  _ChordsTrackState createState() => _ChordsTrackState();
} 

class _ChordsTrackState extends BaseState<ChordsTrack> {
  MultitrackChordBassBoxCreator multitrackBox = 
  MultitrackChordBassBoxCreator();

   List<bool> _data = List.generate(***BeatCounter().state***, (i) => false);

   @override
   void on<Signal>(Signal signal) {
    setState(() => _data = AudioEngine.trackdata[widget.sample]);
   }
 ...
 }

新手问题,我知道,但非常感谢一些帮助。

4

2 回答 2

0

只需context.read(beatCounterProvider)在您的initState.

class _ChordsTrackState extends BaseState<ChordsTrack> {
  MultitrackChordBassBoxCreator multitrackBox = 
  MultitrackChordBassBoxCreator();

   List<bool> _data;
   
   @override
   void initState(){
      super.initState();
      _data = List.generate(context.read(beatCounterProvider).state, (i) => false);
   }  

   @override
   void on<Signal>(Signal signal) {
    setState(() => _data = AudioEngine.trackdata[widget.sample]);
   }
 ...
 }
于 2020-12-28T18:20:03.893 回答
0

我是这样解决的。

class BeatCounter extends StateNotifier<int> {
  BeatCounter() : super(8);

  static int counter = 8; //*

  void increment() {
     if (state < 16) {
      state++;
      counter++; //*
      } else
        return;
   }

   void decrement() {
     if (state > 1) {
        state--;
        counter--;//*
       } else
       return;
   }
}

有更好的选择吗?

于 2020-11-15T23:13:15.203 回答