flutter_gemini_nano 1.0.4 copy "flutter_gemini_nano: ^1.0.4" to clipboard
flutter_gemini_nano: ^1.0.4 copied to clipboard

Flutter plugin for on-device text and multimodal generation using Gemini Nano via ML Kit GenAI on Android.

example/lib/main.dart

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

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      debugShowCheckedModeBanner: false,
      home: GeminiNanoExample(),
    );
  }
}

class GeminiNanoExample extends StatefulWidget {
  const GeminiNanoExample({super.key});

  @override
  State<GeminiNanoExample> createState() => _GeminiNanoExampleState();
}

class _GeminiNanoExampleState extends State<GeminiNanoExample> {
  final _plugin = FlutterGeminiNano();
  final _controller = TextEditingController();

  bool _loading = false;
  bool? _isAvailable;
  String? _result;
  String? _error;

  @override
  void initState() {
    super.initState();
    _checkAvailability();
  }

  Future<void> _checkAvailability() async {
    try {
      final available = await _plugin.isAvailable();
      setState(() {
        _isAvailable = available;
      });
    } catch (_) {
      setState(() {
        _isAvailable = false;
      });
    }
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  Future<void> _runGemini() async {
    if (_isAvailable != true) {
      setState(() {
        _error = 'Gemini Nano no available on this device.';
      });
      return;
    }

    setState(() {
      _loading = true;
      _result = null;
      _error = null;
    });

    try {
      final response = await _plugin.generate(
        prompt: _controller.text,
        temperature: 0.7,
        maxOutputTokens: 128,
      );

      setState(() {
        _result = response.result ?? 'Sem resposta';
      });
    } on UnsupportedError catch (e) {
      setState(() {
        _error = e.message;
      });
    } catch (e) {
      setState(() {
        _error = e.toString();
      });
    } finally {
      setState(() {
        _loading = false;
      });
    }
  }

  Widget _availabilityStatus() {
    if (_isAvailable == null) {
      return const Row(
        children: [
          SizedBox(
            height: 16,
            width: 16,
            child: CircularProgressIndicator(strokeWidth: 2),
          ),
          SizedBox(width: 8),
          Text('Verificando Gemini Nano...'),
        ],
      );
    }

    return Row(
      children: [
        Icon(
          _isAvailable! ? Icons.check_circle : Icons.cancel,
          color: _isAvailable! ? Colors.green : Colors.red,
          size: 18,
        ),
        const SizedBox(width: 8),
        Text(
          _isAvailable! ? 'Gemini Nano disponível' : 'Gemini Nano indisponível',
        ),
      ],
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Flutter Gemini Nano Example')),
      body: Padding(
        padding: const EdgeInsets.all(16),
        child: Column(
          children: [
            _availabilityStatus(),
            const SizedBox(height: 12),
            TextField(
              controller: _controller,
              decoration: const InputDecoration(
                labelText: 'Prompt',
                border: OutlineInputBorder(),
              ),
              minLines: 2,
              maxLines: 4,
            ),
            const SizedBox(height: 12),
            SizedBox(
              width: double.infinity,
              child: ElevatedButton(
                onPressed: (_loading || _isAvailable != true)
                    ? null
                    : _runGemini,
                child: _loading
                    ? const SizedBox(
                        height: 20,
                        width: 20,
                        child: CircularProgressIndicator(strokeWidth: 2),
                      )
                    : const Text('Executar Gemini Nano'),
              ),
            ),
            const SizedBox(height: 16),
            if (_result != null)
              Expanded(
                child: SingleChildScrollView(
                  child: Text(_result!, style: const TextStyle(fontSize: 16)),
                ),
              ),
            if (_error != null)
              Text(_error!, style: const TextStyle(color: Colors.red)),
          ],
        ),
      ),
    );
  }
}
1
likes
0
points
226
downloads

Publisher

verified publisheralexandre1992.dev.br

Weekly Downloads

Flutter plugin for on-device text and multimodal generation using Gemini Nano via ML Kit GenAI on Android.

Repository (GitHub)
View/report issues

Topics

#ai #generative-ai #gemini #on-device #android

License

unknown (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on flutter_gemini_nano

Packages that implement flutter_gemini_nano