Flutter 中 provider 的使用

135 阅读1分钟

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);
  });
},