fluttertoastを使おうとしたらエラーが出た?
no implementation found for method showtoast on channel ponnamkarthik/
解決方法
こちらのブログを参考にしました。対象方法は一度アプリをシュミレーターから削除して、ビルドし直すと解消できました。
問題のエラーが発生する原因になったコード
コード自体にエラーの原因はなく、パッケージの問題だったようです。
このソースコードはボタンを押すと、ref.listenの機能でトーストを出して、メッセージを表示します。
ref.listenというのは、ただのコールバック関数です。今回だと、カウンターのプロバイダーを引数として受け取って、ボタンを押すと、小さいポップアップが出てくるロジックになっております。
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:fluttertoast/fluttertoast.dart';
final countStateProvider = StateProvider<int>((ref) => 0);
class ListenPage extends ConsumerWidget {
const ListenPage({Key? key}) : super(key: key);
Widget build(BuildContext context, WidgetRef ref) {
final count = ref.watch(countStateProvider);
// Providerを購読する
ref.listen<int>(
countStateProvider, // 購読対象のProviderを指定
(previous, next) {
// 行いたい処理を書きましょう
print('call back');
Fluttertoast.showToast(
msg: 'ボタンを押したよ!',
toastLength: Toast.LENGTH_LONG,
);
},
// `onError` で何らかのエラーハンドリングが可能(任意)
onError: (error, stackTrace) => debugPrint('$error'),
);
return Scaffold(
appBar: AppBar(
title: Text('ref.listen ${count.toString()}'),
),
// 数値をSharedPreferencesに保存するロジック
floatingActionButton: FloatingActionButton(
onPressed: () {
ref.read(countStateProvider.notifier).state++;
},
child: const Icon(Icons.add),
),
);
}
}
Discussion