// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:flutter/material.dart';

void main() {
  runApp(const MaterialApp(home: Test()));
}

class Test extends StatefulWidget {
  const Test({ super.key });

  @override
  State<Test> createState() => _TestState();
}

class _TestState extends State<Test> {
  bool _triggered = false;

  @override
  void reassemble() {
    _triggered = true;
    super.reassemble();
  }

  @override
  Widget build(BuildContext context) {
    if (!_triggered) {
      return const SizedBox.shrink();
    }
    return Row(children: const <Widget>[
      SizedBox(width: 10000.0),
      SizedBox(width: 10000.0),
      SizedBox(width: 10000.0),
      SizedBox(width: 10000.0),
      SizedBox(width: 10000.0),
      SizedBox(width: 10000.0),
      SizedBox(width: 10000.0),
    ]);
  }
}
