zoukankan      html  css  js  c++  java
  • Flutter 多环境

    什么是多环境,为什么用多环境

    配置多环境是开发经常需要用到的操作,实现多环境配置后可以规避生产测试环境混合带来的麻烦和风险,减少项目风险。

    多环境可以让你定义一些构建配置,并根据需要进行切换。

    我们开发过程中通常会有三个以上的开发环境(开发、生产、演示)。

    通过多环境,我们可以给不同的开发需求使用不同的api和图片文字等。而且只需要运行不同的命令就可以。

    那我们开始写代码吧:

    新建一个config.dart的文件,在里面进行多环境的配置。代码如下:

    import 'package:flutter/material.dart';
    
    enum Flavor {
      DEVELOPMENT,
      RELEASE,
    }
    
    class Config {
    
      static Flavor appFlavor;
    
      static String get helloMessage {
        switch (appFlavor) {
          case Flavor.RELEASE:
            return '生产环境';
          case Flavor.DEVELOPMENT:
          default:
            return '开发环境';
        }
      }
    
      static Icon get helloIcon {
        switch (appFlavor) {
          case Flavor.RELEASE:
            return new Icon(Icons.new_releases);
          case Flavor.DEVELOPMENT:
          default:
            return new Icon(Icons.developer_mode);
        }
      }
    }

    上面的代码很简单,我想应该不用解释吧

    来看看页面my_home.dart:

    import 'package:flutter/material.dart';
    
    import 'config.dart';
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: '多环境',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: MyHomePage(title: '多环境'),
        );
      }
    }
    class MyHomePage extends StatefulWidget {
      MyHomePage({Key key, this.title}) : super(key: key);
      final String title;
    
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text(widget.title),
          ),
          body: Center(
    
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                new Text(
                  'Hello',
                  style: Theme
                      .of(context)
                      .textTheme
                      .headline,
                ),
                new Text(Config.helloMessage,
                  style: Theme
                      .of(context)
                      .textTheme
                      .display1,
                ),
                Config.helloIcon,
              ],
            ),
          ),
        );
      }
    }

    新建两个文件 main_dev.dart、main_uat.dart

    开发环境 main_dev.dart:

    import 'config.dart';
    import 'my_home.dart';
    
    void main() {
      Config.appFlavor = Flavor.DEVELOPMENT; 
    runApp(MyApp());
    }

    生产环境main_uat.dart:

    import 'config.dart';
    import 'my_home.dart';
    
    void main() {
      Config.appFlavor = Flavor.RELEASE;
      runApp(MyApp());
    }

    如何使用

    运行的时候指定运行哪个版本

    flutter run lib/main_dev.dart

    编译也是一样

    flutter build apk lib/main_dev.dart

    如果我们编译的时候想要加上版本号可以这么写

    flutter build apk -t lib/main_uat.dart --release --build-number=2 --build-name=1.0.2

                    

    pub.dev中也有不少的多环境的轮子,大家也都可以看看,方法有很多,主要看个人习惯

    本文项目已经上传到 GitHub

  • 相关阅读:
    十六、异步编程——messagedialog
    关于委托的一个摘录
    com interop 简述
    [STAThread]的使用
    Python初识和基础语法
    Python基础数据类型以及格式化输出
    JS读取PHP中设置的中文cookie时出现乱码的解决方法
    解决跨域读写Cookies的问题,(ASP、PHP、ASP.NET、JSP)解决方案
    多字段distinct查询
    Dedecms当前位置{dede:field name='position'/}修改,去掉>方法
  • 原文地址:https://www.cnblogs.com/inthecloud/p/13288198.html
Copyright © 2011-2022 走看看