颤抖的Twitter登录身份验证

时间:2019-05-22 12:58:01

标签: flutter flutter-test

我想通过Flutter创建一个Twitter条目。但是互联网上没有代码。您对此有何建议? 这些是我使用的代码。

import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter_auth_buttons/flutter_auth_buttons.dart';
import 'package:flutter_twitter_login/flutter_twitter_login.dart';

void main() {
  runApp(MaterialApp(
    home: MyMainPage(),
  ));
}

class MyMainPage extends StatefulWidget {
  @override
  _MyMainPageState createState() => _MyMainPageState();
}

class _MyMainPageState extends State<MyMainPage> {
  FirebaseAuth _auth = FirebaseAuth.instance;
  bool isLogged = false;

  FirebaseUser myUser;


  Future<FirebaseUser> _loginWithTwitter() async {
    var twitterLogin = new TwitterLogin(
      consumerKey: 'consumerKey',
      consumerSecret: 'consumerSecret',
    );

    final TwitterLoginResult result = await twitterLogin.authorize();

    switch (result.status) {
      case TwitterLoginStatus.loggedIn:
        var session = result.session;
        FirebaseUser user = await _auth.signInWithTwitter(
            authToken: session.token, authTokenSecret: session.secret);
        return user;
        break;
      case TwitterLoginStatus.cancelledByUser:
        debugPrint(result.status.toString());
        return null;
        break;
      case TwitterLoginStatus.error:
        debugPrint(result.errorMessage.toString());
        return null;
        break;
    }
    return null;
  }

  void _logOut() async {
    await _auth.signOut().then((response) {
      isLogged = false;
      setState(() {});
    });
  }



  void _logInTwitter() {
    _loginWithTwitter().then((response) {
      if (response != null) {
        myUser = response;
        isLogged = true;
        setState(() {});
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(isLogged ? "Profile Page" : "Facebook Loing Example"),
        actions: <Widget>[
          isLogged
              ? IconButton(
                  icon: Icon(Icons.power_settings_new),
                  onPressed: _logOut,
                )
              : IconButton(
                  icon: Icon(Icons.remove_red_eye),
                  onPressed: () {},
                ),
        ],
      ),
      body: Center(
        child: isLogged
            ? Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Text('Name: ' + myUser.displayName),
                  Image.network(myUser.photoUrl),
                ],
              )
            : Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[

                  SizedBox(height: 30.0),
                  TwitterSignInButton(
                    onPressed: _logInTwitter,
                  ),
                ],
              ),
      ),
    );
  }
}

 Future<FirebaseUser> _loginWithTwitter() async {
    var twitterLogin = new TwitterLogin(
      consumerKey: 'Y2MyConsumerKeyYKX',
      consumerSecret: 'xYXUMyConsumerSecretKeyjFAJZMyConsumerSecretKeyS3i',
    );

    final TwitterLoginResult result = await twitterLogin.authorize();

    switch (result.status) {
      case TwitterLoginStatus.loggedIn:
        var session = result.session;
        FirebaseUser user = await _auth.signInWithTwitter(
            authToken: session.token, authTokenSecret: session.secret);
        return user;
        break;
      case TwitterLoginStatus.cancelledByUser:
        debugPrint(result.status.toString());
        return null;
        break;
      case TwitterLoginStatus.error:
        debugPrint(result.errorMessage.toString());
        return null;
        break;
    }
    return null;
  }

未为类“ FirebaseAuth”定义方法“ signInWithTwitter”。     尝试将名称更正为现有方法的名称,或定义一个名为“ signInWithTwitter”的方法。

1 个答案:

答案 0 :(得分:0)

我认为您的FirebaseAuth插件是旧版本。我们还可以通过另一种方式进行Twitter登录 _auth.signInWithCredentials(),而您只需从 TwitterAuthProvider.getCredential()获取凭据。 这是我完成Twitter登录并获取用户数据的方法。

library(data.table)
library(magrittr)
library(ggplot2)
library(plotly)
library(lubridate)

dt <- data.table(colA = seq(from = ymd_hms("2020-01-01 00:00:00"),
                            to = ymd_hms("2020-01-01 00:00:00") + days(99),
                            by = "1 day"),
                 colB = runif(100,0,100),
                 colC = runif(100,0,100),
                 colD = runif(100,0,100)) %>% 
  melt(id.vars = "colA")

ggplot <- ggplot(data = dt) +
  geom_area(aes(x = colA,
                y = value,
                fill = variable),
            stat = "identity",
            position = "stack",
            alpha = 0.5) +
  theme(legend.title = element_blank())
ggplot

ggplotly(ggplot)

我也建议您阅读这篇中等文章,为您social media login

提供帮助
相关问题