flutter_prompt 0.0.7 copy "flutter_prompt: ^0.0.7" to clipboard
flutter_prompt: ^0.0.7 copied to clipboard

A lightweight prompt library, including: toast, loading, EasyLoading,bubbles, etc. 一个轻巧的提示库,包含有:吐司、加载、气泡等。

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_prompt/flutter_prompt.dart';

import 'future_widget.dart';

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

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        useMaterial3: true,
        textTheme: const TextTheme(
          labelLarge: TextStyle(color: Colors.white, fontSize: 12),
        ),
        elevatedButtonTheme: ElevatedButtonThemeData(
          style: ButtonStyle(
            textStyle: MaterialStateProperty.all(
              const TextStyle(color: Colors.white, fontSize: 14),
            ),
            foregroundColor: MaterialStateProperty.all(Colors.white),
            backgroundColor: MaterialStateProperty.resolveWith(
              (states) => switch (states) {
                MaterialState.disabled => Colors.grey,
                MaterialState.selected => Colors.green,
                MaterialState.pressed => Colors.yellow,
                _ => Colors.green,
              },
            ),
          ),
        ),
      ),
      //Method 1
      // home: const Home(),
      // builder: Prompt.init(style: MyCustomStyle()),
      //Method 2
      home: Prompt.initRoot(child: const Home(), style: MyCustomStyle()),
    );
  }
}

class Home extends StatefulWidget {
  const Home({super.key});

  @override
  State<Home> createState() => _HomeState();
}

class _HomeState extends State<Home> {
  String _platformVersion = 'Unknown';
  final _flutterPromptPlugin = Prompt();

  @override
  void initState() {
    super.initState();
    initPlatformState();
  }

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState() async {
    String platformVersion;
    // Platform messages may fail, so we use a try/catch PlatformException.
    // We also handle the message potentially returning null.
    Prompt.showLoading();
    try {
      platformVersion = await _flutterPromptPlugin.getPlatformVersion() ??
          'Unknown platform version';
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }
    Prompt.hideLoading();

    // If the widget was removed from the tree while the asynchronous platform
    // message was in flight, we want to discard the reply rather than calling
    // setState to update our non-existent appearance.
    if (!mounted) return;

    Prompt.showToast("@@@init",alignment: Alignment.topCenter);
    setState(() {
      _platformVersion = platformVersion;
    });
  }

  @override
  Widget build(BuildContext context) {
    var count = 1;


    _testAsyncLoading();

    final style = MyCustomStyle();
    return Scaffold(
      appBar: AppBar(
        title: const Text('Flutter Prompt'),
      ),
      body: SingleChildScrollView(
        child: Column(
          mainAxisSize: MainAxisSize.max,
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            Text('Running on: $_platformVersion\n'),
            Title(
              color: Colors.black,
              child: const Text("TOAST"),
            ),
            Wrap(
              runSpacing: 10,
              spacing: 10,
              children: [
                ElevatedButton(
                  // style: ButtonStyle(
                  //   textStyle: MaterialStateProperty.all(TextStyle(color: Colors.red)),
                  // ),
                  onPressed: () {
                    Prompt.showToast(
                      "Top Left ${count++}",
                      alignment: Alignment.topLeft,
                    );
                  },
                  child: Text("Top Left"),
                ),
                ElevatedButton(
                  onPressed: () {
                    Prompt.showToast(
                      "Top Center${count++}",
                      alignment: Alignment.topCenter,
                    );
                  },
                  child: const Text("Top Center"),
                ),
                ElevatedButton(
                  onPressed: () {
                    Prompt.showToast(
                      "Top Right${count++}",
                      alignment: Alignment.topRight,
                    );
                  },
                  child: const Text("Top Right"),
                ),
                ElevatedButton(
                  onPressed: () {
                    Prompt.showToast(
                      "Bottom Left ${count++},",
                      alignment: Alignment.bottomLeft,
                    );
                  },
                  child: const Text("Bottom Left"),
                ),
                ElevatedButton(
                  onPressed: () {
                    Prompt.showToast(
                      "Bottom Center${count++}",
                      alignment: Alignment.bottomCenter,
                    );
                  },
                  child: const Text("Bottom Center"),
                ),
                ElevatedButton(
                  onPressed: () {
                    Prompt.showToast(
                      "Bottom Right${count++}",
                      alignment: Alignment.bottomRight,
                    );
                  },
                  child: const Text("Bottom Right"),
                ),
                ElevatedButton(
                  onPressed: () {
                    Prompt.showToast(
                      "A long text, test the display effect.,A long text, test the display effect.,A long text, test the display effect.A long text, test the display effect.,A long text, test the display effect.,A long text, test the display effect.A long text, test the display effect.,A long text, test the display effect.,A long text, test the display effect.",
                      type: ToastType.error,
                      // alignment: Alignment.topCenter,
                    );
                  },
                  child: const Text("Long Text"),
                ),
              ],
            ),
            Title(
              color: Colors.black,
              child: const Text("Theme Toast"),
            ),
            Wrap(
              spacing: 4,
              children: [
                ElevatedButton(
                  style: ButtonStyle(
                    backgroundColor:
                        MaterialStateProperty.all(style.colorSuccess),
                  ),
                  onPressed: () {
                    Prompt.showToast(
                      "Success ${count++}",
                      type: ToastType.success,
                    );
                  },
                  child: const Text("Success"),
                ),
                ElevatedButton(
                  style: ButtonStyle(
                    backgroundColor: MaterialStateProperty.all(style.colorInfo),
                  ),
                  onPressed: () {
                    Prompt.showToast(
                      "Info ${count++}",
                      type: ToastType.info,
                    );
                  },
                  child: const Text("Info"),
                ),
                ElevatedButton(
                  style: ButtonStyle(
                    backgroundColor:
                        MaterialStateProperty.all(style.colorError),
                  ),
                  onPressed: () {
                    Prompt.showToast(
                      "Error ${count++}",
                      type: ToastType.error,
                    );
                  },
                  child: const Text("Error"),
                ),
                ElevatedButton(
                  style: ButtonStyle(
                    backgroundColor:
                        MaterialStateProperty.all(style.colorWarning),
                  ),
                  onPressed: () {
                    Prompt.showToast(
                      "Warning ${count++}",
                      type: ToastType.warning,
                      duration: const Duration(seconds: 3),
                    );
                  },
                  child: const Text("Warning"),
                ),
                ElevatedButton(
                  style: ButtonStyle(
                    backgroundColor:
                        MaterialStateProperty.all(style.colorWarning),
                  ),
                  onPressed: () {
                    Prompt.showToastWidget(
                      (ctx) => Container(
                        decoration: BoxDecoration(
                          color: Colors.grey.shade400,
                          borderRadius: BorderRadius.circular(12),
                        ),
                        padding: const EdgeInsets.all(10),
                        child: const Column(
                          mainAxisSize: MainAxisSize.min,
                          children: [
                            CircleAvatar(
                              child: Icon(Icons.verified_user),
                            ),
                            Text("hello~~")
                          ],
                        ),
                      ),
                      type: ToastType.warning,
                      duration: const Duration(seconds: 3),
                    );
                  },
                  child: const Text("CustomToast"),
                ),
              ],
            ),
            Title(
              color: Colors.black,
              child: const Text("Loading"),
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceAround,
              children: [
                ElevatedButton(
                  onPressed: () {
                    Prompt.showLoading(msg: "拼命加载中...");
                    Future.delayed(const Duration(seconds: 1), () {
                      Prompt.hideLoading();
                    });
                  },
                  child: const Text("Loading"),
                ),
              ],
            ),
            FutureWidget(
              future: _testAsyncLoading(),
              onSuccess: (BuildContext context, data) {
                return Text("async loading $data");
              },
            )
          ],
        ),
      ),
    );
  }
}

Future<int> _testAsyncLoading() {
  Prompt.showLoading(msg: "async loading demo");
  Prompt.showToast("你好啊");
  // return Future.delayed(const Duration(seconds:3), () => 123)
      return Future.value(123)
      .whenComplete(() => Prompt.hideLoading());
}

class MyCustomStyle with FlutterPromptCustomStyle {
  ///自定义颜色
  ///Custom color
  @override
  Color get colorDefault => super.colorDefault;

  @override
  Color get colorError => super.colorError;

  @override
  Color get colorInfo => super.colorInfo;

  @override
  Color get colorSuccess => super.colorSuccess;

  @override
  Color get colorWarning => super.colorWarning;

  ///自定义图标
  ///Custom icon
  @override
  get iconDefault => super.iconDefault;

  @override
  Widget get iconError => super.iconError;

  @override
  Widget get iconInfo => super.iconInfo;

  @override
  Widget get iconSuccess => super.iconSuccess;

  @override
  Widget get iconWarning => super.iconWarning;

  ///自定义吐司设置
  ///Custom toast
  @override
  BorderRadius get toastRadius => super.toastRadius;

  @override
  EdgeInsets get toastPadding => super.toastPadding;

  @override
  double get toastGap => super.toastGap;

  ///自定义loading
  ///Custom loadng
  @override
  EdgeInsets get loadingBgMargin => super.loadingBgMargin;

  @override
  BorderRadius get loadingBgRadius => super.loadingBgRadius;

  @override
  Color get loadingColor => super.loadingColor;

  @override
  Color get loadingDefaultMaskColor => super.loadingDefaultMaskColor;

  @override
  String get loadingDefaultText => super.loadingDefaultText;

  @override
  double get loadingHeight => super.loadingHeight;

  @override
  Widget get loadingSpin => super.loadingSpin;

  @override
  double get loadingWidth => super.loadingWidth;

  @override
  Alignment get toastDefaultAlignment => Alignment.topCenter;

  ///自定义 loading 的显示组件
  @override
  Widget customLoadingStyle(BuildContext context, String? msg,
      {String? defaultMsg, Color? maskColor}) {
    return super.customLoadingStyle(context, msg,
        defaultMsg: defaultMsg, maskColor: maskColor);
  }

  ///自定义 toast 的显示方式
  @override
  Widget customToastStyle(BuildContext context, String msg,
      {Alignment? alignment = Alignment.center,
      String? id,
      Duration? duration,
      ToastType? type}) {
    return super.customToastStyle(context, msg,
        alignment: alignment, id: id, duration: duration, type: type);
  }
}
2
likes
130
points
28
downloads

Publisher

unverified uploader

Weekly Downloads

A lightweight prompt library, including: toast, loading, EasyLoading,bubbles, etc. 一个轻巧的提示库,包含有:吐司、加载、气泡等。

Repository (GitHub)
View/report issues

Documentation

API reference

License

Apache-2.0 (license)

Dependencies

flutter, flutter_web_plugins, plugin_platform_interface

More

Packages that depend on flutter_prompt