Blazor でトースター表示する(sotsera.blazor.toaster)
1. はじめに
Blazorでトースター メッセージを表示する sotsera.blazor.toaster を使ってみました。
2. サンプル実装
ではサクッと。
2.1. プロジェクト作成
プロジェクトを作成します。
プロジェクト名は use-sotsera-toaster としました。
dotnet new blazor -o use-sotsera-toaster
use-sotsera-toasterディレクトリに移動し、「Sotsera.Blazor.Toaster」パッケージを追加します。
2019.5.16 現在の最新バージョン 0.9.0-preview-3 を入れました。
cd use-sotsera-toaster dotnet add package Sotsera.Blazor.Toaster --version 0.9.0-preview-3
2.2. サービス登録
StartupクラスのConfigureServices()でサービス登録を行います。
# Startup.cs # using Microsoft.AspNetCore.Components.Builder; using Microsoft.Extensions.DependencyInjection; using Sotsera.Blazor.Toaster.Core.Models; namespace use_sotsera_toaster { public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddToaster(config => { config.PositionClass = Defaults.Classes.Position.TopRight; config.MaximumOpacity = 80; config.VisibleStateDuration = 10000; config.HideTransitionDuration = 3000; config.NewestOnTop = false; config.ShowCloseIcon = true; config.ShowProgressBar = false; config.PreventDuplicates = true; }); } public void Configure(IComponentsApplicationBuilder app) { app.AddComponent<App>("app"); } } }
【using Sotsera.Blazor.Toaster.Core.Models;】
config設定で「Defaults.Classes.Position.TopRight」を使用するために、このusingを追加しています。
AddToaster()メソッドはSotsera.Blazor.Toasterアセンブリ内でMicrosoft.Extensions.DependencyInjection名前空間に実装されています。
【services.AddToaster()】
トーストサービスを追加します。
config設定を行うことでトースト表示の振る舞いをカスタマイズできます。
サンプルで設定したconfigは以下の通りです。
PositionClass
トーストを表示する画面上の位置を設定します。サンプルでは右上を設定。MaximumOpacity
初期表示時のトーストの透過率を設定します。
100%が透過なしです。サンプルではトースト初期表示時に80%の透過率で表示されます。
※よく見ると右上の About 文字とかが透過してるのが分かります。
※トーストは消える際に徐々に薄くなります。
VisibleStateDuration
トーストが表示されてから消え始めるまでの時間をmsで指定します。HideTransitionDuration
トーストが表示からVisibleStateDuration(ms)経過した後から、徐々に薄くなって完全に消えるまでの時間をmsで指定します。NewestOnTop
複数のトーストが同時に表示される場合、新しいトーストを上に表示する場合は true 、下に表示する場合は false を指定します。
trueの場合:
falseの場合:
ShowCloseIcon
トースト右上の閉じるアイコンの表示/非表示設定を行います。ShowProgressBar
トーストが消えるまでの時間を示すプログレスバーの表示/非表示設定を行います。PreventDuplicates
同一のメッセージがすでにトースト表示されている場合に、別のトーストとして追加表示するかどうかを設定します。
falseの場合:
trueの場合:(同じメッセージのToaster.Info()呼び出しが何回行われてもトーストは1つに制御される)
2.3. ページでトースト表示を実装
Index.razorページにボタンを用意し、ボタンがクリックされたらトーストが表示されるようにします。
トーストには、スタイルの異なる Info / Success / Warning / Error が用意されているので、それぞれを表示するボタンを用意することとします。
# Pages/Index.razor # @page "/" @using Sotsera.Blazor.Toaster @inject Sotsera.Blazor.Toaster.IToaster Toaster <ToastContainer /> <input type="button" value="Show info" onclick="@ShowInfo" /> <input type="button" value="Show info" onclick="@ShowSuccess" /> <input type="button" value="Show info" onclick="@ShowWarning" /> <input type="button" value="Show info" onclick="@ShowError" /> @functions { private void ShowInfo() { Toaster.Info("info message"); } private void ShowSuccess() { Toaster.Success("Success message"); } private void ShowWarning() { Toaster.Warning("Warning message"); } private void ShowError() { Toaster.Error("Error message"); } }
【@using Sotsera.Blazor.Toaster】
ページ内で IToaster を使用するためにusing宣言を行います。
【@inject Sotsera.Blazor.Toaster.IToaster Toaster】
IToasterインターフェイスオブジェクトをインジェクトし Toaster 変数に格納します。
【<ToastContainer />】
ToastContainerオブジェクトをページ内に配置しておきます。
インジェクトした Toaster オブジェクトの「トースト表示メソッド呼び出し時」のUIレンダリングに利用されます。
【Toaster.Info() / Toaster.Success() / Toaster.Warning() / Toaster.Error() 】
各ボタンのonclickイベントハンドラ内でToasterオブジェクトのトースト表示メソッドを呼び出します。
2.4. 実行
以下のコマンドで実行します。
dotnet run
http://localhost:5000 にアクセスし、4つのボタンをクリックした画面が以下です。
3. まとめ
という事で、簡単にトースト表示実装を行えました。
今回作成したサンプルは↓です。