

下記のコードはコンパイルできており、`context.go` も機能します。  
わからないことは、このcontextはどこで宣言されているのか？です。

そこで、`print(context)` を出力させたところ以下のような内容でした。

[code]

    test(dirty, state: _test#b8da0(lifecycle state: created))
    
[/code]

宣言されていないcontext変数が使える理由がわかりません。

**該当のコード:**

[code]

    import 'package:flutter/material.dart';
    import 'package:go_router/go_router.dart';
    class test extends Statefulwidget{@override State<test>createState()=>_test();}
    class _test extends State<test>{
     void check(){context.go('/');}
     @override void initState(){super.initState();check();}
     @override Widget build(buildContext context){}
    }
    
[/code]


CC BY-SA 4.0
2023-12-01T07:05:49.067
96950
2023-12-02T08:37:56.523
2023-12-01T07:20:35.720
3060
60585
question
flutter dart
Stateを継承したクラス内でのbuild外でのcontextの使用


そういう仕様で実装されているということです。

詳細はAPIのヘルプを参照してください。  
<https://api.flutter.dev/flutter/widgets/State/context.html>

簡単に訳すと「StatefulWidget.createState で State オブジェクトを作成した後、initState
を呼び出す前にBuildContext に関連付けます。この関連付けはdestroy が呼び出されるまで有効です。」

実装を見る限り、contextは_elementというStatefulElementを返しています。  
これはcreateStateでState作成直後に設定されているようです。

このStatefulElementはElementの孫クラスになり、ElementでBuildContextをimplementsしているのでBuildContext
としても使えるということになっています。


CC BY-SA 4.0
2023-12-02T08:37:56.523
96955
2023-12-02T08:37:56.523
54446
96950
answer