zalo_flutter 0.0.2
zalo_flutter: ^0.0.2 copied to clipboard
The easiest way to add Zalo login to your flutter app, get user information, profile picture and more.
example/lib/main.dart
import 'dart:convert';
import 'dart:developer';
import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:zalo_flutter/zalo_flutter.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return const MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({
Key? key,
}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _indexReset = -1;
ValueKey<String> _key = const ValueKey<String>('');
String zaloId = '';
String zaloMessage = '';
String zaloLink = '';
@override
void initState() {
super.initState();
_initZaloFlutter();
}
Future<void> _initZaloFlutter() async {
if (Platform.isAndroid) {
final String? hashKey = await ZaloFlutter.getHashKeyAndroid();
log('HashKey: $hashKey');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
key: _key,
body: SafeArea(
child: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
CommonButton(
text: 'clear log',
onPressed: () async {
_indexReset++;
_key = ValueKey<String>(_indexReset.toString());
setState(() {});
return null;
},
),
CommonButton(
text: 'logout',
onPressed: () async {
await ZaloFlutter.logout();
_indexReset++;
_key = ValueKey<String>(_indexReset.toString());
setState(() {});
return null;
},
),
CommonButton(
text: 'isLogin',
onPressed: () async {
final bool data = await ZaloFlutter.isLogin();
return '$data';
},
),
CommonButton(
text: 'login',
onPressed: () async {
final ZaloLogin data = await ZaloFlutter.login();
return jsonEncode(data.toJson());
},
),
CommonButton(
text: 'getUserProfile',
onPressed: () async {
final ZaloProfile data = await ZaloFlutter.getUserProfile();
return jsonEncode(data.toJson());
},
),
CommonButton(
text: 'getUserFriendList',
onPressed: () async {
final ZaloUserFriend data =
await ZaloFlutter.getUserFriendList(
atOffset: 0,
count: 3,
);
return jsonEncode(data.toJson());
},
),
CommonButton(
text: 'getUserInvitableFriendList',
onPressed: () async {
final ZaloUserFriend data =
await ZaloFlutter.getUserInvitableFriendList(
atOffset: 0,
count: 3,
);
final String rs = jsonEncode(data.toJson());
return rs;
},
),
CommonButton(
text: 'sendMessage',
onPressed: () async {
final ZaloSendMessage data = await ZaloFlutter.sendMessage(
to: zaloId,
message: zaloMessage,
link: zaloLink,
);
final String rs = jsonEncode(data.toJson());
return rs;
},
),
CommonButton(
text: 'postFeed',
onPressed: () async {
final ZaloPostFeed data = await ZaloFlutter.postFeed(
message: zaloMessage,
link: zaloLink,
);
final String rs = jsonEncode(data.toJson());
return rs;
},
),
CommonButton(
text: 'sendAppRequest',
onPressed: () async {
final ZaloSendAppRequest data =
await ZaloFlutter.sendAppRequest(
to: <String>[zaloId],
message: zaloMessage,
);
final String rs = jsonEncode(data.toJson());
return rs;
},
),
],
),
),
),
),
);
}
}
class CommonButton extends StatefulWidget {
const CommonButton({
Key? key,
required this.text,
required this.onPressed,
this.color = Colors.blue,
}) : super(key: key);
final String text;
final Future<String?> Function() onPressed;
final Color color;
@override
_CommonButtonState createState() => _CommonButtonState();
}
class _CommonButtonState extends State<CommonButton> {
String? result;
@override
Widget build(BuildContext context) {
final Widget childText = Text(
widget.text,
style: const TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
),
);
final Widget button = MaterialButton(
minWidth: double.infinity,
height: 40,
color: widget.color,
padding: const EdgeInsets.all(16),
onPressed: () async {
print('[commonButton] ${widget.text}');
result = await widget.onPressed();
setState(() {});
},
shape: const StadiumBorder(),
child: childText,
);
Widget showResult(String? text) {
if (text == null) {
return Container();
}
final String? object = jsonDecode(text) as String?;
final String prettyString =
const JsonEncoder.withIndent(' ').convert(object);
return Text(prettyString);
}
return Padding(
padding: const EdgeInsets.all(6.0),
child: Column(
children: <Widget>[
button,
showResult(result),
],
),
);
}
}