直播app源码,跳转站外链接或平台内部跳转页面
直播app源码,跳转站外链接或平台内部跳转页面实现的相关代码
1 | });<br>} else {<br>await Future.delayed(Duration(milliseconds: 10));<br>showLoading();<br>}<br>}<br>@override<br>void dispose() {<br>super.dispose();<br>setIsDispose(true);<br>viewModel.showLoadingFun = null;<br>viewModel.dismissLoadingFun = null;<br>}<br>}<br> abstract class BaseViewModel extends ChangeNotifier<br>with<br>BaseViewModelInterface,<br>NavigatorMixin,<br>ToastMixin,<br>SharePreferenceMixin,<br>EventBusMixin,<br>DataBaseMixin {<br>int _loadNum = 0;<br>int _minLoadNum = 1;<br>late BuildContext context;<br>late M model;<br>bool _isDispose = false;<br>bool get isDispose => _isDispose;<br>int needLoadingRequestCount = 0;<br>bool isLoading = false;<br>Function()? showLoadingFun;<br>Function? dismissLoadingFun;<br> static bool isNeedCatchError = false;<br>set minLoadNum(int value) {<br>_minLoadNum = value;<br>}<br>set loadNum(int value) {<br>_loadNum = value;<br>}<br>int get loadNum {<br> return _loadNum;<br>}<br>void notifyPage() {<br> if (!_isDispose) {<br>loadNum++;<br> print ( ">loadNum:$loadNum" );<br> if (_loadNum >= _minLoadNum) {<br> print ( ">notifyListeners" );<br>notifyListeners();<br>}<br>}<br>}<br>@override<br>void init() {<br>model = getIt.get();<br>setContext(context);<br>setIsDispose(false);<br>}<br>void showLoading(bool isNeedLoading) {<br> if (isNeedLoading) {<br>needLoadingRequestCount++;<br> if (!isLoading) {<br>isLoading = true;<br> if (showLoadingFun != null) {<br>showLoadingFun!.call();<br>}<br>showLoadingFun?.call();<br>}<br>}<br>}<br>void dismissLoading(bool isNeedLoading) {<br> if (isNeedLoading) {<br>needLoadingRequestCount–;<br> if (needLoadingRequestCount == 0) {<br>isLoading = false;<br> if (dismissLoadingFun != null) {<br>dismissLoadingFun!.call();<br>}<br>dismissLoadingFun?.call();<br>}<br>}<br>}<br> /// 发起网络请求,同时处理异常,loading<br>void sendRequest(Future future, FutureOr onValue(T value),<br>{Function(Exception e)? error, bool isNeedLoading = false}) {<br>showLoading(isNeedLoading);<br>future.then((t) {<br>dismissLoading(isNeedLoading);<br>onValue(t);<br>});<br>if (isNeedCatchError) {<br>future.catchError((e) {<br>dismissLoading(isNeedLoading);<br>print("====>error:$e");<br>if (error != null) {<br>error(e);<br>}<br>});<br>}<br>}<br>@override<br>void dispose() {<br>super.dispose();<br>_isDispose = true;<br>setIsDispose(_isDispose);<br>}<br>}<br>@injectable<br>class LoginViewModel extends BaseViewModel {<br>@factoryMethod<br>LoginViewModel();<br>String loginName = “”;<br>String psw = “”;<br>///登录<br>void login() {<br>if (loginName.isEmpty) {<br>showToast(“登录账号不可为空”);<br>} else if (psw.isEmpty) {<br>showToast(“登录密码不可为空”);<br>} else {<br>sendRequest(model.login(loginName, psw), (value) {<br>if (value.errorCode == 0) {<br>value.data?.let((it) {<br>UserInfoSp.getInstance().uid = it.id ?? 0;<br>UserInfoSp.getInstance().token = it.token ?? “”;<br>UserInfoSp.getInstance().userName = it.username ?? “”;<br>});<br>pop();<br>push(MainPage());<br>} else {<br>showToast(value.errorMsg!);<br>}<br>}, isNeedLoading: true);<br>}<br>}<br>} |
以上就是 直播app源码,跳转站外链接或平台内部跳转页面实现的相关代码,更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现