// Copyright 2020 The Flutter team. 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/material.dart';
import 'package:flutter/services.dart';
import 'package:platform_channels/src/counter_method_channel.dart';

/// The widget demonstrates how to use [MethodChannel] to invoke platform methods.
/// It has two [FilledButton]s to increment and decrement the value of
/// [count], and a [Text] widget to display its value.
class MethodChannelDemo extends StatefulWidget {
  const MethodChannelDemo({super.key});

  @override
  State<MethodChannelDemo> createState() => _MethodChannelDemoState();
}

class _MethodChannelDemoState extends State<MethodChannelDemo> {
  int count = 0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('MethodChannel Demo'),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Text(
            'Value of count is $count',
            style: Theme.of(context).textTheme.headlineSmall,
          ),
          const SizedBox(
            height: 16,
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: [
              // Whenever users press the FilledButton, it invokes
              // Counter.increment method to increment the value of count.
              FilledButton.icon(
                onPressed: () async {
                  try {
                    final value = await Counter.increment(counterValue: count);
                    setState(() => count = value);
                  } catch (error) {
                    if (!context.mounted) return;
                    showErrorMessage(
                      context,
                      (error as PlatformException).message!,
                    );
                  }
                },
                icon: const Icon(Icons.add),
                label: const Text('Increment'),
              ),

              // Whenever users press the FilledButton, it invokes
              // Counter.decrement method to decrement the value of count.
              FilledButton.icon(
                onPressed: () async {
                  try {
                    final value = await Counter.decrement(counterValue: count);
                    setState(() => count = value);
                  } catch (error) {
                    if (!context.mounted) return;
                    showErrorMessage(
                      context,
                      (error as PlatformException).message!,
                    );
                  }
                },
                icon: const Icon(Icons.remove),
                label: const Text('Decrement'),
              )
            ],
          )
        ],
      ),
    );
  }

  void showErrorMessage(BuildContext context, String errorMessage) {
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(
        content: Text(errorMessage),
      ),
    );
  }
}