loading加载中组件封装

loading封装

import 'package:flutter/material.dart';

final loadingnew = LoadingNew();

class LoadingNew {
  bool _isShowing = false;

  void show(BuildContext context, [String message = '加载中...']) {
    if (_isShowing || !context.mounted) return;

    final text = message.trim().isEmpty ? '加载中...' : message.trim();
    _isShowing = true;

    showDialog<void>(
      context: context,
      barrierDismissible: false,
      builder: (_) => _LoadingDialog(message: text),
    ).then((_) {
      _isShowing = false;
    });
  }

  void hide(BuildContext context) {
    if (!_isShowing || !context.mounted) return;

    Navigator.of(context, rootNavigator: true).pop();
    _isShowing = false;
  }
}

class _LoadingDialog extends StatelessWidget {
  const _LoadingDialog({required this.message});

  final String message;

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Material(
        color: Colors.transparent,
        child: Container(
          width: 120,
          padding: const EdgeInsets.symmetric(horizontal: 18, vertical: 20),
          decoration: BoxDecoration(
            color: Colors.white,
            borderRadius: BorderRadius.circular(10),
          ),
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              const SizedBox(
                width: 28,
                height: 28,
                child: CircularProgressIndicator(strokeWidth: 3),
              ),
              const SizedBox(height: 14),
              Text(
                message,
                maxLines: 1,
                overflow: TextOverflow.ellipsis,
                textAlign: TextAlign.center,
                style: const TextStyle(fontSize: 14, color: Color(0xFF333333)),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

posted @ 2026-05-04 17:41  jialiangzai  阅读(10)  评论(0)    收藏  举报