[platform_channels] adds implementation of BasicMessageChannel for iOS (#610)

pull/623/head
Ayush Bherwani 4 years ago committed by GitHub
parent e940d54618
commit 64fce38501
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -2,8 +2,6 @@
A sample app which demonstrates how to use `MethodChannel`, `EventChannel`, `BasicMessageChannel` and `MessageCodec` in Flutter. A sample app which demonstrates how to use `MethodChannel`, `EventChannel`, `BasicMessageChannel` and `MessageCodec` in Flutter.
This sample is currently being built. Not all platforms and functionality are in place.
## Goals ## Goals
* Demonstrate how to use `MethodChannel` to invoke platform methods. * Demonstrate how to use `MethodChannel` to invoke platform methods.

@ -45,7 +45,45 @@ import Flutter
FlutterEventChannel(name: "eventChannelDemo", binaryMessenger: flutterViewController.binaryMessenger).setStreamHandler(AccelerometerStreamHandler()) FlutterEventChannel(name: "eventChannelDemo", binaryMessenger: flutterViewController.binaryMessenger).setStreamHandler(AccelerometerStreamHandler())
var petList : [[String:String]] = []
// A FlutterBasicMessageChannel for sending petList to Dart.
let stringCodecChannel = FlutterBasicMessageChannel(name: "stringCodecDemo", binaryMessenger: flutterViewController.binaryMessenger, codec: FlutterStringCodec.sharedInstance())
// Registers a MessageHandler for FlutterBasicMessageChannel to receive pet details.
FlutterBasicMessageChannel(name: "jsonMessageCodecDemo", binaryMessenger: flutterViewController.binaryMessenger, codec: FlutterJSONMessageCodec.sharedInstance())
.setMessageHandler{(message: Any?, reply: FlutterReply) -> Void in
petList.insert(message! as! [String: String], at: 0)
stringCodecChannel.sendMessage(self.convertPetListToJson(petList: petList))
}
// Registers a MessageHandler for FlutterBasicMessageHandler to receive indices of detail records to remove from the petList.
FlutterBasicMessageChannel(name: "binaryCodecDemo", binaryMessenger: flutterViewController.binaryMessenger, codec: FlutterBinaryCodec.sharedInstance()).setMessageHandler{
(message: Any?, reply: FlutterReply) -> Void in
guard let index = Int.init(String.init(data: message! as! Data, encoding: String.Encoding.utf8)!) else {
reply(nil)
return
}
if (index >= 0 && index < petList.count) {
petList.remove(at: index)
reply("Removed Successfully".data(using: .utf8)!)
stringCodecChannel.sendMessage(self.convertPetListToJson(petList: petList))
} else {
reply(nil)
}
}
GeneratedPluginRegistrant.register(with: self) GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions) return super.application(application, didFinishLaunchingWithOptions: launchOptions)
} }
// Function to convert petList to json string.
func convertPetListToJson(petList: [[String: String]]) -> String? {
guard let data = try? JSONSerialization.data(withJSONObject: ["petList": petList], options: .prettyPrinted) else {
return nil
}
return String(data: data, encoding: String.Encoding.utf8)
}
} }

@ -25,6 +25,11 @@ class PlatformChannelSample extends StatelessWidget {
'/addPetDetails': (context) => AddPetDetails(), '/addPetDetails': (context) => AddPetDetails(),
}, },
title: 'Platform Channel Sample', title: 'Platform Channel Sample',
theme: ThemeData(
snackBarTheme: SnackBarThemeData(
backgroundColor: Colors.blue[500],
),
),
home: HomePage(), home: HomePage(),
); );
} }

@ -15,6 +15,7 @@ class PetListScreen extends StatefulWidget {
class _PetListScreenState extends State<PetListScreen> { class _PetListScreenState extends State<PetListScreen> {
PetListModel petListModel; PetListModel petListModel;
final scaffoldKey = GlobalKey<ScaffoldState>();
@override @override
void initState() { void initState() {
@ -23,9 +24,17 @@ class _PetListScreenState extends State<PetListScreen> {
// to PetModel. // to PetModel.
BasicMessageChannel('stringCodecDemo', StringCodec()) BasicMessageChannel('stringCodecDemo', StringCodec())
.setMessageHandler((message) async { .setMessageHandler((message) async {
setState(() { if (message == null) {
petListModel = PetListModel.fromJson(message); scaffoldKey.currentState.showSnackBar(
}); SnackBar(
content:
const Text('An error occurred while adding pet details.')),
);
} else {
setState(() {
petListModel = PetListModel.fromJson(message);
});
}
return; return;
}); });
} }
@ -33,6 +42,7 @@ class _PetListScreenState extends State<PetListScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
key: scaffoldKey,
appBar: AppBar( appBar: AppBar(
title: Text('Pet List'), title: Text('Pet List'),
), ),
@ -84,7 +94,6 @@ class BuildPetList extends StatelessWidget {
void showSnackBar(String message, BuildContext context) { void showSnackBar(String message, BuildContext context) {
Scaffold.of(context).showSnackBar(SnackBar( Scaffold.of(context).showSnackBar(SnackBar(
backgroundColor: Theme.of(context).primaryColor,
content: Text(message), content: Text(message),
)); ));
} }

Loading…
Cancel
Save