Flutter插件iOS代码如何实现提示

我在开发Flutter插件时遇到了iOS端的问题:如何在原生iOS代码中实现提示功能?比如弹出一个Toast或者AlertDialog。我尝试了UIAlertController但是不知道如何从Flutter端触发,也不确定是否需要通过MethodChannel来通信。有哪位有经验的大佬能分享一下具体的实现步骤和最佳实践吗?最好能附带简单的代码示例。

2 回复

在Flutter插件iOS端实现提示功能,可使用UIAlertController。例如:

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"内容" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *action = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil];
[alert addAction:action];
[self presentViewController:alert animated:YES completion:nil];

通过Method Channel调用原生代码即可在Flutter中触发提示。

更多关于Flutter插件iOS代码如何实现提示的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter插件中实现iOS提示功能,可以通过以下几种方式:

1. 使用UIAlertController(推荐)

// iOS原生代码
#import <UIKit/UIKit.h>

- (void)showAlertWithTitle:(NSString *)title message:(NSString *)message {
    UIAlertController *alert = [UIAlertController 
        alertControllerWithTitle:title
        message:message
        preferredStyle:UIAlertControllerStyleAlert];
    
    UIAlertAction *okAction = [UIAlertAction 
        actionWithTitle:@"确定"
        style:UIAlertActionStyleDefault
        handler:nil];
    
    [alert addAction:okAction];
    
    UIViewController *rootViewController = 
        [UIApplication sharedApplication].delegate.window.rootViewController;
    [rootViewController presentViewController:alert animated:YES completion:nil];
}

2. Flutter插件方法通道实现

iOS端代码:

#import <Flutter/Flutter.h>

@implementation YourPlugin

+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
    FlutterMethodChannel* channel = [FlutterMethodChannel
        methodChannelWithName:@"your_channel_name"
        binaryMessenger:[registrar messenger]];
    
    YourPlugin* instance = [[YourPlugin alloc] init];
    [registrar addMethodCallDelegate:instance channel:channel];
}

- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
    if ([call.method isEqualToString:@"showAlert"]) {
        NSDictionary *arguments = call.arguments;
        NSString *title = arguments[@"title"];
        NSString *message = arguments[@"message"];
        
        [self showAlertWithTitle:title message:message];
        result(nil);
    } else {
        result(FlutterMethodNotImplemented);
    }
}

@end

Dart端代码:

import 'package:flutter/services.dart';

class YourPlugin {
  static const MethodChannel _channel = 
      MethodChannel('your_channel_name');

  static Future<void> showAlert({
    required String title,
    required String message,
  }) async {
    try {
      await _channel.invokeMethod('showAlert', {
        'title': title,
        'message': message,
      });
    } on PlatformException catch (e) {
      print("Failed to show alert: '${e.message}'");
    }
  }
}

3. 使用Toast样式提示

// 简单的Toast实现
- (void)showToast:(NSString *)message duration:(NSTimeInterval)duration {
    UIAlertController *alert = [UIAlertController 
        alertControllerWithTitle:nil
        message:message
        preferredStyle:UIAlertControllerStyleAlert];
    
    UIViewController *rootViewController = 
        [UIApplication sharedApplication].delegate.window.rootViewController;
    [rootViewController presentViewController:alert animated:YES completion:nil];
    
    // 自动消失
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(duration * NSEC_PER_SEC)), 
        dispatch_get_main_queue(), ^{
        [alert dismissViewControllerAnimated:YES completion:nil];
    });
}

使用方式

在Flutter中调用:

YourPlugin.showAlert(
  title: '提示',
  message: '这是一个iOS原生提示框'
);

这些方法可以让你在Flutter插件中实现iOS端的各种提示功能,包括警告框、确认框和Toast样式的提示。

回到顶部