mirror of
https://github.com/flutter/samples.git
synced 2025-11-08 22:09:06 +00:00
[platform_channels] adds implementation of BasicMessageChannel for iOS (#610)
This commit is contained in:
@@ -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),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user