Flutter: как получить доступ к значениям провайдера в функции вне контекста сборки дочернего виджета?

Я перешел с моего api как singlechildscrollview унаследованного виджета на flutter провайдера. В «Полном справочнике flutter-layout Flutter» было предложено provider избегать inheritWidget из-за dart сложности. Я начинаю с приложения flutter-listview materialapp и оборачиваю flutter-sdk его вокруг своего класса provider api, содержащего мои спокойные provider вызовы. Я использую счетчик, чтобы flutter-listview увидеть, что кнопка была boxconstraints нажата. Теперь я могу получить flutter доступ к своим вызовам API flutter-layout во всех объектах в дереве dart материалов.

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
    title: 'My app',
    theme: ThemeData(
         primarySwatch: Colors.blue,
    ),
    debugShowCheckedModeBanner: false,
    home: Provider(
        create: (context) => Api(),
        child: Home(title: 'my title')));
  }
}

class Home extends StatefulWidget {
 Home({Key key, @required this.title}) : super(key: key);
 final String title;
 @override
 _HomeState createState() => _HomeState();
 }

class _HomeState extends State {
 int _counter = 0;
 onLogin(BuildContext context) {
   LoginView param = new LoginView("abc@com",
    "xxx");

   Provider.of(context, listen: false)
      .addLogin(context, param)
    .then((value) {
    setState(() {
    _counter++;
    });
   }).catchError((error) {
    DialogCaller.showErrorDialog(context, 
error.toString()).then((value) {});
});
}

 @override
 Widget build(BuildContext context) {
  return Scaffold(
        appBar: AppBar(
          title: const Text('Example'),
        ),
        body: Container(
            child: Column(
          children: [
            TextButton.icon(
                label: Text("abc"),
                icon: Icon(Icons.web),
                onPressed: () {
                  onLogin(context);
                  setState(() {
                    _counter++;
                  });
                }),
            Text(
              '$_counter',
              style: 
 Theme.of(context).textTheme.headline4,
            )
          ],
        )));
 }
}

flutter

dart

provider

2022-11-10T10:28:43+00:00
Вопросы с похожей тематикой, как у вопроса:

Flutter: как получить доступ к значениям провайдера в функции вне контекста сборки дочернего виджета?