Flutter Android Toast Message(flutter访问Android Toast Message)

Android Toast通知可用于向用户发送快速消息,并在几秒钟后消失。

但是当涉及Flutter时,没有直接的方式来显示这些Toast消息。因此,我们需要找到一种替代方法来实现它。在这种情况下,platform将是您的朋友。

lib/main.dart

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  /// 创建一个MethodChannel类的对象
  static const platform = const MethodChannel("toast.flutter.io/toast");
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'This is Toast Tutorial',
            )
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _showToast,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }

  void _showToast() {
    /// 将唯一的通道名称传递给构造函数。此通道名称用于唯一标识每个通道。
    platform.invokeMethod("showToast", {"message": "xxxxx"});
  }
}

android/app/src/main/java/com/example/flutter_toast/MainActivity.java

package com.example.flutter_toast;

import android.os.Bundle;
import android.widget.Toast;

import io.flutter.app.FlutterActivity;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugins.GeneratedPluginRegistrant;

import java.util.Map;

public class MainActivity extends FlutterActivity {
  // 创建一个变量来分配通道名称, 在这里,我们需要使用我们在flutter代码中指定的相同通道名称。
  private static final String CHANNEL = "toast.flutter.io/toast";

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    GeneratedPluginRegistrant.registerWith(this);
    
    // 需要创建一个新的MethodChannel对象
    // 作为构造函数的第二个参数,我们需要传递通道名称
    // 当我们从flutter中调用invokeMethod时,方法调用处理程序将调用
    new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(new MethodChannel.MethodCallHandler() {
    
      // 在onMethodCall里面,我们需要检查哪个方法。因为我们可以通过单一平台渠道调用多种方法
      @Override
      public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) {
        if (methodCall.method.equals("showToast")) {
          // 检查参数
          if (!(methodCall.arguments instanceof Map)) {
            throw new IllegalArgumentException("Map argument expected");
          }
          System.out.println(methodCall.arguments);
          Toast.makeText(getApplicationContext(), (String) methodCall.argument("message"), Toast.LENGTH_SHORT).show();
        } else {
          result.notImplemented();
        }
      }
    });
  }
}

猜你喜欢

转载自www.cnblogs.com/ajanuw/p/11376546.html