| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415 |
- import 'dart:async';
- import 'dart:convert';
- import 'dart:math';
- import 'package:audioplayers/audioplayers.dart';
- import 'package:flutter/material.dart';
- import 'package:js/js.dart';
- import 'package:js/js_util.dart';
- import 'package:link/view/component/link_btn.dart';
- import 'package:link/view/component/top_container.dart';
- import 'package:get/get.dart';
- import '../constants.dart';
- import '../utils/api.dart';
- import '../utils/global.dart';
- import '../utils/http_utils.dart';
- import '../utils/size_fit.dart';
- import '../utils/storage.dart';
- import '../utils/util.dart';
- import 'dart:js' as js;
- import 'dart:html';
- import 'package:share_plus_web/share_plus_web.dart';
- class WelcomePage extends StatefulWidget {
- const WelcomePage({Key? key}) : super(key: key);
- @override
- State<WelcomePage> createState() => _WelcomePageState();
- }
- class _WelcomePageState extends State<WelcomePage>
- with SingleTickerProviderStateMixin {
- late AnimationController controller;
- late Animation animation;
- AudioPlayer audioPlayer = AudioPlayer();
- bool isPause = true;
- Timer? timer;
- var user;
- @override
- void initState() {
- controller = AnimationController(
- vsync: this, duration: const Duration(milliseconds: 2400));
- animation = Tween(begin: 0.0, end: 2 * pi).animate(controller);
- controller.addListener(() {
- setState(() {});
- });
- recommends();
- checkToken();
- // controller.repeat();
- // playMusic();
- super.initState();
- }
- // Future checkToken() async {
- // var json = StorageUtil().getJSON('tempLink');
- // if (json != null) {
- // Get.toNamed('/add_link',
- // parameters: {'social': jsonEncode(json['social']), 'add_more': '1'});
- // }
- // }
- Future checkToken() async {
- if (Global().token.isNotEmpty) {
- var data =
- await HttpUtils.get(Api.token, params: {'token': Global().token});
- if (data['success'] == false) {
- // Get.toNamed('/login');
- return;
- }
- }
- var jsonUserStep0 = StorageUtil().getJSON('tempUser0');
- if (jsonUserStep0 != null) {
- Get.toNamed('/edit_nick_info');
- return;
- }
- var jsonUserStep1 = StorageUtil().getJSON('tempUser1');
- if (jsonUserStep1 != null) {
- Get.toNamed('/edit_base_info');
- return;
- }
- var jsonLink0 = StorageUtil().getJSON('tempGuideLink0');
- if (jsonLink0 != null) {
- Get.toNamed('/begin_add_first_link');
- return;
- }
- var jsonLink1 = StorageUtil().getJSON('tempGuideLink1');
- if (jsonLink1 != null) {
- Get.toNamed('/add_link',
- parameters: {'social': jsonEncode(jsonLink1['social'])});
- return;
- }
- var json = StorageUtil().getJSON('tempLink');
- if (json != null) {
- Get.toNamed('/add_link',
- parameters: {'social': jsonEncode(json['social']), 'add_more': '1'});
- return;
- }
- if (Global().token.isNotEmpty) {
- Get.offAllNamed('/');
- }
- }
- @override
- void dispose() {
- controller.dispose();
- timer!.cancel();
- super.dispose();
- }
- Future recommends() async {
- var data = await HttpUtils.get(Api.recommend);
- if (data is List) {
- setState(() {
- user = data[0];
- });
- int i = 0;
- timer = Timer.periodic(const Duration(seconds: 3), (e) {
- i++;
- if (i >= data.length) {
- i = 0;
- }
- setState(() {
- user = data[i];
- });
- });
- }
- print(data.toString());
- }
- playMusic() async {
- await audioPlayer.play(
- UrlSource('https://api.fast.dev.liveplus.fun/static/music/test.mp3'));
- }
- pauseMusic() async {
- await audioPlayer.pause();
- }
- tapPlayBtn() {
- setState(() {
- isPause = !isPause;
- if (isPause) {
- controller.stop();
- pauseMusic();
- } else {
- controller.repeat();
- playMusic();
- }
- });
- }
- shareContent() {
- js.context.callMethod('shareSys', ['']);
- }
- topBg() {
- return Positioned(
- left: 0,
- top: 0,
- right: 0,
- child: Image.asset(
- 'assets/images/welcome_top.png',
- width: 375.px,
- height: 200.px,
- ));
- }
- content() {
- return Column(
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- SizedBox(
- height: 80.px,
- ),
- Image.asset(
- 'assets/images/logo.png',
- width: 280.px,
- height: 108.px,
- ),
- Container(
- alignment: Alignment.topLeft,
- margin: EdgeInsets.only(
- top: 30.px, bottom: 30.px, left: 23.px, right: 23.px),
- height: 128.px,
- child: Stack(
- children: [
- Positioned(
- top: 22.px,
- child: Container(
- width: 84.px,
- height: 84.px,
- decoration: BoxDecoration(
- borderRadius: BorderRadius.circular(42.px),
- image: (user == null || user['avatar'] == null)
- ? null
- : DecorationImage(
- image: NetworkImage(user['avatar']),
- fit: BoxFit.cover)
- // color: Colors.pink,
- ),
- ),
- ),
- Positioned(
- right: 0,
- child: Container(
- width: 270.px,
- height: 128.px,
- padding: EdgeInsets.only(left: 60.px, top: 24.px),
- alignment: Alignment.topLeft,
- decoration: const BoxDecoration(
- image: DecorationImage(
- image: AssetImage(
- 'assets/images/welcome_social_bg.png'),
- fit: BoxFit.fill)),
- child: user == null
- ? Container()
- : Column(
- mainAxisAlignment: MainAxisAlignment.start,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Text.rich(TextSpan(children: [
- TextSpan(
- text: '我是',
- style: TextStyle(
- color: Colors.white,
- fontSize: 20.px,
- fontWeight: FontWeight.bold)),
- TextSpan(
- text: user['nickname'],
- style: TextStyle(
- color: kThemeColor,
- fontSize: 20.px,
- fontWeight: FontWeight.bold))
- ])),
- SizedBox(
- height: 4.px,
- ),
- Text(
- '来自${user['country']}·${user['city']},快来看看我的主页',
- style: TextStyle(
- color: Colors.white, fontSize: 12.px),
- ),
- SizedBox(
- height: 8.px,
- ),
- Row(
- children: [
- if (user != null && user['socials'] != null)
- ...List<Widget>.generate(
- user['socials'].length, (index) {
- return Container(
- width: 24.px,
- height: 24.px,
- decoration: BoxDecoration(
- borderRadius:
- BorderRadius.circular(6.px),
- image: user['socials'][index]
- ['logo'] !=
- null
- ? DecorationImage(
- fit: BoxFit.cover,
- image: NetworkImage(
- user['socials'][index]
- ['logo']),
- )
- : const DecorationImage(
- image: AssetImage(
- 'assets/images/1.png'),
- fit: BoxFit.cover)),
- margin: EdgeInsets.only(right: 12.px),
- );
- }),
- // Image.asset(
- // 'assets/images/tiktok.png',
- // width: 24.px,
- // height: 24.px,
- // ),
- // SizedBox(
- // width: 12.px,
- // ),
- // Image.asset(
- // 'assets/images/tiktok.png',
- // width: 24.px,
- // height: 24.px,
- // ),
- // SizedBox(
- // width: 12.px,
- // ),
- // Image.asset(
- // 'assets/images/tiktok.png',
- // width: 24.px,
- // height: 24.px,
- // ),
- // SizedBox(
- // width: 12.px,
- // ),
- // Image.asset(
- // 'assets/images/tiktok.png',
- // width: 24.px,
- // height: 24.px,
- // ),
- // SizedBox(
- // width: 12.px,
- // ),
- ],
- )
- ],
- ),
- ))
- ],
- ),
- ),
- LinkButton(
- title: '注册',
- disable: false,
- isBlack: false,
- callback: () {
- Get.toNamed('/invite_code');
- }),
- SizedBox(
- height: 36.px,
- ),
- LinkButton(
- title: '登录',
- disable: false,
- isBlack: true,
- callback: () {
- Get.toNamed('/login');
- }),
- SizedBox(height: 50.px),
- // Expanded(child: Container()),
- Text(
- '2022 © LINKBaeBae 链接吧,宝贝!',
- style: TextStyle(color: const Color(0xFF444447), fontSize: 10.px),
- ),
- SizedBox(
- height: 44.px,
- )
- ],
- );
- }
- playContent() {
- return Positioned(
- right: 20.px,
- top: 20.px,
- child: GestureDetector(
- onTap: () {
- tapPlayBtn();
- },
- child: Stack(children: [
- Transform.rotate(
- angle: animation.value,
- child: Image.asset(
- 'assets/images/music.png',
- width: 28.px,
- height: 28.px,
- )),
- Opacity(
- opacity: isPause ? 1 : 0,
- child: Image.asset(
- 'assets/images/music_pause.png',
- width: 28.px,
- height: 28.px,
- ),
- )
- ]),
- ));
- }
- copyright() {
- return Positioned(
- left: 0,
- right: 0,
- bottom: 44.px,
- child: Text(
- '2022 © LINKBaeBae 链接吧,宝贝!',
- textAlign: TextAlign.center,
- style: TextStyle(color: const Color(0x80000000), fontSize: 10.px),
- ));
- }
- @override
- Widget build(BuildContext context) {
- Util().setPageTitle('welcome');
- SizeFit.initialize(context);
- return Material(
- color: kBgColor,
- child: TopContainer(
- child: SizedBox(
- height: MediaQuery.of(context).size.height,
- width: 375.px,
- child: SingleChildScrollView(
- child: Stack(
- children: [topBg(), content(), playContent()],
- )),
- ),
- // Stack(
- // children: [topBg(), content(), playContent(), copyright()],
- // )
- ),
- );
- }
- }
|