Flutter, Sending Form Data to Email

后端 未结 4 916
野的像风
野的像风 2021-01-01 16:01

I would like to create a contact form and would like to know: How to send data from a contact form to my email? I would like to see a working example. I wanted to submit a f

4条回答
  •  北海茫月
    2021-01-01 16:40

    Try flutter_email_sender package. Here is an example taken from their github.

    import 'dart:async';
    import 'dart:io';
    
    import 'package:flutter/material.dart';
    import 'package:flutter_email_sender/flutter_email_sender.dart';
    import 'package:image_picker/image_picker.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatefulWidget {
      @override
      _MyAppState createState() => _MyAppState();
    }
    
    class _MyAppState extends State {
      String attachment;
    
      final _recipientController = TextEditingController(
        text: 'example@example.com',
      );
    
      final _subjectController = TextEditingController(text: 'The subject');
    
      final _bodyController = TextEditingController(
        text: 'Mail body.',
      );
    
      final GlobalKey _scaffoldKey = GlobalKey();
    
      Future send() async {
        final Email email = Email(
          body: _bodyController.text,
          subject: _subjectController.text,
          recipients: [_recipientController.text],
          attachmentPath: attachment,
        );
    
        String platformResponse;
    
        try {
          await FlutterEmailSender.send(email);
          platformResponse = 'success';
        } catch (error) {
          platformResponse = error.toString();
        }
    
        if (!mounted) return;
    
        _scaffoldKey.currentState.showSnackBar(SnackBar(
          content: Text(platformResponse),
        ));
      }
    
      @override
      Widget build(BuildContext context) {
        final Widget imagePath = Text(attachment ?? '');
    
        return MaterialApp(
          theme: ThemeData(primaryColor: Colors.red),
          home: Scaffold(
            key: _scaffoldKey,
            appBar: AppBar(
              title: Text('Plugin example app'),
              actions: [
                IconButton(
                  onPressed: send,
                  icon: Icon(Icons.send),
                )
              ],
            ),
            body: SingleChildScrollView(
              child: Center(
                child: Padding(
                  padding: EdgeInsets.all(8.0),
                  child: Column(
                    mainAxisSize: MainAxisSize.max,
                    // mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    crossAxisAlignment: CrossAxisAlignment.center,
                    children: [
                      Padding(
                        padding: EdgeInsets.all(8.0),
                        child: TextField(
                          controller: _recipientController,
                          decoration: InputDecoration(
                            border: OutlineInputBorder(),
                            labelText: 'Recipient',
                          ),
                        ),
                      ),
                      Padding(
                        padding: EdgeInsets.all(8.0),
                        child: TextField(
                          controller: _subjectController,
                          decoration: InputDecoration(
                            border: OutlineInputBorder(),
                            labelText: 'Subject',
                          ),
                        ),
                      ),
                      Padding(
                        padding: EdgeInsets.all(8.0),
                        child: TextField(
                          controller: _bodyController,
                          maxLines: 10,
                          decoration: InputDecoration(
                              labelText: 'Body', border: OutlineInputBorder()),
                        ),
                      ),
                      imagePath,
                    ],
                  ),
                ),
              ),
            ),
            floatingActionButton: FloatingActionButton.extended(
              icon: Icon(Icons.camera),
              label: Text('Add Image'),
              onPressed: _openImagePicker,
            ),
          ),
        );
      }
    
      void _openImagePicker() async {
        File pick = await ImagePicker.pickImage(source: ImageSource.gallery);
        setState(() {
          attachment = pick.path;
        });
      }
    }
    

提交回复
热议问题