Reputation: 187
I'm confused with flutter, when I want to read arguments from statefulwidget (initstate) and access it into widget build, the variable is still null. how to read it properly? my code is bellow :
import 'package:flutter/material.dart';
import 'package:caritokoonline_v2/components/ResultForm.dart';
import 'package:caritokoonline_v2/podo/SearchBarangRequest.dart';
class ResultBarangActivity extends StatefulWidget {
SearchBarangRequest searchBarangRequest;
@override
_ResultBarangActivityState createState() => _ResultBarangActivityState();
}
class _ResultBarangActivityState extends State<ResultBarangActivity> {
final _scaffoldKey = GlobalKey<ScaffoldState>();
@override
void initState(){
Future.delayed(Duration.zero,(){
setState(() {
widget.searchBarangRequest = ModalRoute.of(context).settings.arguments;
print(widget.searchBarangRequest.keyword);
});
});
super.initState();
}
@override
Widget build(BuildContext context) {
if (widget.searchBarangRequest == null) return Scaffold(); //this line is always executed
return ResultForm(
scaffoldKey: _scaffoldKey,
title: widget.searchBarangRequest.keyword,
subTitle: widget.searchBarangRequest.hargaRange.toString(),);
}
}
Thank!
Upvotes: 7
Views: 13641
Reputation: 187
I know what the mistake,
so, I made global variable (title, subtitle) and assign value from searchBarangRequest like this following code :
String title = ""; String subtitle = "";
class _ResultBarangActivityState extends State<ResultBarangActivity> {
final _scaffoldKey = GlobalKey<ScaffoldState>();
@override
void initState(){
Future.delayed(Duration.zero,(){
setState(() {
widget.searchBarangRequest = ModalRoute.of(context).settings.arguments;
title = widget.searchBarangRequest.keyword;
subtitle = "${Utils().kondisiToString(widget.searchBarangRequest.kondisiBarang)} | ${widget.searchBarangRequest.hargaRange.toString()}";
// print(widget.searchBarangRequest.keyword);
getProducts(widget.searchBarangRequest);
});
});
super.initState();
}
}
and it works perfectly! thank.
Upvotes: 3