// 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:platform_channels/src/counter_method_channel.dart';

/// The widget demonstrates how to use [MethodChannel] to invoke platform methods.
/// It has two [RaisedButton]s to increment and decrement the value of
/// [count], and a [Text] widget to display its value.
class MethodChannelDemo extends StatefulWidget {
  @override
  _MethodChannelDemoState 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: Builder(
        builder: (context) {
          return Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(
                'Value of count is $count',
                style: Theme.of(context).textTheme.headline5,
              ),
              SizedBox(
                height: 16,
              ),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: [
                  // Whenever users press the RaisedButton, it invokes
                  // Counter.increment method to increment the value of count.
                  RaisedButton.icon(
                    onPressed: () async {
                      try {
                        final value =
                            await Counter.increment(counterValue: count);
                        setState(() => count = value);
                      } catch (error) {
                        showErrorMessage(
                          context,
                          error.message as String,
                        );
                      }
                    },
                    icon: Icon(Icons.add),
                    label: Text('Increment'),
                  ),

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

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