flutter - 实施提供者
问题描述
我正在尝试在我的应用程序顶部实现提供程序,但出现错误:“位置参数:预期为 0,但找到了 1”。我尝试了不同的实现,但随后出现运行时错误“构建函数返回 null”。下面的实现有问题吗?
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
Provider<UserModel>(
builder: (context) => UserModel(),
return new MaterialApp(
title: 'Profile Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new MyHomePage(title: 'Profile'),
),
),
);
}
}
我的用户模型看起来像这样:
class UserModel extends ChangeNotifier {
String uid;
}
完整的 MyHomePage 代码:
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
final _width = MediaQuery.of(context).size.width;
final _height = MediaQuery.of(context).size.height;
return StreamBuilder<DocumentSnapshot>(
stream: Firestore.instance
.collection(Provider.of<UserModel>(context).uid)
.document('testuser')
.snapshots(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Stack(
children: <Widget>[
new Container(
color: Colors.blue,
),
new Image.network(
snapshot.data['photourl'].toString(),
fit: BoxFit.fill,
),
new BackdropFilter(
filter: new ui.ImageFilter.blur(
sigmaX: 6.0,
sigmaY: 6.0,
),
child: new Container(
decoration: BoxDecoration(
color: Colors.blue.withOpacity(0.9),
borderRadius: BorderRadius.all(Radius.circular(50.0)),
),
)),
new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
centerTitle: false,
elevation: 0.0,
backgroundColor: Colors.transparent,
),
drawer: new Drawer(
child: new Container(),
),
backgroundColor: Colors.transparent,
body: new Center(
child: new Column(
children: <Widget>[
new SizedBox(
height: _height / 12,
),
new CircleAvatar(
radius: _width < _height ? _width / 4 : _height / 4,
backgroundImage: NetworkImage(snapshot.data['photourl']),
),
new SizedBox(
height: _height / 25.0,
),
new Text(
snapshot.data['name'],
style: new TextStyle(
fontWeight: FontWeight.bold,
fontSize: _width / 15,
color: Colors.white),
),
new Padding(
padding: new EdgeInsets.only(
top: _height / 30,
left: _width / 8,
right: _width / 8),
),
new Divider(
height: _height / 15,
color: Colors.white,
),
new Row(
children: <Widget>[
rowCell(
snapshot.data['totalquestions'], 'Answers'),
rowCell(
'£ ${int.parse(snapshot.data['totalquestions']) * 2}', 'Earned'),
],
),
new Divider(
height: _height / 15, color: Colors.white),
],
),
))
],
);
} else {
return CircularProgressIndicator();
}
});
}
解决方案
问题是您正在尝试返回 MaterialApp。您需要将 MaterialApp 设置为 Provider 的子级,而不是返回它:
Provider<UserModel>(
builder: (context) => UserModel(),
child: MaterialApp( // <<<<<<<<<<<<<<<<<<<<<<<<< Here
title: 'Profile Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
推荐阅读
- ios - 颤振 - WebViewController 中的 HTML 文件未在 iOS 模拟器中按预期加载
- racket - 替代使用 boolean=?
- drupal - 如何在 Drupal 8/9 中调用外部 API
- c++ - 我怎样才能使这些函数调用更有效,因为它们目前不使用第二个参数。我已经接受了用户输入
- swift - 在 collectionView 中使用 AVPlayer 控件播放视频
- javascript - iframe 的范围问题
- rust - 如何访问 dyn 结构的字段?
- mysql - 如何通过 XAMPP 登录 MySQL?
- python - 从一维数组创建排序的二维数组
- nginx - 如何打印正在运行的 uwsgi 配置选项的当前值