flutter_autopilot 0.0.1
flutter_autopilot: ^0.0.1 copied to clipboard
An intelligent companion for automated end-to-end testing in Flutter, featuring a DevTools extension with a simple scripting syntax.
example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:flutter_autopilot/flutter_autopilot.dart';
void main() {
Autopilot.initialize();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Autopilot Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const LoginPage(),
);
}
}
class LoginPage extends StatefulWidget {
const LoginPage({super.key});
@override
State<LoginPage> createState() => _LoginPageState();
}
class _LoginPageState extends State<LoginPage> {
final _emailController = TextEditingController();
final _passwordController = TextEditingController();
void _login() {
Navigator.of(context).pushReplacement(
MaterialPageRoute(
builder: (_) => DashboardPage(email: _emailController.text),
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Autopilot Demo - Login')),
body: Center(
child: SizedBox(
width: 350,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text('Please login to continue'),
const SizedBox(height: 20),
TextField(
key: const Key('email_field'),
controller: _emailController,
decoration: const InputDecoration(
labelText: 'Email',
border: OutlineInputBorder(),
),
),
const SizedBox(height: 12),
TextField(
key: const Key('password_field'),
controller: _passwordController,
obscureText: true,
decoration: const InputDecoration(
labelText: 'Password',
border: OutlineInputBorder(),
),
),
const SizedBox(height: 20),
ElevatedButton(
key: const Key('login_btn'),
onPressed: _login,
child: const Text('Login'),
),
],
),
),
),
);
}
}
class DashboardPage extends StatelessWidget {
final String email;
const DashboardPage({super.key, required this.email});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Dashboard'),
actions: [
TextButton.icon(
key: const Key('logout_btn'),
onPressed: () {
Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (_) => const LoginPage()),
);
},
icon: const Icon(Icons.logout),
label: const Text('Logout'),
),
],
),
body: ListView(
key: const Key('main_list'),
padding: const EdgeInsets.all(16),
children: [
const Text(
'Welcome to the Dashboard!',
style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
),
const SizedBox(height: 8),
Text('Logged in as: $email'),
const SizedBox(height: 24),
...List.generate(20, (index) {
return Card(
child: ListTile(
leading: CircleAvatar(child: Text('${index + 1}')),
title: Text('Item ${index + 1}'),
subtitle: Text('Description for item ${index + 1}'),
),
);
}),
],
),
);
}
}