blob: c0c67b78a27e9d30bcb36d94404fe6ea6d15a998 [file] [log] [blame]
import 'package:flutter/material.dart';
import 'package:fidl_fuchsia_modular/fidl.dart';
import 'package:lib.module_resolver.dart/intent_builder.dart';
const String _kModuleUrl =
'fuchsia-pkg://fuchsia.com/example_manual_relationships#meta/example_manual_relationships.cmx';
typedef GenerateChildId = String Function();
/// Button widget to start a module
class StartModuleButton extends StatelessWidget {
final ModuleContext _moduleContext;
/// The relationship to introduce a new surface with
final SurfaceRelation _relation;
/// The display text for the relationship
final String _display;
/// A fuction used to generate a child id
final GenerateChildId _generateChildId;
/// Construct a button [Widget] to add new surface with given relationship
const StartModuleButton(this._moduleContext, this._relation, this._display,
this._generateChildId);
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.all(16.0),
child: RaisedButton(
child: Center(
child: Text(_display),
),
onPressed: () {
print(
'starting module with relation $_relation moduleContext $_moduleContext');
startChildModule(_moduleContext, _relation);
},
),
);
}
/// Starts a new module and returns its controller
ModuleController startChildModule(
ModuleContext moduleContext, SurfaceRelation relation) {
ModuleControllerProxy moduleController = ModuleControllerProxy();
String name = _generateChildId();
IntentBuilder intentBuilder = IntentBuilder.handler(_kModuleUrl);
moduleContext.addModuleToStory(
name,
intentBuilder.intent,
moduleController.ctrl.request(),
relation,
(StartModuleStatus status) {});
return moduleController;
}
}