[ad_1]
データベースからユーザー名を取得する関数があり、そのユーザー名の値はグローバル文字列変数に格納されます。すべてが機能し、私の目標はそのユーザー名変数を AppBar テキストに表示することですが、「Null はサブタイプ タイプではありません。文字列」エラー。
これがメインクラス
String _custUsername = ""; // User will be redirect to this page after logged-in class _cakeHomeWidgetState extends State<cakeWidget> { BuildContext? dialogContext; @override Widget build(BuildContext context) { return Scaffold( backgroundColor: setupMainTheme, appBar: PreferredSize( preferredSize: Size.fromHeight(58), child: AppBar( centerTitle: false, title: Column( children: <Widget>[ Text(setupTime(), style: TextStyle( color: Color.fromARGB(255, 190, 190, 190), fontWeight: FontWeight.w700, fontSize: 20 ) ), ], ), automaticallyImplyLeading: false, backgroundColor: setupMainTheme, shape: RoundedRectangleBorder( borderRadius: BorderRadius.vertical( bottom: Radius.circular(12)), ), ), ), ); } // User will see this page first class cakeLoginPageMain extends State<cakeLogin> { String? _CustEmailInit; BuildContext? loginContext; Future<void> callData() async { var custUsernameGet = await UsernameGetter().Connection(_CustEmailInit!); var nameValuesGet = await NameGetter().Connection(custUsernameGet); setState(() { _custUsername = custUsernameGet; }); print("USERNAME: " + _custUsername); await Navigator.push(context, MaterialPageRoute( builder: (context) => const main.cakeWidget() ) ); } @override void initState() { } Widget build(BuildContext context) { return Scaffold( appBar: AppBar( elevation: 0, title: Text("Sign In", style: TextStyle( fontSize: 22, color: setupFontCol, fontWeight: FontWeight.bold )), backgroundColor: setupMainTheme, centerTitle: false, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(20), ) ), backgroundColor: setupMainTheme, body: Padding( padding: EdgeInsets.all(28), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ TextFormField( controller: _emailController, style: TextStyle(color: Color.fromARGB(255, 214, 213, 213)), decoration: InputDecoration( border: OutlineInputBorder( borderRadius: BorderRadius.circular(10), ), filled: true, hintStyle: TextStyle(color: Color.fromARGB(255, 197, 197, 197)), hintText: "Enter your email", fillColor: setupMainTheme, ), ), SizedBox( height: 45, width: 500, child: ElevatedButton( style: ElevatedButton.styleFrom( primary: setupFontCol, onPrimary: Colors.white, shape: const StadiumBorder(), ), var _CustEmail = _emailController.text; onPressed: () { _CustEmailInit = emailController.Text callData(); } child: Text("Sign In", style: TextStyle( color: Colors.white, fontWeight: FontWeight.normal, fontSize: 16, )) ), ), ); } } String setupTime() { if(_custUsername != null) { var hour = DateTime.now().hour; if (hour < 12) { return ' Good Morning ' + _custUsername; } if (hour < 17) { return ' Good Afternoon ' + _custUsername; } } return ' Good Evening ' + _custUsername; // Debugger throws "Null is not a subtype type of string" error here }
ただし、callData 関数で _custUsername の値を出力すると、「Daniel」などの期待値が返されますが、setupTime 関数内で null エラー エラーがスローされます。
私が試したこと:
setupTime() 関数内にローカル変数を作成し、そのローカル変数に _custUsername 値を割り当て、その関数の _custUsername 変数をローカルに割り当てられた変数に置き換えます。
解決策 1
これは、以前の質問と同じ問題です リストからリストビューにデータを取得しようとしている間、タイプ「null」はタイプ「string」のサブタイプではありません[[^].
あなたはでコードを見る必要があります…
ダーツ
var custUsernameGet = await UsernameGetter().Connection(_CustEmailInit!); var nameValuesGet = await NameGetter().Connection(custUsernameGet); setState(() { _custUsername = custUsernameGet; });
…期待する値ではなくnullを返す理由を確認してください。
[edit]
こちらもご覧ください 非同期プログラミング: futures、async、await | ダーツ[^]
[/edit]
[ad_2]
コメント