import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_wechat_login/flutter_wechat_login.dart';
class wxLogin extends StatefulWidget {
const wxLogin({super.key});
@override
State<wxLogin> createState() => _MyCodeLoginPageState();
}
class _MyCodeLoginPageState extends State<wxLogin> {
final _flutterWechatLogin = FlutterWechatLogin();
bool _isInstalled = false;
bool startLogin = false;
Map userInfo = {};
@override
void initState() {
super.initState();
doInit();
}
Future<void> doInit() async {
await _flutterWechatLogin.init(
appId: "",
secret: "",
universalLink: "");
bool isInstalled = await _flutterWechatLogin.isInstalled();
if (!mounted) return;
setState(() {
_isInstalled = isInstalled;
});
}
@override
Widget build(BuildContext context) {
Widget userInfoWidget = Container(
child: Text('${userInfo}'),
);
// if (startLogin) userInfoWidget = CircularProgressIndicator();
if (userInfo.isNotEmpty) {
userInfoWidget = Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ClipOval(
child: Image.network(
userInfo['headimgurl'],
width: 40,
),
),
SizedBox(
width: 5,
),
Text(userInfo['nickname']),
],
);
}
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('获取微信授权'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('个人: $_isInstalled'),
ElevatedButton(
child: Text("获取微信授权"),
onPressed: () {
doLogin();
},
),
SizedBox(
height: 10,
),
userInfoWidget
],
),
),
),
);
}
Future<void> doLogin() async {
if (mounted) {
setState(() {
startLogin = true;
});
}
Map wechatInfo = await _flutterWechatLogin.login();
print('**************** -> wechatInfo = $wechatInfo');
Map accessTokenInfo =
await _flutterWechatLogin.getAccessToken(code: wechatInfo['code']);
print('**************** -> accessTokenInfo = $accessTokenInfo');
Map refreshTokenInfo = await _flutterWechatLogin.refreshToken(
refreshToken: accessTokenInfo['refresh_token']);
print('**************** -> refreshTokenInfo = $refreshTokenInfo');
Map checkTokenInfo = await _flutterWechatLogin.checkToken(
accessToken: accessTokenInfo['access_token'],
openid: accessTokenInfo['openid']);
print('**************** -> checkTokenInfo = $checkTokenInfo');
Map userInfo = await _flutterWechatLogin.getUserInfo(
accessToken: accessTokenInfo['access_token'],
openid: accessTokenInfo['openid']);
print('****************userInfo = $userInfo');
if (mounted) {
setState(() {
startLogin = false;
this.userInfo = userInfo;
});
}
}
}
appId: "", secret: "",universalLink: "",微信公众平台获取