123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- import 'package:flutter/material.dart';
- import 'package:flutter_hbb/common.dart';
- import 'package:flutter_hbb/models/platform_model.dart';
- import 'package:flutter_hbb/plugin/model.dart';
- import 'package:flutter_hbb/plugin/common.dart';
- import 'package:get/get.dart';
- import '../manager.dart';
- import './desc_ui.dart';
- // to-do: use settings from desktop_setting_page.dart
- const double _kCardFixedWidth = 540;
- const double _kCardLeftMargin = 15;
- const double _kContentHMargin = 15;
- const double _kTitleFontSize = 20;
- const double _kVersionFontSize = 12;
- class DesktopSettingsCard extends StatefulWidget {
- final PluginInfo plugin;
- DesktopSettingsCard({
- Key? key,
- required this.plugin,
- }) : super(key: key);
- @override
- State<DesktopSettingsCard> createState() => _DesktopSettingsCardState();
- }
- class _DesktopSettingsCardState extends State<DesktopSettingsCard> {
- PluginInfo get plugin => widget.plugin;
- bool get installed => plugin.installed;
- bool isEnabled = false;
- @override
- Widget build(BuildContext context) {
- isEnabled = bind.pluginIsEnabled(id: plugin.meta.id);
- return Row(
- children: [
- Flexible(
- child: SizedBox(
- width: _kCardFixedWidth,
- child: Card(
- child: Column(
- children: [
- header(),
- body(),
- ],
- ).marginOnly(bottom: 10),
- ).marginOnly(left: _kCardLeftMargin, top: 15),
- ),
- ),
- ],
- );
- }
- Widget header() {
- return Row(
- children: [
- headerNameVersion(),
- headerInstallEnable(),
- ],
- ).marginOnly(
- left: _kContentHMargin,
- top: 10,
- bottom: 10,
- right: _kContentHMargin,
- );
- }
- Widget headerNameVersion() {
- return Expanded(
- child: Row(
- children: [
- Text(
- widget.plugin.meta.name,
- textAlign: TextAlign.start,
- style: const TextStyle(
- fontSize: _kTitleFontSize,
- ),
- ),
- SizedBox(
- width: 5,
- ),
- Text(
- plugin.meta.version,
- textAlign: TextAlign.start,
- style: const TextStyle(
- fontSize: _kVersionFontSize,
- ),
- )
- ],
- ),
- );
- }
- Widget headerButton(String label, VoidCallback onPressed) {
- return Container(
- child: ElevatedButton(
- onPressed: onPressed,
- child: Text(translate(label)),
- ),
- );
- }
- Widget headerInstallEnable() {
- final installButton = headerButton(
- installed ? 'Uninstall' : 'Install',
- () {
- bind.pluginInstall(
- id: plugin.meta.id,
- b: !installed,
- );
- },
- );
- if (installed) {
- final updateButton = plugin.needUpdate
- ? headerButton('Update', () {
- bind.pluginInstall(
- id: plugin.meta.id,
- b: !installed,
- );
- })
- : Container();
- final enableButton = !installed
- ? Container()
- : headerButton(isEnabled ? 'Disable' : 'Enable', () {
- if (isEnabled) {
- clearPlugin(plugin.meta.id);
- }
- bind.pluginEnable(id: plugin.meta.id, v: !isEnabled);
- setState(() {});
- });
- return Row(
- children: [
- updateButton,
- SizedBox(
- width: 10,
- ),
- installButton,
- SizedBox(
- width: 10,
- ),
- enableButton,
- ],
- );
- } else {
- return installButton;
- }
- }
- Widget body() {
- return Column(children: [
- author(),
- description(),
- more(),
- ]).marginOnly(
- left: _kCardLeftMargin,
- top: 4,
- right: _kContentHMargin,
- );
- }
- Widget author() {
- return Align(
- alignment: Alignment.centerLeft,
- child: Text(plugin.meta.author),
- );
- }
- Widget description() {
- return Align(
- alignment: Alignment.centerLeft,
- child: Text(plugin.meta.description),
- );
- }
- Widget more() {
- if (!(installed && isEnabled)) {
- return Container();
- }
- final List<Widget> children = [];
- final model = getPluginModel(kLocationHostMainPlugin, plugin.meta.id);
- if (model != null) {
- children.add(PluginItem(
- pluginId: plugin.meta.id,
- peerId: '',
- location: kLocationHostMainPlugin,
- pluginModel: model,
- isMenu: false,
- ));
- }
- return ExpansionTile(
- title: Text('Options'),
- controlAffinity: ListTileControlAffinity.leading,
- children: children,
- );
- }
- }
|