Flutter加载状态管理插件loading_empty_error的使用

Flutter加载状态管理插件loading_empty_error的使用

这个包是由ESIG的移动团队开发的。

开始使用

这个包的初衷是为了将我们常用的一些自定义控件整合起来,这些控件几乎在所有ESIG开发的Flutter应用中都会用到。这些控件不是强制使用的,如果你发现它们不能满足你的需求,请创建你自己的控件。

联系方式

发送邮件至:mobile@esig.group

许可证

版权所有 © 2020 ESIG集团


示例代码

以下是使用loading_empty_error插件的完整示例:

import 'package:flutter/material.dart';
import 'dart:developer' as developer;

import 'package:loading_empty_error/empy_widget.dart';
import 'package:loading_empty_error/error_widget.dart';
import 'package:loading_empty_error/loading_widget.dart';
import 'package:loading_empty_error/loading_indicator_type.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '加载错误与空状态示例',
      theme: ThemeData(
        primarySwatch: Colors.green,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    List<Widget> widgets = [
      SizedBox(height: 30),
      EsigErrorWidget(
        '加载错误消息最小化',
        altura: 100,
        corTexto: Colors.green,
      ),
      EsigErrorWidget(
        '加载错误消息完整化',
        ilustracaoAsset: 'assets/error.png',
        tamanhoIlustracao: BoxConstraints(maxWidth: 140, maxHeight: 140),
        titulo: 'Oops...',
        tituloFontSize: 20,
        mensagemFontSize: 16,
        corTexto: Colors.red,
        onTryAgain: () {
          developer.log('正在刷新应用');
        },
        tryAgainBackgroundColor: Colors.yellowAccent,
        tryAgainTextColor: Colors.black,
      ),
      EsigLoadingWidget(
        '加载最小化消息,大小为100x100...',
        altura: 100,
        largura: 100,
      ),
      EsigLoadingWidget(
        '准备您的完整加载消息,宽度为屏幕的一半...',
        ilustracaoAsset: 'assets/loading.png',
        tamanhoIlustracao: BoxConstraints(maxWidth: 140, maxHeight: 140),
        paddingIndicator: EdgeInsets.all(20),
        loadingIndicator: LoadingIndicator.LINEAR,
        mensagemFontSize: 16,
        largura: MediaQuery.of(context).size.width / 2,
      ),
      EsigEmptyWidget(
        '未找到最小化空状态消息',
        altura: 200,
      ),
      EsigEmptyWidget(
        '未找到完整空状态消息',
        ilustracaoAsset: 'assets/empty.png',
        tamanhoIlustracao: BoxConstraints(maxWidth: 140, maxHeight: 140),
        titulo: 'Oops...',
        tituloFontSize: 20,
        mensagemFontSize: 16,
      ),
      SizedBox(height: 60),
    ];

    return Scaffold(
      appBar: AppBar(title: Text('示例')),
      body: ListView.separated(
        itemCount: widgets.length,
        itemBuilder: (context, index) => Align(
          child: widgets[index],
        ),
        separatorBuilder: (context, index) => Divider(
          thickness: 4,
          height: 30,
        ),
      ),
    );
  }
}

更多关于Flutter加载状态管理插件loading_empty_error的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


在Flutter中,loading_empty_error 是一个用于管理加载、空数据和错误状态的插件。它简化了在不同状态下显示不同内容的逻辑。下面是一个示例代码,展示了如何使用这个插件来管理不同的状态。

首先,确保你已经在 pubspec.yaml 文件中添加了 loading_empty_error 依赖:

dependencies:
  flutter:
    sdk: flutter
  loading_empty_error: ^x.y.z  # 替换为最新版本号

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

接下来,在你的 Dart 文件中,你可以这样使用 LoadingEmptyErrorWidget

import 'package:flutter/material.dart';
import 'package:loading_empty_error/loading_empty_error.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Loading Empty Error Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  // 模拟数据加载状态
  var _dataState = DataState.loading;
  List<String> _data = [];
  String _errorMessage;

  @override
  void initState() {
    super.initState();
    // 模拟一个异步数据加载过程
    Future.delayed(Duration(seconds: 2), () {
      setState(() {
        // 这里可以模拟不同的状态:加载成功、空数据、错误
        _dataState = _data.isEmpty ? DataState.empty : DataState.loaded;
        _data = _data.isEmpty ? [] : ['Item 1', 'Item 2', 'Item 3'];
        _errorMessage = null; // 如果需要模拟错误状态,可以设置一个错误信息
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Loading Empty Error Demo'),
      ),
      body: LoadingEmptyErrorWidget<List<String>>(
        dataState: _dataState,
        data: _data,
        errorMessage: _errorMessage,
        onLoadData: () async {
          // 这里通常放置实际的数据加载逻辑
          // 这里仅作为示例,直接使用 initState 中的模拟逻辑
          return _data;
        },
        builder: (context, data) {
          return ListView.builder(
            itemCount: data.length,
            itemBuilder: (context, index) {
              return ListTile(
                title: Text(data[index]),
              );
            },
          );
        },
        emptyWidget: Center(
          child: Text('No data available'),
        ),
        errorWidget: (error) => Center(
          child: Text('Error: $error'),
        ),
        loadingWidget: Center(
          child: CircularProgressIndicator(),
        ),
      ),
    );
  }
}

// 数据状态枚举
enum DataState {
  loading,
  loaded,
  empty,
  error,
}

在这个示例中:

  1. DataState 枚举定义了四种可能的状态:加载中 (loading)、加载成功 (loaded)、空数据 (empty) 和错误 (error)。
  2. _MyHomePageState 类中维护了一个 _dataState 变量来跟踪当前的数据状态,以及 _data_errorMessage 变量来存储数据和错误信息。
  3. initState 方法中模拟了一个异步的数据加载过程,2 秒后根据数据是否为空来设置 _dataState
  4. LoadingEmptyErrorWidget 用于根据当前状态显示不同的内容:加载中显示一个进度指示器,加载成功显示数据列表,空数据显示一个提示文本,错误显示错误信息。

这个示例展示了如何使用 loading_empty_error 插件来简化状态管理,并根据不同的状态显示相应的 UI。

回到顶部