Navigator.of(context).push()
заменит ваш Home
экран новым (при сохранении в памяти экрана Home
, чтобы вы могли go вернуться к нему). Они находятся на одном уровне в дереве виджетов, единственный способ их вложить - использовать вложенные Navigators
Я думаю.
Но, учитывая, чего вы хотите достичь: почему бы не инициализировать ScopedModel на один уровень выше и предоставить в root вашего дерева виджетов? Таким образом, вы можете получить доступ к своей модели как на экране Home
, так и на экране Child
.
Ниже описано, как вы можете это сделать, я добавил простую ScopedModel и могу получить к ней доступ text
свойство внутри экрана Child
.
import 'package:flutter/material.dart';
import 'package:scoped_model/scoped_model.dart';
import 'package:tryout/model.dart';
void main() {
runApp(
ScopedModel<TestModel>(
model: TestModel(),
child: MaterialApp(
home: Home(),
),
)
);
}
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: <Widget>[
Center(
child: Text("This is home"),
),
RaisedButton(
child: Text("Open child view"),
onPressed: () {
Navigator.of(context)
.push(MaterialPageRoute(builder: (context) => Child()));
},
)
],
),
);
}
}
class Child extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: Text("${ScopedModel.of<TestModel>(context).text}"),
));
}
}
А вот класс TestModel
:
import 'package:scoped_model/scoped_model.dart';
class TestModel extends Model {
String _text = "Test to see if this works!";
String get text => _text;
}