SA Flutter Flavors
是的,又一个基于flavor的包,抱歉。
此包有助于创建Flutter应用的“flavors”(仅适用于Dart代码,不适用于OS特定应用)。它允许为每个flavor定义属性,并提供一个FlavorBanner,用于显示当前运行flavor的视觉指示器。
特点
- Flavor Banner
- 更改横幅颜色
- 更改横幅文本
- 更改横幅位置
- Flavor属性
入门
要开始使用,只需将该包添加到您的主pubspec.yaml文件中。
用法
此包的目的是允许维护和运行应用程序的不同版本,例如,您可能希望将开发或测试应用程序连接到生产应用程序的一组不同的端点。这可以通过设置应用程序各种flavors的attributes来实现。
为使其尽可能简单,只需为每个flavor设置不同的lib/main.dart文件即可。在这些文件中进行所有flavor更改,然后您可以保持应用程序的其他部分相同,这意味着每个flavor的自定义代码/维护量应该大大减少。
例如
- lib/main_dev.dart(开发flavor)
- lib/main_test.dart(测试flavor)
- lib/main.dart(生产flavor)
有关简单示例,请参见下文,或参阅/example文件夹以获取更详细的用法,其中flavor由Riverpod提供程序跟踪。
main_dev.dart(我们的开发flavor)
这将为应用程序添加一个带有DEV标题的绿色标记。
import 'package:flavours/app.dart';
import 'package:flutter/material.dart';
import 'package:sa_flutter_flavor/sa_flutter_flavor.dart';
void main() {
runApp(App(
flavor: FlavorConfig(
name: "DEV",
color: Colors.green,
attributes: {'title': "Development App"}),
));
}
main_test.dart(我们的测试flavor)
这将为应用程序添加一个带有TEST标题的红色标记。
import 'package:flavours/app.dart';
import 'package:flutter/material.dart';
import 'package:sa_flutter_flavor/sa_flutter_flavor.dart';
void main() {
runApp(App(
flavor: FlavorConfig(
name: "TEST",
color: Colors.red,
attributes: {'title': "Test App"}),
));
}
main.dart(我们的生产flavor)
由于其被标记为生产flavor,因此不会显示flavor横幅。
import 'package:flavours/app.dart';
import 'package:flutter/material.dart';
import 'package:sa_flutter_flavor/sa_flutter_flavor.dart';
void main() {
runApp(App(
flavor: FlavorConfig(
name: "PROD",
isProduction: true,
attributes: {'title': "My App"}),
));
}
这些应该是唯一需要的flavor不同的文件,您只需要在每个文件中根据需要添加更多属性即可。最后,app.dart文件负责flavor和显示横幅。
import 'package:flutter/material.dart';
import 'package:sa_flutter_flavor/sa_flutter_flavor.dart';
class App extends StatelessWidget {
final FlavorConfig flavor;
const App({super.key, required this.flavor});
@override
Widget build(BuildContext context, WidgetRef ref) {
return MaterialApp(
title: flavor.attributes['title'],
debugShowCheckedModeBanner: true,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: FlavorBanner(
bannerConfig: flavor.banner,
child: const AppMain()),
);
}
}



