// This file was generated using bin/screenshot.dart.template and
// bin/sample_page.dart. For more information see README.md.

import 'package:flutter_driver/driver_extension.dart';
import 'package:flutter/material.dart';

@(imports)

class SampleScreenshots extends StatefulWidget {
  @override
  SampleScreenshotsState createState() => new SampleScreenshotsState();
}

class SampleScreenshotsState extends State<SampleScreenshots> {
  final List<Widget> samples = <Widget>[
    @(widgets)
  ];
  int sampleIndex = 0;

  @override
  Widget build(BuildContext context) {
    return new GestureDetector(
      key: const ValueKey<String>('screenshotGestureDetector'),
      behavior: HitTestBehavior.opaque,
      onTap: () {
        setState(() {
          sampleIndex += 1;
        });
      },
      child: new IgnorePointer(
        child: samples[sampleIndex % samples.length],
      ),
    );
  }
}

void main() {
  enableFlutterDriverExtension();
  WidgetsApp.debugAllowBannerOverride = false; // No "debug" banner.
  runApp(new SampleScreenshots());
}
