// 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.

library component1;

import 'package:flutter/material.dart';


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

  static const String _testSentinel = 'Running deferred code';

  @override
  Widget build(BuildContext context) {
    print(_testSentinel);
    return Container(
      padding: const EdgeInsets.all(25),
      color: Colors.blue,
      child: Column(
        children: <Widget>[
          const Text('DeferredWidget', key: Key('DeferredWidget')),
          Image.asset('customassets/flutter_logo.png', key: const Key('DeferredImage')),
        ],
      ),
    );
  }
}
