flutter - 如何在第二条路线中定义提供者
问题描述
这是我的代码:
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:sqflite/sqflite.dart';
void main() {
runApp(
Provider(
create: (context) => Lists(),
child: MyApp(),
),
);
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Event Manager',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(title: 'Event Manager Home Page'),
);
}
}
class MyHomePage extends StatelessWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Event Manager Home Page'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Hewwo',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => NewItem(),
),
);
},
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}
class Lists extends ChangeNotifier {
void stuffToBeDone(){
notifyListeners();
}
}
class NewItem extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Provider(
create: (context) => EventDatabase(),
child: NewItemWidget(),
);
}
}
class NewItemWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Consumer<NewItem>(
builder: (context, myClass, child) => Stack(
children: [
// Use SomeExpensiveWidget here, without rebuilding every time.
child,
Text("${Provider.of<EventDatabase>(context).path}"),
],
),
// Build the expensive widget here.
);
}
}
class EventDatabase extends ChangeNotifier {
String path = "";
void db() async {
final Future<Database> database =
openDatabase(join(await getDatabasesPath(), 'life.db'));
path = join(await getDatabasesPath(), 'life.db');
notifyListeners();
}
}
这是我得到的错误:
我应该如何正确定义第二条路线的提供者?
我找不到任何关于此的教程,我一直在阅读 Provider 文档并且找不到任何东西。
我是 Flutter 的新手,我正在学习 Provider,我只用一条路线就可以在我的应用程序上运行它,但是现在我正在学习 Navigator,我无法让 Provider 使用它,请指导我,非常感谢。
解决方案
您应该在 中声明您的提供者main
,并在 中删除NewItem
:
void main() {
runApp(
MultiProvider(
providers: [
Provider(create: (context) => Lists()),
Provider(create: (context) => EventDatabase()),
],
child: MyApp(),
),
);
}
推荐阅读
- drupal-8 - Drupal 8 + Simplesaml 库中的 Simplesamlphp_auth 模块
- c# - DateTime.ParseExact 抛出字符串格式错误 Unity3D
- python-3.x - 方法 connect_ex((host,port)) 用于建立到远程端口的连接。为什么要使用双括号 (())
- c# - 如何在 .Net framework 1.1 中自定义工具提示 UI
- r - ggtern:线(geom_segment)和平滑数据(geom_smooth_tern)之间的交点
- c++ - 存储 snprintf 参数以供以后使用
- html - 将十进制或 RGB 颜色代码转换为 HTML(十六进制)代码
- json - 将 JSON 传递给 WCF Web 方法
- xml-parsing - websphere 8.5.5 中的 oracle.xml.parser.v2.XMLParseException 错误
- django - 处理数百万条记录并通过取消和暂停选项保存回数据库的最佳方法是什么?