【问题标题】:flutter email sender as a background process颤动电子邮件发件人作为后台进程
【发布时间】:2022-07-28 03:55:34
【问题描述】:

所以我尝试在 Flutter 中发送电子邮件作为后台进程,而无需浏览 gmail 应用程序,我按照本教程进行操作 https://www.youtube.com/watch?v=RDwst9icjAY 并且除了图标按钮上的“onpressed(){}”功能外,所有东西都在工作,它显示在声明之前无法引用“局部变量”sendEmail”的错误。 尝试将声明移至第一次使用之前,或重命名局部变量,使其不会在封闭范围内隐藏名称。没有快速修复,所以似乎是什么问题?,我尝试在多个地方初始化它,但我想我是这些类型的功能的新手。 这是我的代码

    import 'package:flutter/material.dart';
    import 'package:mailer/mailer.dart';
    import 'package:mailer/smtp_server.dart';
    import 'package:google_sign_in/google_sign_in.dart';

    import 'google_auth_api.dart';

    class emailsend extends StatefulWidget {
    const emailsend({Key? key}) : super(key: key);

    @override
    State<emailsend> createState() => _MainPageState();
    }
    class _MainPageState extends State<emailsend> {

    @override
      Widget build(BuildContext context) {
      return Scaffold(
      appBar: AppBar(
        title: Text('email'),
        centerTitle: true,
      ),
      body: Center(
        child: IconButton(
          icon: Icon(Icons.circle_rounded),
          splashColor: Colors.red,
          color: Colors.red,
          iconSize: 250,
          onPressed:(){ sendEmail},
        ),
      ),
    );

    Future sendEmail() async {
      final user = await GoogleAuthApi.signIn();
      if (user == null) return;
      final email = 'khaledkandli55@gmail.com';
      final auth = await user.authentication;
      final accessToken = '';
      final smptServer = gmailSaslXoauth2(email, accessToken);
      final message = Message()
        ..from = Address(email, 'Khaled')
        ..recipients = ['khaledkandli55@gmail.com']
        ..subject = 'Hello'
        ..text = 'this is atext email';
      try {
        await send(message, smptServer);
        showSnackBar('sent successfully');
      } on MailerException catch (erorr) {
        print(erorr);
      }
    }
  }
    void showSnackBar(String text) {
    final snackBar = SnackBar(
      content: Text(
        text,
        style: TextStyle(fontSize: 20),
      ),
      backgroundColor: Colors.green,
    );
    ScaffoldMessenger.of(context)
      ..removeCurrentSnackBar()
      ..showSnackBar(snackBar);
  }
}    

//第二页

import 'package:google_sign_in/google_sign_in.dart';
 class GoogleAuthApi {
 static final _googleSignIn =
  GoogleSignIn(scopes: ['https://mail.google.com/']);
 static Future<GoogleSignInAccount?> signIn() async {
  if (await _googleSignIn.isSignedIn()) {
  return _googleSignIn.currentUser;
   } else {
   return await _googleSignIn.signIn();
 }
} 
}

【问题讨论】:

    标签: flutter email sms flutter-futurebuilder


    【解决方案1】:

    您缺少对函数的实际调用。

    onPressed: () { sendEmail(); }
    

    或者如果你想使用参考。

    onPressed: sendEmail
    

    【讨论】:

    • 还是同样的错误
    【解决方案2】:

    尝试在构建之前创建 sendEmail 函数并在 onPressed 中调用它 喜欢这段代码

    
    import 'package:flutter/material.dart';
    import 'package:mailer/mailer.dart';
    import 'package:mailer/smtp_server.dart';
    import 'package:google_sign_in/google_sign_in.dart';
    
    class EmailSend extends StatefulWidget {
     const EmailSend({Key? key}) : super(key: key);
    
     @override
     State<EmailSend> createState() => _MainPageState();
    }
    
    class _MainPageState extends State<EmailSend> {
     Future sendEmail() async {
       final user = await GoogleAuthApi.signIn();
       if (user == null) return;
       final email = 'khaledkandli55@gmail.com';
       final auth = await user.authentication;
       final accessToken = '';
       final smptServer = gmailSaslXoauth2(email, accessToken);
       final message = Message()
         ..from = Address(email, 'Khaled')
         ..recipients = ['khaledkandli55@gmail.com']
         ..subject = 'Hello'
         ..text = 'this is atext email';
       try {
         await send(message, smptServer);
         showSnackBar('sent successfully');
       } on MailerException catch (erorr) {
         print(erorr);
       }
     }
    
     @override
     Widget build(BuildContext context) {
       return Scaffold(
         appBar: AppBar(
           title: Text('email'),
           centerTitle: true,
         ),
         body: Center(
           child: ElevatedButton(
             child: Text("Send Email"),
             onPressed: () {
               sendEmail();
             },
           ),
         ),
       );
     }
    
     void showSnackBar(String text) {
       final snackBar = SnackBar(
         content: Text(
           text,
           style: TextStyle(fontSize: 20),
         ),
         backgroundColor: Colors.green,
       );
       ScaffoldMessenger.of(context)
         ..removeCurrentSnackBar()
         ..showSnackBar(snackBar);
     }
    }
    
    class GoogleAuthApi {
     static final _googleSignIn =
         GoogleSignIn(scopes: ['https://mail.google.com/']);
     static Future<GoogleSignInAccount?> signIn() async {
       if (await _googleSignIn.isSignedIn()) {
         return _googleSignIn.currentUser;
       } else {
         return await _googleSignIn.signIn();
       }
     }
    }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2013-10-07
      • 2013-10-01
      • 2013-03-23
      • 2011-07-11
      • 2014-01-01
      • 1970-01-01
      相关资源
      最近更新 更多