当前位置: 首页 > article >正文

flutter字体大小切换案例 小字体,标准字体,大字体,超大字体案例

flutter字体大小切换案例 小字体,标准字体,大字体,超大字体案例

Android iOS设备带有选择记录

我的flutter项目版本
environment:
sdk: ‘>=3.4.4 <4.0.0’

图片案例

在这里插入图片描述
在这里插入图片描述

pubspec.yaml 添加依赖

  # 屏幕尺寸适配 https://github.com/OpenFlutter/flutter_screenutil
  flutter_screenutil: ^5.9.3
  # 状态管理 https://github.com/rrousselGit/provider
  provider: ^6.1.2
  # 本地存储 官方插件 https://github.com/flutter/plugins
  shared_preferences: ^2.2.3

代码案例

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:provider/provider.dart';

void main() async {
  await ScreenUtil.ensureScreenSize(); // 确保屏幕大小被正确设置
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ScreenUtilInit(
      designSize: const Size(360, 690), // 设计稿尺寸
      builder: (_, child) => MaterialApp(
        home: ChangeNotifierProvider(
          create: (context) => FontSizeProvider(),
          child: HomeScreen(),
        ),
      ),
    );
  }
}

class FontSizeProvider with ChangeNotifier {
  double _fontSize = 1.0; // 默认字体大小

  double get fontSize => _fontSize;

  Future<void> loadFontSize() async {
    final prefs = await SharedPreferences.getInstance();
    _fontSize = prefs.getDouble('fontSize') ?? 1.0;
    notifyListeners();
  }

  Future<void> saveFontSize(double size) async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.setDouble('fontSize', size);
    _fontSize = size;
    notifyListeners();
  }
}

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    //var fontSizeProvider = Provider.of<FontSizeProvider>(context, listen: false);
    var fontSizeProvider = Provider.of<FontSizeProvider>(context);
    fontSizeProvider.loadFontSize(); // 加载字体大小设置

    return Scaffold(
      appBar: AppBar(
        title: Text(
          '字体大小切换',
          style: TextStyle(
            fontSize:
                15.sp * fontSizeProvider.fontSize, // 根据fontSizeProvider调整字体大小
          ),
        ),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              '这是一段示例文本',
              style: TextStyle(
                fontSize: 15.sp *
                    fontSizeProvider.fontSize, // 根据fontSizeProvider调整字体大小
              ),
            ),
            ElevatedButton(
              onPressed: () => fontSizeProvider.saveFontSize(0.8), // 小字体
              child: Text('小字体'),
            ),
            ElevatedButton(
              onPressed: () => fontSizeProvider.saveFontSize(1.0), // 标准字体
              child: Text('标准字体'),
            ),
            ElevatedButton(
              onPressed: () => fontSizeProvider.saveFontSize(1.2), // 大字体
              child: Text('大字体'),
            ),
            ElevatedButton(
              onPressed: () => fontSizeProvider.saveFontSize(1.5), // 超大字体
              child: Text('超大字体'),
            ),
          ],
        ),
      ),
    );
  }
}


http://www.kler.cn/a/396801.html

相关文章:

  • 【原创】java+ssm+mysql社区疫情防控管理系统设计与实现
  • JWTUtil工具类
  • Flutter:input输入框
  • 数字孪生乡村:数字乡村智慧化营建思路
  • 网络原理-网络层和数据链路层
  • 动态规划-背包问题——[模版]完全背包问题
  • 基于Java Springboot图书馆管理系统
  • (一)- DRM架构
  • 微信小程序设置屏幕安全距离
  • 表单自动化填写-JavaScript脚本
  • TypeORM在Node.js中的高级应用
  • 深度学习的核心思想
  • 【freertos】FreeRTOS时间管理
  • 代码随想录算法训练营第三十一天| 56. 合并区间 、738.单调递增的数字 。c++转java
  • 右键添加获取可供WSL使用的路径,对windows文件夹也适用,即获取符合Linux规范的路径内容给WSL
  • 搭建高效稳定的ChatGPT网络环境:从网络专线到IP地址管理的全流程解析
  • SQL 处理数列
  • C++中特殊类设计/单例模式
  • Javascript_设计模式(二)
  • 将Excel文件的两个表格经过验证后分别读取到Excel表和数据库
  • HTML之图片和超链接的学习记录
  • 124. 二叉树中的最大路径和【 力扣(LeetCode) 】
  • go debug日记:protoc -I . helloworld.proto --go_out=plugins=grpc:.错误debug
  • 【个人笔记】如何将 Linux 文件系统扩容
  • C++__day1
  • redis7.x源码分析:(2) adlist双向链表