Flutter数据提供插件onix_flutter_provider的使用

Flutter数据提供插件onix_flutter_provider的使用

该插件包含了一些用于改进Provider状态管理体验的基础类。

Provider

通过扩展BaseProvider类来创建你的Provider:

class ExampleScreenProvider extends BaseProvider

通过扩展BaseProviderState类来创建你的Widget:

class _ExampleScreenState extends BaseProviderState<ExampleScreenProvider, ExampleScreen> {

createProvider函数中创建Provider实例:

 ExampleScreenProvider createProvider() => ExampleScreenProvider();

build方法替换为buildWidget来编写你的Widget主体:

  [@override](/user/override)
  Widget buildWidget(BuildContext context) {
  	return Scaffold(...);
  }

你还可以重写onFailure方法以处理失败对象:

[@override](/user/override)
void onFailure(
  BuildContext context,
  Failure failure,
) {
  // 处理失败逻辑
}

甚至可以重写onProgress方法以实现自定义进度状态行为:

[@override](/user/override)
void onProgress(
  BuildContext context,
  BaseProgressState progress,
) {
  // 实现进度状态逻辑
}

使用providerConsumer方法来根据新的状态创建一个Widget:

providerConsumer(
    stateListener: (provider) => MyWidget(...),
}

你也可以不受限制地使用来自provider包的ConsumerSelector Widget类。


完整示例Demo

以下是一个完整的示例,展示了如何使用onix_flutter_provider插件。

main.dart

import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';
import 'package:loader_overlay/loader_overlay.dart';

import 'base_provider_example/base_provider_example_screen.dart';
import 'di.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  initializeDi(GetIt.I);
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return GlobalLoaderOverlay(
      child: MaterialApp(
        theme: ThemeData(
          colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
          useMaterial3: true,
        ),
        initialRoute: '/',
        routes: {
          '/': (context) =>
              const BaseProviderExampleScreen(title: 'Base Provider Example'),
        },
      ),
    );
  }
}

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

1 回复

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


onix_flutter_provider 是一个 Flutter 插件,用于在 Flutter 应用中提供数据管理和状态管理功能。它通常用于简化状态管理,使开发者能够更轻松地在应用中共享和管理数据。

1. 安装插件

首先,你需要在 pubspec.yaml 文件中添加 onix_flutter_provider 依赖:

dependencies:
  flutter:
    sdk: flutter
  onix_flutter_provider: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 基本用法

2.1 创建数据模型

首先,你需要创建一个数据模型类,用于存储和传递数据。例如:

class User {
  String name;
  int age;

  User({required this.name, required this.age});
}

2.2 创建提供者

接下来,创建一个提供者类,用于管理数据。提供者类通常继承自 ChangeNotifier,以便在数据变化时通知监听器。

import 'package:flutter/material.dart';

class UserProvider with ChangeNotifier {
  User? _user;

  User? get user => _user;

  void setUser(User user) {
    _user = user;
    notifyListeners(); // 通知监听器数据已更新
  }
}

2.3 在应用中使用提供者

在应用的顶层使用 ChangeNotifierProvider 来提供数据:

import 'package:flutter/material.dart';
import 'package:onix_flutter_provider/onix_flutter_provider.dart'; // 请根据实际包名导入
import 'user_provider.dart'; // 导入你创建的提供者

void main() {
  runApp(
    ChangeNotifierProvider(
      create: (context) => UserProvider(),
      child: MyApp(),
    ),
  );
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Provider Example',
      home: HomeScreen(),
    );
  }
}

2.4 在子组件中访问提供者

在子组件中,你可以使用 ConsumerProvider.of 来访问提供者的数据:

import 'package:flutter/material.dart';
import 'package:onix_flutter_provider/onix_flutter_provider.dart'; // 请根据实际包名导入
import 'user_provider.dart';

class HomeScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Provider Example'),
      ),
      body: Center(
        child: Consumer<UserProvider>(
          builder: (context, userProvider, child) {
            return Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Text('User Name: ${userProvider.user?.name ?? "No User"}'),
                Text('User Age: ${userProvider.user?.age ?? "N/A"}'),
                ElevatedButton(
                  onPressed: () {
                    userProvider.setUser(User(name: 'John Doe', age: 30));
                  },
                  child: Text('Set User'),
                ),
              ],
            );
          },
        ),
      ),
    );
  }
}

3. 高级用法

3.1 多个提供者

如果你有多个提供者,可以使用 MultiProvider

void main() {
  runApp(
    MultiProvider(
      providers: [
        ChangeNotifierProvider(create: (context) => UserProvider()),
        // 添加其他提供者
      ],
      child: MyApp(),
    ),
  );
}

3.2 使用 Provider.of

你也可以使用 Provider.of 来获取提供者的实例:

class HomeScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    final userProvider = Provider.of<UserProvider>(context);

    return Scaffold(
      appBar: AppBar(
        title: Text('Provider Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('User Name: ${userProvider.user?.name ?? "No User"}'),
            Text('User Age: ${userProvider.user?.age ?? "N/A"}'),
            ElevatedButton(
              onPressed: () {
                userProvider.setUser(User(name: 'John Doe', age: 30));
              },
              child: Text('Set User'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部