1.首先创建状态类,如图:
// 创建状态类并且混入 ChangeNotifier
class CurrencyProvider with ChangeNotifier{
CurrencyDto? dto ;
// 获取方法
get currencyDto => dto;
// 更改方法
void updateCurrency(currency) {
dto = currency;
// 监听
notifyListeners();
}
}
2.使用 provider 组件
runApp(
MultiProvider(providers: [
ChangeNotifierProvider<DarkMode>(create: (_) => DarkMode()),
ChangeNotifierProvider<FontModel>(create: (_) => FontModel()),
ChangeNotifierProvider<LocaleModel>(create: (_) => LocaleModel()),
ChangeNotifierProvider<ThemeModel>(create: (_) => ThemeModel()),
ChangeNotifierProvider<CurrencyProvider>(create: (_) => CurrencyProvider())
],
child:const MyApp(),
),
);
3.获取 provider
@override
Widget build(BuildContext context) {
var theme = Provider.of<ThemeModel>(context);
currencySelect = Provider.of<CurrencyProvider>(context).currencyDto;
// TODO: implement build
return Scaffold(
body:FutureBuilder(
future: showCurrencyIcon(theme,context),
builder:
(BuildContext context, AsyncSnapshot<List<Widget>> snapshot) {
return ListView(children: snapshot.data ?? []);
},
),
);
}
4.设定值 provider,注意 如果不在树里,可以设定 listen:false
onPressed: () {
setState(() {
currencySelect =CurrencyDto.fromJson(item) ;
Provider.of<CurrencyProvider>(context,listen: false).updateCurrency(currencySelect);
});
},