Flutter,如何在不同的有状态部件类中访问功能



我有一个小部件在不同的有状态小部件类,我想在不同的类在不同的文件中使用它。如何访问小部件。

有状态部件类

class List extends StatefulWidget {
const List({Key? key}) : super(key: key);
@override
State<List> createState() => _ListState();
}
class _ListState extends State<List> {
listCard(String name) {
return Container();
}
@override
Widget build(BuildContext context) {
return Container();
}
}

我将访问

中的listCard
class BorrowersListProvider extends ChangeNotifier {
List<Widget> borrowerList = [];
addBorrower(String newBorrowerName) {
borrowerList.insert(0, listCard(newBorrowerName));
notifyListeners();
}
}

你必须像这样用ChangeNotifierProvider包装你的容器。

ChangeNotifierProvider(
create: (_) => Container(),
child: MyApp(),
),

您可以在这里查看。

我个人是这样订购的:

因为我可能会使用多个提供商,所以我创建了一个appProvider文件,这是内容(但你可以像Furkan Abbasioglu在他们的回答中说的那样,这是有效的:D):

List<SingleChildWidget> appProviders = [
ChangeNotifierProvider<BorrowersListProvider>(create:(_) => BorrowersListProvider()),
];

您可以在[]中添加更多内容,以逗号分隔。

那么你的提供商看起来不错:

class BorrowersListProvider extends ChangeNotifier {
List<Widget> borrowerList = [];
addBorrower(String newBorrowerName) {
borrowerList.insert(0, listCard(newBorrowerName));
notifyListeners();
}
}

那么,你的main应该是这样的:

import 'package:flutter/material.dart';
import 'package:provider/provider.dart'
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: appProviders,
child : MaterialApp(
title: 'Material App',
home: Scaffold(
body: Center(
child: Text('Hello World'),
),
),
),
);
}
}

最后,您可以在您的小部件中以这种方式使用提供程序(如果您不想使用有状态小部件,则无需使用,这取决于您):

context.read<BorrowersListProvider>().addBorrower(newBorrowerName);

相关内容

  • 没有找到相关文章

最新更新