semantic_gen 0.2.0 copy "semantic_gen: ^0.2.0" to clipboard
semantic_gen: ^0.2.0 copied to clipboard

unlisted

Compile-time helpers that expose Selenium-friendly semantics for Flutter Web and Widget tests.

example/lib/main.dart

// ignore_for_file: unnecessary_library_name

@AutoWrapWidgets(['ElevatedButton', 'DropdownButton'])
library semantic_gen_example;

import 'package:flutter/material.dart';
import 'package:semantic_gen/semantic_gen.dart';

part 'main.tagged.g.dart';

void main() {
  runApp(const ExampleApp());
}

/// Demo application showcasing semantic_gen integration.
class ExampleApp extends StatelessWidget {
  /// Creates an [ExampleApp].
  const ExampleApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'semantic_gen demo',
      home: Scaffold(
        appBar: AppBar(
          title: const Text('semantic_gen demo'),
        ),
        body: const Padding(
          padding: EdgeInsets.all(24),
          child: LoginForm(),
        ),
      ),
    );
  }
}

/// Login form demonstrating auto-tagged widgets.
@AutoTag('auth')
class LoginForm extends StatelessWidget {
  /// Creates a [LoginForm].
  const LoginForm({super.key});

  @override
  Widget build(BuildContext context) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: const <Widget>[
        TextTagged(
          child: Text(
            'Sign in to your account',
            textAlign: TextAlign.center,
          ),
        ),
        SizedBox(height: 24),
        TextFieldTagged(
          child: TextField(
            decoration: InputDecoration(labelText: 'Email'),
          ),
        ),
        SizedBox(height: 16),
        TextFieldTagged(
          child: TextField(
            decoration: InputDecoration(labelText: 'Password'),
            obscureText: true,
          ),
        ),
        SizedBox(height: 24),
        LoginButtonTagged(
          child: LoginButton(),
        ),
      ],
    );
  }
}

/// Submit button that relies on a manual `testTag` wrapper.
@AutoTag('auth')
class LoginButton extends StatelessWidget {
  /// Creates a [LoginButton].
  const LoginButton({super.key});

  @override
  Widget build(BuildContext context) {
    return testTag(
      'auth:submit',
      ElevatedButton(
        onPressed: () {
          final scaffoldMessenger = ScaffoldMessenger.of(context);
          scaffoldMessenger.showSnackBar(
            const SnackBar(content: Text('Signing in...')),
          );
        },
        child: const Text('Sign in'),
      ),
      button: true,
      container: true,
    );
  }
}
0
likes
0
points
15
downloads

Documentation

Documentation

Publisher

verified publishercallahanwilliam.com

Weekly Downloads

Compile-time helpers that expose Selenium-friendly semantics for Flutter Web and Widget tests.

Repository (GitHub)
View/report issues

Topics

#testing #selenium #source-gen #accessibility #web

License

unknown (license)

Dependencies

analyzer, build, collection, flutter, meta, source_gen, yaml

More

Packages that depend on semantic_gen