BLoCの構造<1>

9459 ワード

これについて書く人はたくさんいますが、私のように理解できない人のために書く人は少ないです.ほとんどがボブおじさんです.
だから簡単に説明できるところがあるかと思って、参考にしたコードを見つけました.
https://github.com/VGVentures/slide_puzzle
それがどのように実現されているのかを一つ一つ掘り起こしたい.

起動バー?ベルトを起動!


対応するコードが表示されると、ブートが表示されます.ネットから来たのかどうかはわかりませんが、これがなぜ突き出たのか考えています.しかし、ここでいう案内帯はそうではありません.
Bootstrap(Bootstrap)は通常、最初から知っていた一連のプロセスを指す.
そういう意味!これは最初に実行されたコードと考えられます.
class AppBlocObserver extends BlocObserver {
  
  void onError(BlocBase bloc, Object error, StackTrace stackTrace) {
    super.onError(bloc, error, stackTrace);
    log('error: ${bloc.runtimeType},$stackTrace. $error');
  }

  
  void onChange(BlocBase bloc, Change change) {
    super.onChange(bloc, change);
    if (bloc is Cubic) log(change.toString());
  }

  
  void onTransition(Bloc bloc, Transition transition) {
    super.onTransition(bloc, transition);
    log(transition.toString());
  }
}
エラーとトレンドチェーンブランチでは、Javaのaopと同様にログを残すコードを挿入できます.navigatorまたはblogのステータスに変更すると、コードが実行され、デバッグが容易になります.
void main() {
  BlocOverrides.runZoned(() => runApp(const BlocTest()),
      blocObserver: AppBlocObserver());
}

class BlocTest extends StatelessWidget {
  const BlocTest({Key? key}) : super(key: key);

  
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: Scaffold(
        body: Splash(),
      ),
    );
  }
}
このようにrunZendを使用してAppを実行すると、アプリケーション内のBlockの変化を追跡できます.

boilerplate code......... 書いたり書いたりします。


テンプレートコードは基本的に書くコードです.基本的に動作のために書かれたコードですが、まずBlockに必要なコードを見てみましょう.
-コンポーネントフォルダ
ブロ
--部品bloc.dart
--部品state.dart
--部品event.dart
観点
--部品view.dart
ウィジェット
--その他の内部部品を検索します.dart
部品.dart
これを作るのが1ページです.もちろんそうする必要はありませんが、もしみんながよく知っているところでそう使うなら、彼には理由があるのではないでしょうか.
そしてこう書くと、きちんと整理されたコードが見えます.問題は、フォルダがたくさんあるけど.
では、一つずつ見てみましょう.

部品。dart他の内部部品。dart


この部分は簡単で、他の内部コンポーネントが使用する簡単な状態は、ステータスコンポーネントの使用とは無関係です.dartは、子供たちをフォルダの内部の出口に縛る手段です.
大体次の通りです.
export './bloc/widget_bloc.dart
export './view/widget_view.dart
...
...
このようにコードなしでエクスポートされるファイルのみです.

コンポーネントview。dart


ここも簡単ですが、少し知りたいことがあります.
部品でのみ使用されるBlock.
関連コードは簡単に書けます.詳細は上のハーブからも見つけることができます.
stless 위젯=>return BlocProvider(child:위젯_view,create:위젯bloc)....

stless 위젯_view => return 해당 위젯의 뷰
これで使えます.
残りの次は