Потому что каждый раз возвращаешь одного и того же ребенка. (который уже построен)
Если вы хотите, чтобы функция сборки вызывалась каждый раз, когда вам нужно использовать LayoutBuilder.
Проверьте мой код с вашим кодом и моими изменениями
Codepen
import 'package:flutter/material.dart';
void main() {
runApp(
MaterialApp(
home: MyTest(),
),
);
}
class MyTest extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: AAA(
child: (context) => BBB(),
),
),
),
);
}
}
class AAA extends StatefulWidget {
AAA({Key key, @required this.child}) : super(key: key);
final Widget Function(BuildContext) child;
@override
_AAAState createState() => _AAAState();
}
class _AAAState extends State<AAA> {
@override
Widget build(BuildContext context) {
print("AAA's build function.");
return FlatButton(
onPressed: () {
setState(() {});
},
child: LayoutBuilder(builder: (context, constrains) => widget.child(context)));
}
}
class BBB extends StatefulWidget {
@override
_BBBState createState() => _BBBState();
}
class _BBBState extends State<BBB> {
static int p = 0;
@override
Widget build(BuildContext context) {
p++;
return Text("text$p");
}
}