エラーが発生した背景
showDialogでダイアログボックスを表示させようと実装したとき
showDialogに必要なcontextの箇所(以下9行目)でブログのタイトルのエラーがでました。
import 'package:flutter/material.dart';
import 'package:path/path.dart';
・・・(省略)
void buttonPressed() {
showDialog(
context: context, //←この箇所でエラー
builder: (BuildContext context) => AlertDialog(
title: Text("Hello!"),
content: Text("This is sample"),
actions:[
FlatButton(
child: const Text('Cancel'),
onPressed: () => Navigator.pop(context,'Cancel')
),
FlatButton(
child: const Text('OK'),
onPressed: () => Navigator.pop(context,'OK')
)
],
)
).then((value) => resultAlert(value));
}
結論
インポート「package:path/path.dart」に
”as (任意の名前)”をつけることで解消します。
import 'package:flutter/material.dart';
import 'package:path/path.dart' as p; //←ここにasをつける
・・・(省略)
void buttonPressed() {
showDialog(
context: context,
builder: (BuildContext context) => AlertDialog(
title: Text("Hello!"),
content: Text("This is sample"),
actions:[
FlatButton(
child: const Text('Cancel'),
onPressed: () => Navigator.pop(context,'Cancel')
),
FlatButton(
child: const Text('OK'),
onPressed: () => Navigator.pop(context,'OK')
)
],
)
).then((value) => resultAlert(value));
}
原因
dart標準フレームワークにContextという変数が使われています。
ただ、「’package:path/path.dart’」(以降 path.dart)
にもContextという変数が別の用途で使われています。
今回の例では
フレームワークのContextを使用すべき箇所で
path.dartのContextを使用されているため、
以下のメッセージがでました。
The argument type ‘Context’ can’t be assigned to the parameter type ‘BuildContext’.
(引数タイプ「Context」をパラメータタイプ「BuildContext」に割り当てることはできません。)
そのため、
import ‘package:path/path.dart’ の後ろに as (任意の名前)
をつけることで、
フレームワーク標準のContextを使う場合は
context
(そのままでよい)
path.dartのContextを使う場合は
(任意の名前).context
と指定すれば フレームワーク標準のContextも path.dartのContextも両方使える状態になります。