• Flutter 填坑录 (不定时更新)


    一,内存爆表 > 图片缓存

    1. /// State基类
    2. class BaseStateextends StatefulWidget> extends State
    3. with
    4. AutomaticKeepAliveClientMixin,
    5. WidgetHelper,
    6. DialogHelper,
    7. EventListener {
    8. @mustCallSuper
    9. void initState() {
    10. if (isListenEvent()) {
    11. EventManager.instance.listen(this);
    12. }
    13. //指定图片缓存大小,默认是1000
    14. PaintingBinding.instance.imageCache.maximumSize = 10;
    15. super.initState();
    16. LogEvent.onPageStart('${this}');
    17. }
    18. @mustCallSuper
    19. void dispose() {
    20. super.dispose();
    21. deactivate();
    22. // 清理缓存
    23. PaintingBinding.instance.imageCache.clear();
    24. LogEvent.onPageEnd('${this}');
    25. if (isListenEvent()) {
    26. EventManager.instance.cancel(this);
    27. }
    28. }

    二,iOS 字体缩小/消失/挤出屏幕等问题

    1. import 'dart:math' as math;
    2. import 'package:flutter/material.dart';
    3. class NoScaleTextWidget extends StatelessWidget {
    4. final Widget child;
    5. const NoScaleTextWidget({
    6. Key key,
    7. @required this.child,
    8. }) : super(key: key);
    9. @override
    10. Widget build(BuildContext context) {
    11. return MaxScaleTextWidget(
    12. max: 1.0,
    13. child: child,
    14. );
    15. }
    16. }
    17. class MaxScaleTextWidget extends StatelessWidget {
    18. final double max;
    19. final Widget child;
    20. const MaxScaleTextWidget({
    21. Key key,
    22. this.max = 1.2,
    23. @required this.child,
    24. }) : super(key: key);
    25. @override
    26. Widget build(BuildContext context) {
    27. var data = MediaQuery.of(context);
    28. var scale = math.min(max, data.textScaleFactor);
    29. return MediaQuery(
    30. data: data.copyWith(textScaleFactor: scale),
    31. child: child,
    32. );
    33. }
    34. }
    35. class ScaleTextWidget extends StatelessWidget {
    36. final double scale;
    37. final Widget child;
    38. const ScaleTextWidget({
    39. Key key,
    40. @required this.scale,
    41. @required this.child,
    42. }) : super(key: key);
    43. @override
    44. Widget build(BuildContext context) {
    45. var data = MediaQuery.of(context);
    46. var scale = this.scale ?? data.textScaleFactor;
    47. return MediaQuery(
    48. data: data.copyWith(textScaleFactor: scale),
    49. child: child,
    50. );
    51. }
    52. }

    1. @override
    2. Widget build(BuildContext context) {
    3. loadData();
    4. return MaterialApp(
    5. builder: (ctx, w) {
    6. return MaxScaleTextWidget(
    7. max: 1.0,
    8. child: w,
    9. );
    10. },
    11. theme: ThemeData(
    12. primarySwatch: Colors.blue,
    13. textTheme: TextTheme(
    14. title: TextStyles.titleStyle, button: TextStyles.titleStyle),
    15. ),
    16. home: homePage,

    三,未授权导致图片保存失败

    1. //每次都提示图片已保存成功,相册里并没有图片
    2. void _onSaveImage() async {
    3. print("_onImageSaveButtonPressed");
    4. final QrPainter painter = QrPainter(
    5. data: _appDownloadLink,
    6. color: const Color(0xff222222),
    7. emptyColor: const Color(0xffffffff),
    8. version: 4,
    9. gapless: true,
    10. );
    11. final ByteData imageData = await painter.toImageData(300.0);
    12. final result = await ImageGallerySaver.save(imageData.buffer.asUint8List());
    13. if (result) {
    14. toast("二维码已成功保存到手机相册");
    15. } else {
    16. toast("二维码保存到手机相册失败, 请查看App权限");
    17. }
    18. }

    1. @override
    2. void initState() {
    3. super.initState();
    4. // 先要授权访问相册
    5. PermissionHandler().requestPermissions([
    6. PermissionGroup.storage, // 在这里添加需要的权限
    7. ]);
    8. }

  • 相关阅读:
    荣电集团与钕希科技签署全面战略合作
    ZStack Cloud 4.4.24 新功能:内存快照技术详解
    安装node.js、vue.js、ElementUI
    阿里P8MySQL,基础/索引/锁/日志/调优都不误,一锅深扒端给你
    运维监控系统PIGOSS BSM 对“实时数据复制”系统的监控管理
    Windows基础命令(目录文件、文本、网络操作)
    星图地球数据云,便捷加载各类在线地图服务的又一神器
    使用 Python 进行测试(7)...until you make it
    vue2项目封装axios(vite打包)
    波奇学C++:继承
  • 原文地址:https://blog.csdn.net/gogler/article/details/92796314