我有一个小部件在不同的有状态小部件类,我想在不同的类在不同的文件中使用它。如何访问小部件。
有状态部件类
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);