使用 firebase 远程配置的 Flutter 更新小部件
Flutter update widgets using firebase remote config
我正在开发一个 flutter 应用程序,我想更新页面的小部件而不在 Play 商店上推送新的更新。我对这个主题进行了一些研究,发现我可以使用 firebase 远程配置。我的想法是使用 firebase 远程配置来获取小部件并将它们显示在应用程序上,这样我就不需要为小的更改频繁发布更新。
例如,下面的代码用于显示一个圆形加载栏:
import 'package:flutter/material.dart';
class LoadingWidget extends StatelessWidget {
const LoadingWidget({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
alignment: Alignment.center,
child: const CircularProgressIndicator(
color: Colors.black,
),
);
}
}
但现在即使是最小的变化,比如颜色、对齐或大小的变化,我也需要将新的更新推送到 Play 商店,用户需要安装新的更新才能反映这些变化。
我想将 flutter 小部件存储在 firebase 远程配置(JSON 格式)中,然后在应用程序中,它将从远程配置中获取 JSON 数据并显示新的更改。
一旦您的 RemoteConfig,您需要添加 key-value 对以满足您的需求:
key : value
color : black
然后获取值:
myRemoteColor = remoteConfig.getString('color')
现在,您的 myRemoteColor
有一个值为 black
的字符串。
由于您已经知道 Remote Config 仅存储原始值,因此问题变为 how to encode and decode a Flutter widget into a string。
我怀疑这会很简单,因为这意味着您的应用程序需要将 JSON/string 编译成二进制文件。您实际上是在为您的远程客户端实现类似于 Flutter 的热重载的功能,这非常酷但不是 built-in 功能。
更可行的方法是控制代码中已有的特定小部件,例如。在最近的示例应用程序中,我使用 Remote Config enable/disable 一项新功能(称为功能标记的过程):
class _MyHomePageState extends State<MyHomePage> {
final FirebaseRemoteConfig remoteConfig;
_MyHomePageState(this.remoteConfig);
@override
Widget build(BuildContext context) {
return MaterialApp(
home: DefaultTabController(
length: remoteConfig.getBool("chat_enabled") ? 3 : 2,
child: Scaffold(
appBar: AppBar(
bottom: TabBar(
tabs: [
const Tab(icon: Icon(Icons.games_outlined)),
const Tab(icon: Icon(Icons.swap_vert_circle_outlined)),
if (remoteConfig.getBool("chat_enabled")) const Tab(icon: Icon(Icons.chat_bubble_outlined)),
],
),
title: Text(widget.title),
),
body: TabBarView(
children: [
const MyGame(key: Key('game')),
const Leaderboard(key: Key('leaderboard')),
if (remoteConfig.getBool("chat_enabled")) const Messageboard(key: Key('messageboard')),
],
),
),
),
);
}
我正在开发一个 flutter 应用程序,我想更新页面的小部件而不在 Play 商店上推送新的更新。我对这个主题进行了一些研究,发现我可以使用 firebase 远程配置。我的想法是使用 firebase 远程配置来获取小部件并将它们显示在应用程序上,这样我就不需要为小的更改频繁发布更新。
例如,下面的代码用于显示一个圆形加载栏:
import 'package:flutter/material.dart';
class LoadingWidget extends StatelessWidget {
const LoadingWidget({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
alignment: Alignment.center,
child: const CircularProgressIndicator(
color: Colors.black,
),
);
}
}
但现在即使是最小的变化,比如颜色、对齐或大小的变化,我也需要将新的更新推送到 Play 商店,用户需要安装新的更新才能反映这些变化。
我想将 flutter 小部件存储在 firebase 远程配置(JSON 格式)中,然后在应用程序中,它将从远程配置中获取 JSON 数据并显示新的更改。
一旦您的 RemoteConfig,您需要添加 key-value 对以满足您的需求:
key : value
color : black
然后获取值:
myRemoteColor = remoteConfig.getString('color')
现在,您的 myRemoteColor
有一个值为 black
的字符串。
由于您已经知道 Remote Config 仅存储原始值,因此问题变为 how to encode and decode a Flutter widget into a string。
我怀疑这会很简单,因为这意味着您的应用程序需要将 JSON/string 编译成二进制文件。您实际上是在为您的远程客户端实现类似于 Flutter 的热重载的功能,这非常酷但不是 built-in 功能。
更可行的方法是控制代码中已有的特定小部件,例如
class _MyHomePageState extends State<MyHomePage> {
final FirebaseRemoteConfig remoteConfig;
_MyHomePageState(this.remoteConfig);
@override
Widget build(BuildContext context) {
return MaterialApp(
home: DefaultTabController(
length: remoteConfig.getBool("chat_enabled") ? 3 : 2,
child: Scaffold(
appBar: AppBar(
bottom: TabBar(
tabs: [
const Tab(icon: Icon(Icons.games_outlined)),
const Tab(icon: Icon(Icons.swap_vert_circle_outlined)),
if (remoteConfig.getBool("chat_enabled")) const Tab(icon: Icon(Icons.chat_bubble_outlined)),
],
),
title: Text(widget.title),
),
body: TabBarView(
children: [
const MyGame(key: Key('game')),
const Leaderboard(key: Key('leaderboard')),
if (remoteConfig.getBool("chat_enabled")) const Messageboard(key: Key('messageboard')),
],
),
),
),
);
}