// 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/widgets.dart';

// Test file used by `create_test.dart` to verify that `flutter create` sets up
// `analysis_options.yaml` correctly to activate certain lints and ensures
// that lints not playing well with Flutter remain disabled.

class NoConstructor extends StatelessWidget {
  // LINT: Missing constructor generates use_key_in_widget_constructors warning.

  @override
  Widget build(BuildContext context) => Container();
}

class NoConstConstructor extends StatelessWidget {
  // LINT: Missing const constructor generates prefer_const_constructors_in_immutables warning.
  NoConstConstructor({Key? key, required this.name }) : super(key: key);

  final String name;

  @override
  Widget build(BuildContext context) {
    // NO LINT: Can type local variables without omit_local_variable_types warning.
    final String text = 'Hello $name';

    return Container(
      // LINT: "Color(0x1)" generates use_full_hex_values_for_flutter_colors warning.
      color: const Color(0x1),
      child: Text(text),
    );
  }
}

Future<void> playAsync(AnimationController controller) async {
  // NO LINT: AnimationController API can be called without await and without
  // marking Future as unawaited, https://github.com/dart-lang/linter/issues/2513.
  controller.forward();
}

Future<void> pushAsync(NavigatorState navigator) async {
  // NO LINT: Navigator API can be called without await and without
  // marking Future as unawaited, https://github.com/dart-lang/linter/issues/2513.
  navigator.pushNamed('foo');
}

// NO LINT: Can extend ChangeNotifier without warning, https://github.com/dart-lang/sdk/issues/45343.
class ExtendingChangeNotifier extends ChangeNotifier { }

// NO LINT: Can mixin ChangeNotifier without warning, https://github.com/dart-lang/sdk/issues/45343.
class MixingChangeNotifier with ChangeNotifier { }

// NO LINT: Can extend WidgetsBindingObserver without warning, https://github.com/dart-lang/sdk/issues/45343.
class ExtendingWidgetsBindingObserver extends WidgetsBindingObserver { }

// NO LINT: Can mixin WidgetsBindingObserver without warning, https://github.com/dart-lang/sdk/issues/45343.
class MixingWidgetsBindingObserver with WidgetsBindingObserver { }