一,內(nèi)存爆表 >?圖片緩存
/// State基類
class BaseState<T extends StatefulWidget> extends State<T>
with
AutomaticKeepAliveClientMixin,
WidgetHelper,
DialogHelper,
EventListener {
@mustCallSuper
void initState() {
if (isListenEvent()) {
EventManager.instance.listen(this);
}
//指定圖片緩存大小,默認(rèn)是1000
PaintingBinding.instance.imageCache.maximumSize = 10;
super.initState();
LogEvent.onPageStart('${this}');
}
@mustCallSuper
void dispose() {
super.dispose();
deactivate();
// 清理緩存
PaintingBinding.instance.imageCache.clear();
LogEvent.onPageEnd('${this}');
if (isListenEvent()) {
EventManager.instance.cancel(this);
}
}
二,iOS 字體縮小/消失/擠出屏幕等問(wèn)題
import 'dart:math' as math;
import 'package:flutter/material.dart';
class NoScaleTextWidget extends StatelessWidget {
final Widget child;
const NoScaleTextWidget({
Key key,
@required this.child,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaxScaleTextWidget(
max: 1.0,
child: child,
);
}
}
class MaxScaleTextWidget extends StatelessWidget {
final double max;
final Widget child;
const MaxScaleTextWidget({
Key key,
this.max = 1.2,
@required this.child,
}) : super(key: key);
@override
Widget build(BuildContext context) {
var data = MediaQuery.of(context);
var scale = math.min(max, data.textScaleFactor);
return MediaQuery(
data: data.copyWith(textScaleFactor: scale),
child: child,
);
}
}
class ScaleTextWidget extends StatelessWidget {
final double scale;
final Widget child;
const ScaleTextWidget({
Key key,
@required this.scale,
@required this.child,
}) : super(key: key);
@override
Widget build(BuildContext context) {
var data = MediaQuery.of(context);
var scale = this.scale ?? data.textScaleFactor;
return MediaQuery(
data: data.copyWith(textScaleFactor: scale),
child: child,
);
}
}
@override
Widget build(BuildContext context) {
loadData();
return MaterialApp(
builder: (ctx, w) {
return MaxScaleTextWidget(
max: 1.0,
child: w,
);
},
theme: ThemeData(
primarySwatch: Colors.blue,
textTheme: TextTheme(
title: TextStyles.titleStyle, button: TextStyles.titleStyle),
),
home: homePage,
三,未授權(quán)導(dǎo)致圖片保存失敗
//每次都提示圖片已保存成功,相冊(cè)里并沒(méi)有圖片
void _onSaveImage() async {
print("_onImageSaveButtonPressed");
final QrPainter painter = QrPainter(
data: _appDownloadLink,
color: const Color(0xff222222),
emptyColor: const Color(0xffffffff),
version: 4,
gapless: true,
);
final ByteData imageData = await painter.toImageData(300.0);
final result = await ImageGallerySaver.save(imageData.buffer.asUint8List());
if (result) {
toast("二維碼已成功保存到手機(jī)相冊(cè)");
} else {
toast("二維碼保存到手機(jī)相冊(cè)失敗, 請(qǐng)查看App權(quán)限");
}
}
@override
void initState() {
super.initState();
// 先要授權(quán)訪問(wèn)相冊(cè)
PermissionHandler().requestPermissions(<PermissionGroup>[
PermissionGroup.storage, // 在這里添加需要的權(quán)限
]);
}
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-721603.html
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-721603.html
到了這里,關(guān)于Flutter 填坑錄 (不定時(shí)更新)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!