【flutter】架构之商城main入口

2023-09-20 14:04:20


前言

本栏目我们将完成一个商城项目的架构搭建,并完善中间的所有功能,总页面大概200个,如果你能看完整个栏目,你肯定能独立完成flutter 项目的整体研发工作。

首先新建一个叫blog_mall 的项目,能看到这里的,我想都知道该怎么创建项目了,这里就不再赘述。


一、项目模块的划分

在开始前,我们先介绍一下项目的整体架构
在这里插入图片描述

由上图我们可以看到,我把整个项目的文件夹分为了5个模块:

  • app: 整个项目的主题文件夹
  • config: 项目的基础配置文件
  • http:网络模块
  • utils:工具模块
  • widget:通用的child 模块

二、入口main的配置

在配置main 入口文件之前,我们先导入本项目主要的框架插件:

#  设备适配
flutter_screenutil: ^5.8.4 
#  状态管理
get: ^4.6.5
#  收起键盘
keyboard_dismisser: ^3.0.0
#  加载器
flutter_easyloading: ^3.0.5
  • flutter_screenutil:做前端的,最重要的是,没错,就是适配,这个组件会完美的解决你的问题。
  • get:大家可以看到,我将使用getx 作为整个项目的状态管理器,如果有对getx 这个组件不太了解的,可以翻看我之前写的相关文章。
  • keyboard_dismisser:当你使用文本输入框的,键盘怎么回收?单个设置?麻烦不你,这里教你一键解决。
  • flutter_easyloading:网络请求?吐司?菊花?这个全都有。

上面我们介绍导入的四个组件,下面我们来看看主要针对main 文件做了什么改造:

class MyApp extends StatelessWidget {
  const MyApp({super.key});
  
  
  Widget build(BuildContext context) {
    return ScreenUtilInit(
      // 一般情况下,你的设计师的UI比例初始值都是它
      designSize: const Size(375, 812),
      minTextAdapt: true,
      splitScreenMode: true,
      builder: (context, child) {
        return KeyboardDismisser(
          gestures: const [GestureType.onTap],
          child: GetMaterialApp(
            // 项目的主题走起来
            theme: FhTheme.getTheme(),
            debugShowCheckedModeBanner: false,
            title: '即时零售',
            // 配置的路由文件,什么?routes??? 不需要,完全不需要
            getPages: GetPages.getPages,
            initialBinding: BaseBindings(),
            builder: (context, child) {
              // 初始化你的loading 
              EasyLoading.init();
              // 看不懂这个是什么???你想你的APP 字体会跟随系统字体大小去改变的话,你尽管干掉它
              return MediaQuery(
                data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0),
                child: FlutterEasyLoading(child: child ?? Container(),),
              );
            },
          ),
        );
      },
    );
  }
}

看完上面的代码,如果你还有什么疑问的话,那么我只想说,你没救了,还是尽快换个行业比较好。

三、配置文件怎么做

上面的代码中,你看到了"GetPages.getPages" 路由的配置,“FhTheme.getTheme()” 主题色的配置,“BaseBindings()” bindings 的配置,那么这些文件夹里面都是什么呢?带着疑问我们继续看。

import 'package:get/get.dart';

/// 1 * FileName: get_pages
/// 2 * Author: tiger -- 范虎  
/// 3 * Date: 2023/9/20 11:52
/// 4 * Description:  
/// 5 * 作者博客:半身风雪

class GetPages{
  // static String home = '/home';
  static List<GetPage> getPages = [
   //  GetPage(name: home, page: () => const HomePage()),
  ];

}

GetPages 啥也不是,他就只是一个GetPage 的数组,后期我们所有的路由都将在这里进行配置,具体可参考示例。

import 'package:get/get.dart';

/// 1 * FileName: base_bindings
/// 2 * Author: tiger -- 范虎  
/// 3 * Date: 2023/9/20 11:54
/// 4 * Description:  
/// 5 * 作者博客:半身风雪

class BaseBindings extends Bindings{
  
  void dependencies() {
    // TODO: implement dependencies
    // Get.lazyPut<HomeController>(() => HomeController, fenix: true);
  }

}

Bindings 的配置文件也一样,这里我们初始化的整个项目的所有controller,怎么用?看示例啊,加载方式有几种,我就不一一介绍,普遍使用lazyPut 就可以了,fenix 的初始值是false ,这里我为什么要用true?因为他可以让你的controller 复活,想想你跳了N个界面之后,突然想调第一个controller 的数据,但是这个controller 已经被销毁了,会发生什么呢?

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

import 'fh_colors.dart';

/// 1 * FileName: fh_theme
/// 2 * Author: tiger -- 范虎  
/// 3 * Date: 2023/9/20 11:39
/// 4 * Description:  项目主题
/// 5 * 作者博客:半身风雪


class FhTheme{
 static ThemeData getTheme(){
   return ThemeData(
     // 取消按钮的溅射效果
     splashColor: Colors.transparent,
     highlightColor: Colors.transparent,
     hoverColor: Colors.transparent,

     // 页面背景色
     scaffoldBackgroundColor: FhColors.themeColor,
     // 分割线颜色
     dividerColor: FhColors.dividerColor,
     // 全局appbar样式控制
     appBarTheme: const AppBarTheme(
       //分割线
       elevation: 0.0,
       //背景色
       color: Colors.white,
       // 状态栏
       systemOverlayStyle: SystemUiOverlayStyle(
         statusBarColor: Colors.transparent,
         statusBarIconBrightness: Brightness.dark,
         statusBarBrightness: Brightness.dark,
       ),
     ),

     // 底部 bottom 主题
     bottomNavigationBarTheme: const BottomNavigationBarThemeData(
       backgroundColor: Colors.white,
     ),


     // floatingActionButtonTheme: const FloatingActionButtonThemeData(
     //   //浮动按钮样式 after v1.13.2. 后不建议使用
     //   backgroundColor: Colors.white,
     // ),
   );

 }
}

theme 主题色,这个就没有什么好说的了,你只有明白一点,整个项目中,你所有widget 的初始色值、属性等,都可以在这里进行赋值,不懂的请移步看我之前的文章。

在上面的class 中,你还疑惑FhColors 是什么?别急,这个是我们自己封装的色值文件。

class FhColors{
  static Color themeColor = FhColorUtils.hexStringColor('#F4F5F9');
  static Color dividerColor = FhColorUtils.hexStringColor('#E6E6E6');
  static Color textBlack = FhColorUtils.hexStringColor('#000000');


}

作用就一个,后期项目中所有的设置我们都将放在这里,进行统一的管理。

纳尼?FhColorUtils 又是啥???

拜托,FhColorUtils 就是一个色值转换的封装操作,里面就放你flutter 目前不支持的色值格式转换就行,你就理解成色值转换器呗。

贴代码?i no 你去看一下我前面的文章行不行啊,都有的。


总结

本篇文章很短,内容也很少,但是有一点,当你去新建项目的时候,main 文件就这么写,觉得没错,说不定你的管理还给你加个鸡腿呢。

更多推荐

Makefile详解&实战

title:Makefile详解&实战date:2023-09-2012:01:24comments:true#是否可评论toc:true#是否显示文章目录categories:#分类-CMaketags:#标签-CMake-Makefilesummary:Makefile详解&实战Makefile详解&实战什么是Ma

《打造高可用PostgreSQL:策略与工具》

🌷🍁博主猫头虎(🐅🐾)带您GotoNewWorld✨🍁🐅🐾猫头虎建议程序员必备技术栈一览表📖:🛠️全栈技术FullStack:📚MERN/MEAN/MEVNStack|🌐Jamstack|🌍GraphQL|🔁RESTfulAPI|⚡WebSockets|🔄CI/CD|🌐Git&Versio

什么是JVM常用调优策略?分别有哪些?

目录一、JVM调优二、堆内存大小调整三、垃圾回收器调优四、线程池调优一、JVM调优Java虚拟机(JVM)的调优主要是为了提高应用程序的性能,包括提高应用程序的响应速度和吞吐量。以下是一些常用的JVM调优策略:堆内存大小调整:JVM的堆内存是用于存储对象实例的内存区域。通过调整堆内存的大小,可以找到最适合你的应用程序的

【案例教学】华为云API对话机器人的魅力—体验AI垃圾分类机器人

云服务、API、SDK,调试,查看,我都行阅读短文您可以学习到:人工智能AI自言语言的情感分析、文本分词、文本翻译1IntelliJIDEA之API插件介绍API插件支持VSCodeIDE、IntelliJIDEA等平台、以及华为云自研CodeArtsIDE,基于华为云服务提供的能力,帮助开发者更高效、便捷的搭建应用。

现在全国融资融券两融利率最低是多少?哪家证券公司券商费率低?

融资融券是指投资者通过向券商借入资金(融资)或借入证券(融券),以达到获得更高收益、降低交易风险、提高资金利用效率的目的。通过融资,投资者可以用借入的资金买入更多的证券;通过融券,投资者可以借入证券卖出并借入现金,以期待股票或证券价格下跌后再回购并归还借入的证券,获得差价收益。融资融券是证券市场中的一种融资方式和交易策

SpringMVC学习|JSON讲解、Controller返回JSON数据、Jackson、JSON乱码处理、FastJson

JSON讲解JSON(JavaScriptObjectNotation,JS对象标记)是一种轻量级的数据交换格式,目前使用特别广泛。采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。在JavaS

【案例教学】华为云API图像搜索ImageSearch的快捷性—AI帮助您快速归类图片

云服务、API、SDK,调试,查看,我都行阅读短文您可以学习到:人工智能AI同类型的相片合并归类1IntelliJIDEA之API插件介绍API插件支持VSCodeIDE、IntelliJIDEA等平台、以及华为云自研CodeArtsIDE,基于华为云服务提供的能力,帮助开发者更高效、便捷的搭建应用。API插件关联华为

区块链(2):区块链的应用分类和诞生的故事

1区块链的应用分类第一类:数字资产第一类是数字资产,分为一般数字资产和主打匿名应用场景的匿名数字资产。一般数字资产包括我们非常熟悉的比特币【https://bitcoin.org】、莱特币,在前面我们已经学习过,除此之外还有新经币NEM(NewEconomyMovement)、Decred(中文名暂无)、狗狗币Doge

Redis群集

1、redis群集三种模式redis群集有三种模式,分别是主从同步/复制、哨兵模式、Cluster,下面会讲解一下三种模式的工作方式,以及如何搭建cluster群集●主从复制:主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的

redisson使用过程常见问题汇总

文章目录常见报错1.配置方式使用错误2.版本差异报错3.配置文件中配置了密码或者配置错误4.字符集和序列化方式配置问题5.Redisson的序列化问题6.连接池问题:7.Redisson的高可用性问题:8.Redisson的并发问题9.Redisson的性能问题2.参考文档常见报错1.配置方式使用错误Redisson提

redis设计规范

部分内容参考:阿里redis开发规范同时,结合shigen在实习中的实践经验总结。key的名称设计可读性和管理性业务名:表名:idpro:user:1001简洁性控制key的长度,可以用缩写transaction->tras拒绝bigkey防止网卡流量、慢查询,string类型控制在10KB以内,hash、list、s

热文推荐