Flutter32,java初中级面试题大全

//登录成功

eventBus.fire(LoginEvent());

}

}

Container _buildHeader() {

return Container(

height: 150.0,

color: Color(AppColors.APP_THEME),

//头像的布局填充

child: Center(

child: Column(

mainAxisAlignment: MainAxisAlignment.center,

children: [

GestureDetector(

child: Container(

width: 60.0,

height: 60.0,

decoration: BoxDecoration(

shape: BoxShape.circle,

border: Border.all(

color: Color(0xffffffff),

width: 2.0,

),

image: DecorationImage(

//加载网路图片

image: AssetImage(‘assets/images/ic_avatar_default.png’),

fit: BoxFit.cover,

),

),

),

onTap: () {

//执行登录

_login();

},

),

SizedBox(

),

Text(

‘点击头像登录’,

style: TextStyle(color: Color(0xffffffff)),

),

],

),

),

);

}

}

login_web_page.dart登录页面跳转逻辑,数据拼接组装校验,数据保存完成以后会调用Navigator.pop(context, ‘refresh’);通过路由跳转到My的界面

import ‘dart:convert’;

import ‘package:flutter/cupertino.dart’;

import ‘package:flutter/material.dart’;

import ‘package:flutter_webview_plugin/flutter_webview_plugin.dart’;

import ‘package:flutterapp2/constants/Constants.dart’;

import ‘package:flutterapp2/utils/data_utils.dart’;

import ‘package:flutterapp2/utils/net_utils.dart’;

class LoginWebPage extends StatefulWidget {

@override

_LoginWebPageState createState() => _LoginWebPageState();

}

class _LoginWebPageState extends State {

FlutterWebviewPlugin _flutterWebviewPlugin = FlutterWebviewPlugin();

bool isLoading = true;

@override

void initState() {

// TODO: implement initState

super.initState();

//监听url的变化

_flutterWebviewPlugin.onUrlChanged.listen((url) {

//https://www.oschina.net/action/oauth2/authorize?response_type=code&client_id=6i4Yu6IUqXnR64em0rsJ&redirect_uri=https://www.dongnaoedu.com/

print(‘Debug LoginWebPage onUrlChanged: $url’);

if (mounted) {

setState(() {

isLoading = true;

});

}

if (url != null && url.length > 0 && url.contains(‘?code=’)) {

//登录成功了

//提取授权码code

String code = url.split(‘?’)[1].split(‘&’)[0].split(‘=’)[1];

Map<String, dynamic> params = Map<String, dynamic>();

params[‘client_id’] = AppInfos.CLIENT_ID;

params[‘client_secret’] = AppInfos.CLIENT_SECRET;

params[‘grant_type’] = ‘authorization_code’;

params[‘redirect_uri’] = AppInfos.REDIRECT_URI;

params[‘code’] = ‘$code’;

params[‘dataType’] = ‘json’;

NetUtils.get(AppUrls.OAUTH2_TOKEN, params).then((data) {

//{“access_token”:“aa105aaf-ca4f-4458-822d-1ae6a1fa33f9”,“refresh_token”:“daae8b80-3ca6-4514-a8ae-acb3a82c951c”,“uid”:2006874,“token_type”:“bearer”,“expires_in”:510070}

//this is login_web_page: {“access_token”:“d0e00aa3-4d43-4a05-ab76-546d351ce5d5”,“refresh_token”:“555f4e8a-bccc-4976-9d7e-1d5183ef5798”,“uid”:4571926,“token_type”:“bearer”,“expires_in”:604295}

print(‘Debug this is login_web_page: $data’);

if (data != null) {

Map<String, dynamic> map = json.decode(data);

if (map != null && map.isNotEmpty) {

//保存token等信息

DataUtils.saveLoginInfo(map);

//弹出当前路由,并返回refresh通知我的界面刷新数据

Navigator.pop(context, ‘refresh’);

}

}

});

}

});

}

@override

void dispose() {

// TODO: implement dispose

super.dispose();

_flutterWebviewPlugin.close();

}

@override

Widget build(BuildContext context) {

//authorize?response_type=code&client_id=s6BhdRkqt3&state=xyz&redirect_uri=https

List _appBarTitle = [

Text(

‘登录开源中国’,

style: TextStyle(

color: Color(AppColors.APPBAR),

),

),

];

if(isLoading) {

_appBarTitle.add(SizedBox(

width: 10.0,

));

_appBarTitle.add(CupertinoActivityIndicator());

}

return WebviewScaffold(

url: AppUrls.OAUTH2_AUTHORIZE +

‘?response_type=code&client_id=’ +

AppInfos.CLIENT_ID +

‘&redirect_uri=’ +

AppInfos.REDIRECT_URI,

appBar: AppBar(

title: Row(

children: _appBarTitle,

),

),

withJavascript: true,//允许执行js

withLocalStorage: true,//允许本地存储

withZoom: true,//允许网页缩放

);

}

}

net_utils.dart网络数据的请求处理

import ‘package:http/http.dart’ as http;

class NetUtils{

//返回类型是String,是一个JSON

///authorize?response_type=code&client_id=s6BhdRkqt3&state=xyz&redirect_uri

static Future get(String url, Map<String, dynamic> params) async{

if(url != null && params != null && params.isNotEmpty) {

//拼装参数

StringBuffer sb = StringBuffer(‘?’);

params.forEach((key, value) {

sb.write(‘ k e y = key= key=value&’);

});

//去掉最后一个&

String paramStr = sb.toString().substring(0, sb.length - 1);

url += paramStr;

}

//NetUtils : https://www.oschina.net/action/openapi/token?client_id=6ZmjMJ4ZCW7YRhQ4sm42&client_secret=sXWCxyV1KegoF2gethYuBZhI8WQI9fjk&grant_type=authorization_code&redirect_uri=https://www.dongnaoedu.com/&code=1s8xBT&dataType=json

print(‘Debug NetUtils : $url’);

http.Response response = await http.get(url);

return response.body;

}

}

data_utils.dart数据的封装和拼接

import ‘package:shared_preferences/shared_preferences.dart’;

class DataUtils{

static const String SP_ACCESS_TOKEN = ‘access_token’;

static const String SP_REFRESH_TOKEN = ‘refresh_token’;

static const String SP_UID = ‘uid’;

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

最后

Java架构进阶面试及知识点文档笔记

这份文档共498页,其中包括Java集合,并发编程,JVM,Dubbo,Redis,Spring全家桶,MySQL,Kafka等面试解析及知识点整理

image

Java分布式高级面试问题解析文档

其中都是包括分布式的面试问题解析,内容有分布式消息队列,Redis缓存,分库分表,微服务架构,分布式高可用,读写分离等等!

image

互联网Java程序员面试必备问题解析及文档学习笔记

image

Java架构进阶视频解析合集

Tp9Ws1i-1710398635098)]

最后

Java架构进阶面试及知识点文档笔记

这份文档共498页,其中包括Java集合,并发编程,JVM,Dubbo,Redis,Spring全家桶,MySQL,Kafka等面试解析及知识点整理

[外链图片转存中…(img-plMN6ccm-1710398635099)]

Java分布式高级面试问题解析文档

其中都是包括分布式的面试问题解析,内容有分布式消息队列,Redis缓存,分库分表,微服务架构,分布式高可用,读写分离等等!

[外链图片转存中…(img-svPVhBOh-1710398635100)]

互联网Java程序员面试必备问题解析及文档学习笔记

[外链图片转存中…(img-Ykboe2Mo-1710398635100)]

Java架构进阶视频解析合集

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值