2

によるとFlutter Documentation

ウィジェットの構成が変更されるたびに didUpdateWidget が呼び出されます

ただし、次のコードでは、初回のdidUpdateWidget直後に呼び出されます。initState

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Test(),
    );
  }
}

class Test extends StatefulWidget {
  @override
  _TestState createState() => _TestState();
}

class _TestState extends State<Test> {

  @override
  void initState() {
    print("initState called");
    super.initState();
  }

  @override
  void didUpdateWidget(Test oldWidget) {
    print("didUpdateWidget called");
    super.didUpdateWidget(oldWidget);
  }

  @override
  Widget build(BuildContext context) {
    return Container();
  }
}


// output
//
// initState called
// didUpdateWidget called

誰かがなぜこれが起こるのか説明できますか? どうすれば全体を比較できますoldWidgetwidget

ありがとうございました


@pskink が述べたように更新するdidUpdateWidgetと、直後に呼び出されるのではなくinitState、最初のビルドの後に呼び出されます

さらに別の質問は、次のコードで最初のビルドの後に呼び出される理由です。

    print("didUpdateWidget called");   <--
    super.didUpdateWidget(oldWidget);  <--

の後に print を呼び出すとsuper.didUpdateWidget(oldWidget);、正常に動作します。

4

0 に答える 0