Flutter插件quds_provider的使用

Flutter插件quds_provider的使用

简单状态管理器

此插件向Flutter开发者介绍了简单状态管理。

Flutter插件quds_provider特性

  • 状态可保存和恢复。
  • 可以加密保存的状态。
  • 数据模型可以是整数、字符串、列表等任何类型!

如何使用Flutter插件quds_provider

创建一个提供者

class CounterProvider extends QudsProvider {
  QudsValue<int> counter = QudsValue(name: 'counter', value: 0);

  @override
  List<QudsValue> getValues() => [counter];
}

class SettingsProvider extends QudsProvider {
  QudsValue<bool> darkTheme = QudsValue(name: 'dark-theme', value: false);

  @override
  List<QudsValue> getValues() => [darkTheme];
}

// 建议在顶层声明以下提供者
CounterProvider counterProvider = CounterProvider();
SettingsProvider settingsProvider = SettingsProvider();

包裹你的应用

QudsAppController appController = QudsAppController(
  encryptionKey: 'YourKeyEncryption',
  encryptionIV: 'hiihhiih',
  providers: [counterProvider, settingsProvider],
);

Widget build(BuildContext context){
  return QudsApp(
        controller: appController,
        child:  MaterialApp(
              title: 'Quds Provider Example',
              home: HomePage()),
        );
}

如果你想观察darkTheme的变化,可以将MaterialApp包裹在QudsProviderWatcher<SettingsProvider>中:

QudsApp(
        controller: appController,
        child: QudsProviderWatcher<SettingsProvider>(
          builder: (s) => MaterialApp(
              title: 'Quds Provider Example',
              theme: ThemeData(
                primarySwatch: Colors.blue,
                brightness: s!.darkTheme.v ? Brightness.dark : Brightness.light,
              ),
              home: HomePage()),
        ));

访问并更改值

// 访问值并更改它
Widget build(BuildContext context) {
    return QudsProviderWatcher<CounterProvider>(
        builder: (p) => Scaffold(
              body: SafeArea(
                  child: Center(
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    Text('Counter:'),
                    Text(p!.counter.v.toString()),
                    Row(
                      children: [
                        IconButton(
                            icon: Icon(Icons.add),
                            onPressed: () => p.counter.value++),
                        IconButton(
                            icon: Icon(Icons.remove),
                            onPressed: () => p.counter.value--),
                      ],
                    ),
                  ],
                ),
              )),
            ));
}

控制暗主题

通过使用SettingsProvider来添加控制暗主题的功能:

CheckboxListTile(
  title: Text('Dark Theme'),
  value: QudsApp.providerOf<SettingsProvider>(context)!.darkTheme.v,
  onChanged: (v) => QudsApp.providerOf<SettingsProvider>(context)!.darkTheme.v = v!,
)

QudsAppController

要保存当前状态并恢复它,可以使用QudsAppController,并且你可以加密状态以进行保护:

QudsAppController appController = QudsAppController(
  encryptionKey: 'YourKeyEncryption',
  encryptionIV: 'hiihhiih',
  providers: [counterProvider, settingsProvider],
);

void main() async {
  await appController.restoreStateInSharedPreferences();
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return QudsApp(
        controller: appController,
        child: HomePage());
  }
}

// 保存应用程序状态
// appController.saveStateInSharedPreferences();

// 恢复应用程序状态
// appController.restoreStateInSharedPreferences();

QudsListNotifier

使用QudsListNotifier设置可保存状态的项目:

CarsProvider carsProvider = CarsProvider();

class CarsProvider extends QudsProvider {
  QudsValue<QudsListNotifier<String>> cars = 
    QudsValue(name: 'cars', value: QudsListNotifier<String>());
  
  @override
  List<QudsValue> getValues() => [cars];
}

/// 在提供者中注入carProvider
QudsApp(
        controller: appController,
        providers: [counterProvider, settingsProvider, carsProvider],
...
...
)

现在列表是可观察的!

class CarsViewer extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return QudsProviderWatcher<CarsProvider>(builder: (p) {
      return ListView(
        children: [
          Row(
            children: [
              IconButton(
                  icon: Icon(Icons.add),
                  onPressed: () {
                    p!.cars.v.add(
                        (['Toyota', 'Mercedes', 'Volvo']..shuffle()).first);
                  })
            ],
          ),
          for (var c in p!.cars.v)
            ListTile(
              title: Text(c),
              trailing: IconButton(
                icon: Icon(Icons.delete),
                onPressed: () => p.cars.v.remove(c),
              ),
            )
        ],
      );
    });
  }
}

要更新carProvider的观察者:

QudsApp.providerOf<CarsProvider>(context)!.fireWatchers();

更多关于Flutter插件quds_provider的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter插件quds_provider的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter开发中,quds_provider作为一个不太为人所知的插件,可能隐藏着一些有趣的潜在用途。尽管我们无法提供确切的官方文档或详尽的功能描述(因为这是一个假设性的插件),但我们可以根据插件名称和一些常见的Flutter开发模式,推测它可能与状态管理有关。以下是一个基于这种假设的代码示例,展示了一个假想的quds_provider插件如何在Flutter应用中使用。

假设的quds_provider插件潜在用途示例

在这个示例中,我们假设quds_provider是一个用于状态管理的插件,类似于ProviderRiverpod,但具有一些独特的特性或更简洁的API。

1. 安装和导入插件

首先,我们需要在pubspec.yaml文件中添加这个假想的插件(实际中,你需要找到真实的插件并添加):

dependencies:
  flutter:
    sdk: flutter
  quds_provider: ^x.y.z  # 假设的版本号

然后在你的Dart文件中导入它:

import 'package:quds_provider/quds_provider.dart';

2. 创建状态管理模型

假设我们有一个简单的计数器模型:

class CounterModel with ChangeNotifier {
  int count = 0;

  void increment() {
    count++;
    notifyListeners();
  }
}

3. 使用quds_provider进行状态管理

在这个假设的插件中,我们可能有一个类似Provider.value的方法来提供我们的模型,并且有一个类似Consumer的widget来监听变化。以下是一个简化的例子:

void main() {
  runApp(
    QudsProvider<CounterModel>(
      create: (_) => CounterModel(),
      child: MyApp(),
    ),
  );
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('QudsProvider Example'),
        ),
        body: Center(
          child: QudsConsumer<CounterModel>(
            builder: (context, counterModel, child) {
              return Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Text(
                    'You have pushed the button this many times:',
                  ),
                  Text(
                    '${counterModel.count}',
                    style: Theme.of(context).textTheme.headline4,
                  ),
                ],
              );
            },
          ),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: () {
            final counterModel = QudsProvider.of<CounterModel>(context);
            counterModel.increment();
          },
          tooltip: 'Increment',
          child: Icon(Icons.add),
        ),
      ),
    );
  }
}

注意事项

  • 上面的代码是一个假设性的示例,实际的quds_provider插件可能会有不同的API和使用方式。
  • 在使用任何第三方插件之前,请务必查阅其官方文档和示例代码,以确保正确理解和使用。
  • 如果quds_provider实际上并不存在或不是一个状态管理插件,那么上面的代码将不会工作。这仅是一个基于假设的示例。

结论

尽管我们不能提供关于一个未知插件quds_provider的确切用途或功能,但基于插件名称和常见的Flutter开发模式,我们可以推测它可能与状态管理相关,并给出了一个假设性的使用示例。在实际开发中,了解和使用插件的最佳方式是查阅其官方文档和社区资源。

回到顶部