前语

BaseFlutter开源项目根据Flutter2.0,语法上空安全,是Provider MVVM的最佳实践,能够用于线上使用的优异架构,该项目运用了许多实践项目开发中需求用到了技术和第三方结构,并且做webview版别了许多根底封装,能够直接拿到实践项目中运用,并且学习这个项目还能够帮忙新手减降低学习难度,供应学习方向,结束flutter快速入门https认证,github链接

代码结构

根据Flutter2.0,语法空安全,Provider MVVM的最佳实践,能够用于线上使用的优异架构

根据Flutter2.0,语法空安全,Provider MVVM的最佳实践,能够用于线上使用的优异架构

部分代码示例

abstract class BaseState<W extends StatefulWidget, VM extends BasHTTPSeViewModel>
extends State<W>
with
BaseShttps认证tateIngithub中文官网网页terface,
Nagithub永久回家地址vigatorMixin,
ToastMixin,
EventBusMixin,
SharePreferenceMwebview是什么意思ixigithub中文官网网页n,
ScreenAdapterMixin{
late VM viewModel;//这儿需求改成late,不能用?,不然Provider会报错
EventBus? eventBuswebview最新版下载;
LoadingDialog? lgitlaboadingDialog;
late bool isgithub中文社区BuildFinish;
@override
void initState() {
super.initState();
isBuildFinish = false;
WidgetsBinding widgetsBinding = WidgetsBinding.instance!;
widgetsBindiwebview烘托有什么用ng.addPostFrameCflutter是什么意思allback((callback) {
//说明build完毕了
print("====>build完毕了");
isBuildFinish = true;
onBuildFinish();
});
setContext(context);
setIsDispose(false);
viewModel = getIt.get&GitltHTTPS;VM>();
viewModel.context = context;
viewModel.webview更新init();
viewModel.showLoadingFun = () {
showLoading();
};
viewModel.dismissLoadingFun = () {
loadingDialog?.dismissDialog();
};
initEventBusgithub中文官网网页();
}
@overgithub下载ride
void onBuildFinish() {}
@override
void initEventBus() {
if (eventBus == nullwebview是什么东西) {
eventBus = EventBus.get(webview烘托有什么用);
}
}
void showLoading() async {
if (isBuildFinish) {
//有必要比及父组件build完毕后才干构建自己,https://blog.csdn.net/qq_39493848/articlwebview是什么意思e/details/108514136
showDialog(
context: context,
builder: (_) {
if (loadingDialgithub永久回家地址og == nugithub下载ll) {
loadingDialog = LoadingDiawebview下载log();
}
regithub敞开私库turn loadingDiagitlablog!;
});
} else {
await Future.degithublayed(Duration(milliseconds:github打不开 10));
showLoading();
}
}
@override
void dispose() {
super.dispose();
setIsDispose(true);
viewModel.showLoadingFun = null;
viewModel.webview版别dhttps和http的差异ismissLoadingFun = null;
}
}
abstract class BaseViewModel<M extends Object> extends ChangeNotifier
with
BaseViewModeGitHublInterface,
NavigatorMixin,
ToastMixin,
SharePreferenceMixin,
EventBusMixin,
DataBaseMixin {
int _loadNum = 0;
int _minLoadNum = 1;
late BuildfluttershyContext context;
late M model;
bool _isDispose = false;
bool gegiteet isDispose => _isDispose;
int needLoadingRewebview组件questCount = 0;
bool isLhttps认证oading = false;
Funcfluttershytion()? showLgithub敞开私库oadingFun;
Function? dismgithubissLoadingFun;
static bool isNeedCatchErroflutteredr = false;
setgit命令 minLoadflutter怎样读音发音Num(int value) {
_minLoadNuGitHubm = value;
}
set loadNum(int valuHTTPSe) {github永久回家地址
_loadNum = value;
}
intgiti get loadNum {
retgithub怎样下载文件urn _loadNum;
}
void notifyPage() {
if (!_isDispose) {webview烘托有什么用
loadNum++;
print("====>loadNum:$loadNum");
if (_loadNum >= _minLoadNum) {
print("====>flutter结构notifyListeners");
notifyListenewebview组件rs();
}
}
}
@override
void init() {
model = getIt.get<M>();
setContgithub下载ext(context);
setIsDispose(false);
}
void showLoading(bool isNeedLoading) {
if (isNeedLoading) {
needLoadingRequestCount++;
if (!isflutteringLoading) {
isLoading = trgit命令ue;
if (showLoadigithub打不开ngFun != nflutter菜鸟教程ull) {
showLoadingFun!.call();
}
showLoadingFun?.call();
}
}
}github是干什么的
void dismissLoading(bool isNeedLoading) {
if (isNeedLoading) {
needLoadingRequestCount--;
if (neeflutter结构优缺点dLoadingithub怎样下载文件gRequesfluttershytCount == 0) {
isLoading = false;
if (dismissLoadingFun != null) {
dismissLoadingFun!.call();
}
dismissLoadingFun?.call();
}
}
}
/// 发起网络央求,一起处理失常webview组件gitiloading
void sendRequest&ltwebview烘托有什么用;T>(Future<T&gtgithub敞开私库;github中文官网网页 future, FutureOr<dynflutteringamic> onValue(T value),
{Function(Exception e)?webview最新版下载 error, bool isNeedLoading = false}) {github敞开私库
showLoading(isNeedLoading);
futuregithub直播渠道永久回家.then((t) {
dismissLoading(isNeedLoading);
onValue(t);
});
if (isNeedCatchError) {
future.catchError((e) {
dismissLoading(isNeedLoading);
print("====>error:$e");
if (error != null) {
error(e);
}
});
}
}
@override
void dispose() {
suGitHubper.dispose();
_isDispose = true;
setIsDispose(_isDispose);
}
}
@iwebview 闪退njectable
clasgithub永久回家地址s Logithub敞开私库ginViewModel extends BaseViewModel<LoginModel> {
@factoryMethod
LoginViewModel();
Stringgiti是什么牌子 loginName = "";
String psw = "";
/webview组件//登录
void login() {
if (loginNahttps协议me.isEflutter结构mpty) {
showToast("登录账号不可为空");
} else if (psw.isEmpty) {
shoflutter是什么意思wToast("登录暗码不可为空");
} else {
senfluttereddRequest&lgithub永久回家地址twebview 闪退;githubLoginResult>(model.github打不开login(logiflutter结构优缺点nName, psw), (value) {
if (value.errorCode =github官网= 0) {
UserInfoSp.getInstance().uid = value.dataflutter菜鸟教程!.id!;
UserInfoSp.getInsWebViewtance().token = value.data!.token!;
UserInfoSp.getInstance().userName = value.data!.username!;
pop();
push(MainPage());
} else {
showToastgithub打不开(value.errorMsg!);
}
}, isNegiti是什么牌子edLoading: true);
}
}
}

运用的第三方结构flutter怎样读音发音

  • 1. injectable
    合作get_it结github中文官网网页构,在编译时生成代码,结束依托注入
  • 2.dio
    结束网络央求
  • 3.get_it
    结束依托注入
  • 4.retrofigithub中文社区t
    结合dio结束网络fluttershy央求,编译时生成网络央求的代码
  • 5.logger
    日志打印
  • 6.toast
    吐司
  • 7.event_bus
    结束不同页面和组件的通讯
  • 8.json_serializable
    结合jsonflutter开发_annotation结束json数据序列化
  • 9https和http的差异.extended_image
    结束网络图片的加载,强健的官方 Image 扩展组件, 支撑加载以及失利闪现,缓存网络图片,缩https安全问题放拖拽图片,绘制自定义效果等功能
  • 10.webview_flutter
    结束网页的加载
  • 11.shared_preferences
    简略的数据耐久存储
  • 12.pulgithub敞开私库l_to_refresh
    结束下拉刷新和分页加载
  • 13.floor
    数据库,运用类似于retrofgithub中文官网网页it
  • 14.flutter_swiper
    图片轮播

运用的架构GitHub和根底封装

  • 根据Flutter2.0,语法空安全
  • 结合Provider结束MVVM架构,封装了BaseState,BaseStatefulWidget,BaseViewModel
  • 结合模板办法形式,泛型,Mixin,依托注入等办法,封装了很多重复的逻辑,简化了开发难度
  • Mixhttps域名in类的封装:目前包括NavigatorMixin,ToastMixin,SharePreferenceMixinflutter怎样读音发音,EventBusMixinGitHub,DataBaseMixin
  • 根底Widget的封gitlab装:例如BottomDialog,CenterDialog,EnsureAndCancelDialog,LoadingDialog,PopupWindow,CommonWrap,Lwebview最新版下载azyIndexedStack等等
  • BaseViewModel一起网络央求,一起发起网络央求,一起处理失常,loadigithub官网ng

后期规划

1.路由,结束各模块,各事务的解耦
2.组件化
3.内存走漏检测
4.埋点结构
5.各种炫酷webview是什么东西动画
6.功能优化

QQ交流群

群号码:770892444