Commit 01eaf28b authored by 杜欣's avatar 杜欣

Merge branch 'dev' of git.wanmeizhensuo.com:mobile/gmalpha_flutter into dev

parents dad939dd 7d518c89
/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420 /Users/apple/.pub-cache/hosted/pub.flutter-io.cn/flutter_boost-0.0.420
\ No newline at end of file \ No newline at end of file
/Users/apple/Downloads/flutter/.pub-cache/git/flutter_plugin-31f0e00d6a02ebbfa022be8770e397f36bcb10ce /Users/apple/.pub-cache/git/flutter_plugin-31f0e00d6a02ebbfa022be8770e397f36bcb10ce
\ No newline at end of file \ No newline at end of file
/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/path_provider-1.3.0 /Users/apple/.pub-cache/hosted/pub.flutter-io.cn/path_provider-1.3.0
\ No newline at end of file \ No newline at end of file
/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5 /Users/apple/.pub-cache/hosted/pub.flutter-io.cn/sqflite-1.1.6+5
\ No newline at end of file \ No newline at end of file
/Users/apple/Downloads/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29 /Users/apple/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.29
\ No newline at end of file \ No newline at end of file
...@@ -2,6 +2,21 @@ ...@@ -2,6 +2,21 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>NSCameraUsageDescription</key>
<string>照相机</string>
<key>NSContactsUsageDescription</key>
<string>contactsDesciption</string>
<key>NSMicrophoneUsageDescription</key>
<string>麦克风</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>相册11</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>相册</string>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>CFBundleDevelopmentRegion</key> <key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string> <string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -2,6 +2,21 @@ ...@@ -2,6 +2,21 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>NSCameraUsageDescription</key>
<string>照相机</string>
<key>NSContactsUsageDescription</key>
<string>contactsDesciption</string>
<key>NSMicrophoneUsageDescription</key>
<string>麦克风</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>相册11</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>相册</string>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>CFBundleDevelopmentRegion</key> <key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string> <string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
......
...@@ -61,7 +61,10 @@ FLUTTER_EXPORT ...@@ -61,7 +61,10 @@ FLUTTER_EXPORT
*/ */
- (void)sendOnChannel:(NSString*)channel - (void)sendOnChannel:(NSString*)channel
message:(NSData* _Nullable)message message:(NSData* _Nullable)message
binaryReply:(FlutterBinaryReply _Nullable)callback; binaryReply:(FlutterBinaryReply _Nullable)callback
// TODO: Add macOS support for replies once
// https://github.com/flutter/flutter/issues/18852 is fixed.
API_UNAVAILABLE(macos);
/** /**
* Registers a message handler for incoming binary messages from the Flutter side * Registers a message handler for incoming binary messages from the Flutter side
......
...@@ -103,7 +103,11 @@ FLUTTER_EXPORT ...@@ -103,7 +103,11 @@ FLUTTER_EXPORT
* @param message The message. Must be supported by the codec of this channel. * @param message The message. Must be supported by the codec of this channel.
* @param callback A callback to be invoked with the message reply from Flutter. * @param callback A callback to be invoked with the message reply from Flutter.
*/ */
- (void)sendMessage:(id _Nullable)message reply:(FlutterReply _Nullable)callback; - (void)sendMessage:(id _Nullable)message
reply:(FlutterReply _Nullable)callback
// TODO: Add macOS support for replies once
// https://github.com/flutter/flutter/issues/18852 is fixed.
API_UNAVAILABLE(macos);
/** /**
* Registers a message handler with this channel. * Registers a message handler with this channel.
......
...@@ -38,7 +38,8 @@ ...@@ -38,7 +38,8 @@
* One of these methods must be invoked before calling `-setViewController:`. * One of these methods must be invoked before calling `-setViewController:`.
*/ */
FLUTTER_EXPORT FLUTTER_EXPORT
@interface FlutterEngine : NSObject <FlutterTextureRegistry, FlutterPluginRegistry> @interface FlutterEngine
: NSObject <FlutterBinaryMessenger, FlutterTextureRegistry, FlutterPluginRegistry>
/** /**
* Initialize this FlutterEngine with a `FlutterDartProject`. * Initialize this FlutterEngine with a `FlutterDartProject`.
* *
...@@ -236,19 +237,6 @@ FLUTTER_EXPORT ...@@ -236,19 +237,6 @@ FLUTTER_EXPORT
*/ */
@property(nonatomic, readonly) NSURL* observatoryUrl; @property(nonatomic, readonly) NSURL* observatoryUrl;
/**
* The `FlutterBinaryMessenger` associated with this FlutterEngine (used for communicating with
* channels).
*/
@property(nonatomic, readonly) NSObject<FlutterBinaryMessenger>* binaryMessenger;
/**
* The UI Isolate ID of of the engine.
*
* This property will be nil if the engine is not running.
*/
@property(nonatomic, readonly, copy) NSString* isolateId;
@end @end
#endif // FLUTTER_FLUTTERENGINE_H_ #endif // FLUTTER_FLUTTERENGINE_H_
...@@ -18,55 +18,107 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -18,55 +18,107 @@ NS_ASSUME_NONNULL_BEGIN
@protocol FlutterPluginRegistrar; @protocol FlutterPluginRegistrar;
@protocol FlutterPluginRegistry; @protocol FlutterPluginRegistry;
#pragma mark - /**
/*************************************************************************************************** * A plugin registration callback.
* Protocol for listener of events from the UIApplication, typically a FlutterPlugin. *
* Used for registering plugins with additional instances of
* `FlutterPluginRegistry`.
*
* @param registry The registry to register plugins with.
*/
typedef void (*FlutterPluginRegistrantCallback)(NSObject<FlutterPluginRegistry>* registry);
/**
* Implemented by the iOS part of a Flutter plugin.
*
* Defines a set of optional callback methods and a method to set up the plugin
* and register it to be called by other application components.
*/
@protocol FlutterPlugin <NSObject>
@required
/**
* Registers this plugin using the context information and callback registration
* methods exposed by the given registrar.
*
* The registrar is obtained from a `FlutterPluginRegistry` which keeps track of
* the identity of registered plugins and provides basic support for cross-plugin
* coordination.
*
* The caller of this method, a plugin registrant, is usually autogenerated by
* Flutter tooling based on declared plugin dependencies. The generated registrant
* asks the registry for a registrar for each plugin, and calls this method to
* allow the plugin to initialize itself and register callbacks with application
* objects available through the registrar protocol.
*
* @param registrar A helper providing application context and methods for
* registering callbacks.
*/
+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar;
@optional
/**
* Set a callback for registering plugins to an additional `FlutterPluginRegistry`,
* including headless `FlutterEngine` instances.
*
* This method is typically called from within an application's `AppDelegate` at
* startup to allow for plugins which create additional `FlutterEngine` instances
* to register the application's plugins.
*
* @param callback A callback for registering some set of plugins with a
* `FlutterPluginRegistry`.
*/ */
@protocol FlutterApplicationLifeCycleDelegate + (void)setPluginRegistrantCallback:(FlutterPluginRegistrantCallback)callback;
@optional @optional
/** /**
* Called if this has been registered for `UIApplicationDelegate` callbacks. * Called if this plugin has been registered to receive `FlutterMethodCall`s.
*
* @param call The method call command object.
* @param result A callback for submitting the result of the call.
*/
- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result;
/**
* Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
* *
* @return `NO` if this vetoes application launch. * @return `NO` if this plugin vetoes application launch.
*/ */
- (BOOL)application:(UIApplication*)application - (BOOL)application:(UIApplication*)application
didFinishLaunchingWithOptions:(NSDictionary*)launchOptions; didFinishLaunchingWithOptions:(NSDictionary*)launchOptions;
/** /**
* Called if this has been registered for `UIApplicationDelegate` callbacks. * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
* *
* @return `NO` if this vetoes application launch. * @return `NO` if this plugin vetoes application launch.
*/ */
- (BOOL)application:(UIApplication*)application - (BOOL)application:(UIApplication*)application
willFinishLaunchingWithOptions:(NSDictionary*)launchOptions; willFinishLaunchingWithOptions:(NSDictionary*)launchOptions;
/** /**
* Called if this has been registered for `UIApplicationDelegate` callbacks. * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
*/ */
- (void)applicationDidBecomeActive:(UIApplication*)application; - (void)applicationDidBecomeActive:(UIApplication*)application;
/** /**
* Called if this has been registered for `UIApplicationDelegate` callbacks. * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
*/ */
- (void)applicationWillResignActive:(UIApplication*)application; - (void)applicationWillResignActive:(UIApplication*)application;
/** /**
* Called if this has been registered for `UIApplicationDelegate` callbacks. * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
*/ */
- (void)applicationDidEnterBackground:(UIApplication*)application; - (void)applicationDidEnterBackground:(UIApplication*)application;
/** /**
* Called if this has been registered for `UIApplicationDelegate` callbacks. * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
*/ */
- (void)applicationWillEnterForeground:(UIApplication*)application; - (void)applicationWillEnterForeground:(UIApplication*)application;
/** /**
Called if this has been registered for `UIApplicationDelegate` callbacks. Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
*/ */
- (void)applicationWillTerminate:(UIApplication*)application; - (void)applicationWillTerminate:(UIApplication*)application;
/** /**
* Called if this has been registered for `UIApplicationDelegate` callbacks. * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
*/ */
- (void)application:(UIApplication*)application - (void)application:(UIApplication*)application
didRegisterUserNotificationSettings:(UIUserNotificationSettings*)notificationSettings didRegisterUserNotificationSettings:(UIUserNotificationSettings*)notificationSettings
...@@ -75,15 +127,15 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -75,15 +127,15 @@ NS_ASSUME_NONNULL_BEGIN
ios(8.0, 10.0)); ios(8.0, 10.0));
/** /**
* Called if this has been registered for `UIApplicationDelegate` callbacks. * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
*/ */
- (void)application:(UIApplication*)application - (void)application:(UIApplication*)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken; didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken;
/** /**
* Called if this has been registered for `UIApplicationDelegate` callbacks. * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
* *
* @return `YES` if this handles the request. * @return `YES` if this plugin handles the request.
*/ */
- (BOOL)application:(UIApplication*)application - (BOOL)application:(UIApplication*)application
didReceiveRemoteNotification:(NSDictionary*)userInfo didReceiveRemoteNotification:(NSDictionary*)userInfo
...@@ -108,25 +160,25 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -108,25 +160,25 @@ NS_ASSUME_NONNULL_BEGIN
API_AVAILABLE(ios(10)); API_AVAILABLE(ios(10));
/** /**
* Called if this has been registered for `UIApplicationDelegate` callbacks. * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
* *
* @return `YES` if this handles the request. * @return `YES` if this plugin handles the request.
*/ */
- (BOOL)application:(UIApplication*)application - (BOOL)application:(UIApplication*)application
openURL:(NSURL*)url openURL:(NSURL*)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey, id>*)options; options:(NSDictionary<UIApplicationOpenURLOptionsKey, id>*)options;
/** /**
* Called if this has been registered for `UIApplicationDelegate` callbacks. * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
* *
* @return `YES` if this handles the request. * @return `YES` if this plugin handles the request.
*/ */
- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url; - (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url;
/** /**
* Called if this has been registered for `UIApplicationDelegate` callbacks. * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
* *
* @return `YES` if this handles the request. * @return `YES` if this plugin handles the request.
*/ */
- (BOOL)application:(UIApplication*)application - (BOOL)application:(UIApplication*)application
openURL:(NSURL*)url openURL:(NSURL*)url
...@@ -134,9 +186,9 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -134,9 +186,9 @@ NS_ASSUME_NONNULL_BEGIN
annotation:(id)annotation; annotation:(id)annotation;
/** /**
* Called if this has been registered for `UIApplicationDelegate` callbacks. * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
* *
* @return `YES` if this handles the request. * @return `YES` if this plugin handles the request.
*/ */
- (BOOL)application:(UIApplication*)application - (BOOL)application:(UIApplication*)application
performActionForShortcutItem:(UIApplicationShortcutItem*)shortcutItem performActionForShortcutItem:(UIApplicationShortcutItem*)shortcutItem
...@@ -144,95 +196,33 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -144,95 +196,33 @@ NS_ASSUME_NONNULL_BEGIN
API_AVAILABLE(ios(9.0)); API_AVAILABLE(ios(9.0));
/** /**
* Called if this has been registered for `UIApplicationDelegate` callbacks. * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
* *
* @return `YES` if this handles the request. * @return `YES` if this plugin handles the request.
*/ */
- (BOOL)application:(UIApplication*)application - (BOOL)application:(UIApplication*)application
handleEventsForBackgroundURLSession:(nonnull NSString*)identifier handleEventsForBackgroundURLSession:(nonnull NSString*)identifier
completionHandler:(nonnull void (^)(void))completionHandler; completionHandler:(nonnull void (^)(void))completionHandler;
/** /**
* Called if this has been registered for `UIApplicationDelegate` callbacks. * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
* *
* @return `YES` if this handles the request. * @return `YES` if this plugin handles the request.
*/ */
- (BOOL)application:(UIApplication*)application - (BOOL)application:(UIApplication*)application
performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler; performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler;
/** /**
* Called if this has been registered for `UIApplicationDelegate` callbacks. * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
* *
* @return `YES` if this handles the request. * @return `YES` if this plugin handles the request.
*/ */
- (BOOL)application:(UIApplication*)application - (BOOL)application:(UIApplication*)application
continueUserActivity:(NSUserActivity*)userActivity continueUserActivity:(NSUserActivity*)userActivity
restorationHandler:(void (^)(NSArray*))restorationHandler; restorationHandler:(void (^)(NSArray*))restorationHandler;
@end @end
#pragma mark -
/***************************************************************************************************
* A plugin registration callback.
*
* Used for registering plugins with additional instances of
* `FlutterPluginRegistry`.
*
* @param registry The registry to register plugins with.
*/
typedef void (*FlutterPluginRegistrantCallback)(NSObject<FlutterPluginRegistry>* registry);
#pragma mark -
/***************************************************************************************************
* Implemented by the iOS part of a Flutter plugin.
*
* Defines a set of optional callback methods and a method to set up the plugin
* and register it to be called by other application components.
*/
@protocol FlutterPlugin <NSObject, FlutterApplicationLifeCycleDelegate>
@required
/**
* Registers this plugin using the context information and callback registration
* methods exposed by the given registrar.
*
* The registrar is obtained from a `FlutterPluginRegistry` which keeps track of
* the identity of registered plugins and provides basic support for cross-plugin
* coordination.
*
* The caller of this method, a plugin registrant, is usually autogenerated by
* Flutter tooling based on declared plugin dependencies. The generated registrant
* asks the registry for a registrar for each plugin, and calls this method to
* allow the plugin to initialize itself and register callbacks with application
* objects available through the registrar protocol.
*
* @param registrar A helper providing application context and methods for
* registering callbacks.
*/
+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar;
@optional
/**
* Set a callback for registering plugins to an additional `FlutterPluginRegistry`,
* including headless `FlutterEngine` instances.
*
* This method is typically called from within an application's `AppDelegate` at
* startup to allow for plugins which create additional `FlutterEngine` instances
* to register the application's plugins.
*
* @param callback A callback for registering some set of plugins with a
* `FlutterPluginRegistry`.
*/
+ (void)setPluginRegistrantCallback:(FlutterPluginRegistrantCallback)callback;
@optional
/** /**
* Called if this plugin has been registered to receive `FlutterMethodCall`s.
*
* @param call The method call command object.
* @param result A callback for submitting the result of the call.
*/
- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result;
@end
#pragma mark -
/***************************************************************************************************
*Registration context for a single `FlutterPlugin`, providing a one stop shop *Registration context for a single `FlutterPlugin`, providing a one stop shop
*for the plugin to access contextual information and register callbacks for *for the plugin to access contextual information and register callbacks for
*various application events. *various application events.
...@@ -322,8 +312,7 @@ typedef void (*FlutterPluginRegistrantCallback)(NSObject<FlutterPluginRegistry>* ...@@ -322,8 +312,7 @@ typedef void (*FlutterPluginRegistrantCallback)(NSObject<FlutterPluginRegistry>*
- (NSString*)lookupKeyForAsset:(NSString*)asset fromPackage:(NSString*)package; - (NSString*)lookupKeyForAsset:(NSString*)asset fromPackage:(NSString*)package;
@end @end
#pragma mark - /**
/***************************************************************************************************
* A registry of Flutter iOS plugins. * A registry of Flutter iOS plugins.
* *
* Plugins are identified by unique string keys, typically the name of the * Plugins are identified by unique string keys, typically the name of the
...@@ -368,13 +357,12 @@ typedef void (*FlutterPluginRegistrantCallback)(NSObject<FlutterPluginRegistry>* ...@@ -368,13 +357,12 @@ typedef void (*FlutterPluginRegistrantCallback)(NSObject<FlutterPluginRegistry>*
- (NSObject*)valuePublishedByPlugin:(NSString*)pluginKey; - (NSObject*)valuePublishedByPlugin:(NSString*)pluginKey;
@end @end
#pragma mark - /**
/***************************************************************************************************
* Implement this in the `UIAppDelegate` of your app to enable Flutter plugins to register * Implement this in the `UIAppDelegate` of your app to enable Flutter plugins to register
* themselves to the application life cycle events. * themselves to the application life cycle events.
*/ */
@protocol FlutterAppLifeCycleProvider @protocol FlutterAppLifeCycleProvider
- (void)addApplicationLifeCycleDelegate:(NSObject<FlutterApplicationLifeCycleDelegate>*)delegate; - (void)addApplicationLifeCycleDelegate:(NSObject<FlutterPlugin>*)delegate;
@end @end
NS_ASSUME_NONNULL_END; NS_ASSUME_NONNULL_END;
......
...@@ -21,7 +21,7 @@ FLUTTER_EXPORT ...@@ -21,7 +21,7 @@ FLUTTER_EXPORT
* *
* `delegate` will only referenced weakly. * `delegate` will only referenced weakly.
*/ */
- (void)addDelegate:(NSObject<FlutterApplicationLifeCycleDelegate>*)delegate; - (void)addDelegate:(NSObject<FlutterPlugin>*)delegate;
/** /**
* Calls all plugins registered for `UIApplicationDelegate` callbacks. * Calls all plugins registered for `UIApplicationDelegate` callbacks.
...@@ -39,6 +39,31 @@ FLUTTER_EXPORT ...@@ -39,6 +39,31 @@ FLUTTER_EXPORT
- (BOOL)application:(UIApplication*)application - (BOOL)application:(UIApplication*)application
willFinishLaunchingWithOptions:(NSDictionary*)launchOptions; willFinishLaunchingWithOptions:(NSDictionary*)launchOptions;
/**
* Calls all plugins registered for `UIApplicationDelegate` callbacks.
*/
- (void)applicationDidBecomeActive:(UIApplication*)application;
/**
* Calls all plugins registered for `UIApplicationDelegate` callbacks.
*/
- (void)applicationWillResignActive:(UIApplication*)application;
/**
* Calls all plugins registered for `UIApplicationDelegate` callbacks.
*/
- (void)applicationDidEnterBackground:(UIApplication*)application;
/**
* Calls all plugins registered for `UIApplicationDelegate` callbacks.
*/
- (void)applicationWillEnterForeground:(UIApplication*)application;
/**
* Calls all plugins registered for `UIApplicationDelegate` callbacks.
*/
- (void)applicationWillTerminate:(UIApplication*)application;
/** /**
* Called if this plugin has been registered for `UIApplicationDelegate` callbacks. * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
*/ */
......
...@@ -29,21 +29,20 @@ extern NSNotificationName const FlutterSemanticsUpdateNotification; ...@@ -29,21 +29,20 @@ extern NSNotificationName const FlutterSemanticsUpdateNotification;
/** /**
* A `UIViewController` implementation for Flutter views. * A `UIViewController` implementation for Flutter views.
* *
* Dart execution, channel communication, texture registration, and plugin registration are all * Dart execution, channel communication, texture registration, and plugin registration
* handled by `FlutterEngine`. Calls on this class to those members all proxy through to the * are all handled by `FlutterEngine`. Calls on this class to those members all proxy
* `FlutterEngine` attached FlutterViewController. * through to the `FlutterEngine` attached FlutterViewController.
* *
* A FlutterViewController can be initialized either with an already-running `FlutterEngine` via * A FlutterViewController can be initialized either with an already-running `FlutterEngine`,
* the `initWithEngine:` initializer, or it can be initialized with a `FlutterDartProject` that * or it can be initialized with a `FlutterDartProject` that will be used to spin up
* will be used to implicitly spin up a new `FlutterEngine`. Creating a `FlutterEngine before * a new `FlutterEngine`. Developers looking to present and hide FlutterViewControllers
* showing a `FlutterViewController` can be used to pre-initialize the Dart VM and to prepare the * in native iOS applications will usually want to maintain the `FlutterEngine` instance
* isolate in order to reduce the latency to the first rendered frame. Holding a `FlutterEngine` * so as not to lose Dart-related state and asynchronous tasks when navigating back and
* independently of FlutterViewControllers can also be used to not to lose Dart-related state and * forth between a FlutterViewController and other `UIViewController`s.
* asynchronous tasks when navigating back and forth between a FlutterViewController and other
* `UIViewController`s.
*/ */
FLUTTER_EXPORT FLUTTER_EXPORT
@interface FlutterViewController : UIViewController <FlutterTextureRegistry, FlutterPluginRegistry> @interface FlutterViewController
: UIViewController <FlutterBinaryMessenger, FlutterTextureRegistry, FlutterPluginRegistry>
/** /**
* Initializes this FlutterViewController with the specified `FlutterEngine`. * Initializes this FlutterViewController with the specified `FlutterEngine`.
...@@ -132,14 +131,6 @@ FLUTTER_EXPORT ...@@ -132,14 +131,6 @@ FLUTTER_EXPORT
*/ */
- (id<FlutterPluginRegistry>)pluginRegistry; - (id<FlutterPluginRegistry>)pluginRegistry;
/**
* True if at least one frame has rendered and the ViewController has appeared.
*
* This property is reset to false when the ViewController disappears. It is
* guaranteed to only alternate between true and false for observers.
*/
@property(nonatomic, readonly, getter=isDisplayingFlutterUI) BOOL displayingFlutterUI;
/** /**
* Specifies the view to use as a splash screen. Flutter's rendering is asynchronous, so the first * Specifies the view to use as a splash screen. Flutter's rendering is asynchronous, so the first
* frame rendered by the Flutter application might not immediately appear when theFlutter view is * frame rendered by the Flutter application might not immediately appear when theFlutter view is
...@@ -174,14 +165,6 @@ FLUTTER_EXPORT ...@@ -174,14 +165,6 @@ FLUTTER_EXPORT
*/ */
@property(weak, nonatomic, readonly) FlutterEngine* engine; @property(weak, nonatomic, readonly) FlutterEngine* engine;
/**
* The `FlutterBinaryMessenger` associated with this FlutterViewController (used for communicating
* with channels).
*
* This is just a convenient way to get the |FlutterEngine|'s binary messenger.
*/
@property(nonatomic, readonly) NSObject<FlutterBinaryMessenger>* binaryMessenger;
@end @end
#endif // FLUTTER_FLUTTERVIEWCONTROLLER_H_ #endif // FLUTTER_FLUTTERVIEWCONTROLLER_H_
...@@ -22,9 +22,5 @@ ...@@ -22,9 +22,5 @@
<string>1.0</string> <string>1.0</string>
<key>MinimumOSVersion</key> <key>MinimumOSVersion</key>
<string>8.0</string> <string>8.0</string>
<key>FlutterEngine</key>
<string>b863200c37df4ed378042de11c4e9ff34e4e58c9</string>
<key>ClangVersion</key>
<string>Fuchsia clang version 8.0.0 (based on LLVM 8.0.0svn)</string>
</dict> </dict>
</plist> </plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Headers/Flutter.h</key>
<data>
LQBk1GD+u1YEANQovLVv2R/uUag=
</data>
<key>Headers/FlutterAppDelegate.h</key>
<data>
VQRY5CUL6CLzdXzfScbDvTdpElA=
</data>
<key>Headers/FlutterBinaryMessenger.h</key>
<data>
3TKVS3KoBmkupZxin9YbnrPtMCk=
</data>
<key>Headers/FlutterCallbackCache.h</key>
<data>
v6UEJmd8GTKddiiNFrVRsY9DAZo=
</data>
<key>Headers/FlutterChannels.h</key>
<data>
VA9uQqBQMxHCYJHnGCv1UPch4S0=
</data>
<key>Headers/FlutterCodecs.h</key>
<data>
/PGN0simzUo4u/YhIKuBq/r8rww=
</data>
<key>Headers/FlutterDartProject.h</key>
<data>
buhHk6WXrZ6JBOHQgjXCYITi+xU=
</data>
<key>Headers/FlutterEngine.h</key>
<data>
AdZsTJVwLyqWvLg0GGXL63DxLwA=
</data>
<key>Headers/FlutterHeadlessDartRunner.h</key>
<data>
M8/dhQH3VcQVHupUxQ1dGsbG3Ek=
</data>
<key>Headers/FlutterMacros.h</key>
<data>
Ez4684e7XzQ8vidzmRvJh3qCNxk=
</data>
<key>Headers/FlutterPlatformViews.h</key>
<data>
14j1xmP4V+DT37g/he3ZhpoeOig=
</data>
<key>Headers/FlutterPlugin.h</key>
<data>
maoHSos7SW7cnlOzz+gFyKQiG/s=
</data>
<key>Headers/FlutterPluginAppLifeCycleDelegate.h</key>
<data>
gctJ/r455gE8/rQYDs4lB3RUOkI=
</data>
<key>Headers/FlutterTexture.h</key>
<data>
1LdQETkD4xmsSZETVBywMxxLPwM=
</data>
<key>Headers/FlutterViewController.h</key>
<data>
1iNZtmSzviLXO3AyP98IfgOStLs=
</data>
<key>Info.plist</key>
<data>
mmIimfQR8J/7o8WT4YOSt84JO2I=
</data>
<key>Modules/module.modulemap</key>
<data>
wJV5dCKEGl+FAtDc8wJJh/fvKXs=
</data>
<key>icudtl.dat</key>
<data>
cjDelfr3ugTDn3+r5icq6Ge1n4Q=
</data>
</dict>
<key>files2</key>
<dict>
<key>Headers/Flutter.h</key>
<dict>
<key>hash</key>
<data>
LQBk1GD+u1YEANQovLVv2R/uUag=
</data>
<key>hash2</key>
<data>
8ZWbAXinM+GRkpUfLzcvsat4nccJ7ZNgGrAhy0iglXs=
</data>
</dict>
<key>Headers/FlutterAppDelegate.h</key>
<dict>
<key>hash</key>
<data>
VQRY5CUL6CLzdXzfScbDvTdpElA=
</data>
<key>hash2</key>
<data>
TYSAedf2/9SM/60199M+eUXHFYq5f85akCVmksptiNg=
</data>
</dict>
<key>Headers/FlutterBinaryMessenger.h</key>
<dict>
<key>hash</key>
<data>
3TKVS3KoBmkupZxin9YbnrPtMCk=
</data>
<key>hash2</key>
<data>
USlivwosbaNJJAtX2mpOdBVwZE9osgj/I3NnC9DCS04=
</data>
</dict>
<key>Headers/FlutterCallbackCache.h</key>
<dict>
<key>hash</key>
<data>
v6UEJmd8GTKddiiNFrVRsY9DAZo=
</data>
<key>hash2</key>
<data>
5i4mQAU2+ZEryb3POeTu9hkEM1IZkS/uLLxqLrcXRv0=
</data>
</dict>
<key>Headers/FlutterChannels.h</key>
<dict>
<key>hash</key>
<data>
VA9uQqBQMxHCYJHnGCv1UPch4S0=
</data>
<key>hash2</key>
<data>
Vjqn7PZHV00y0Cwe+UNlt+OGrzooaDBa5tZfqKvrAIY=
</data>
</dict>
<key>Headers/FlutterCodecs.h</key>
<dict>
<key>hash</key>
<data>
/PGN0simzUo4u/YhIKuBq/r8rww=
</data>
<key>hash2</key>
<data>
GbPPDQfdsjagMceW1kC1jPNF+b4DsZJtbTzbB4ohtR8=
</data>
</dict>
<key>Headers/FlutterDartProject.h</key>
<dict>
<key>hash</key>
<data>
buhHk6WXrZ6JBOHQgjXCYITi+xU=
</data>
<key>hash2</key>
<data>
CH/IbvOeuO5i1POUHyFrDUlrdIiZzHMN54RPuzGXxPE=
</data>
</dict>
<key>Headers/FlutterEngine.h</key>
<dict>
<key>hash</key>
<data>
AdZsTJVwLyqWvLg0GGXL63DxLwA=
</data>
<key>hash2</key>
<data>
JhX0RJjHUfm6ThgTGwDCcmK1+Z9dMlnv9Jiq0jCSIUw=
</data>
</dict>
<key>Headers/FlutterHeadlessDartRunner.h</key>
<dict>
<key>hash</key>
<data>
M8/dhQH3VcQVHupUxQ1dGsbG3Ek=
</data>
<key>hash2</key>
<data>
2LUPyCMVHwKeIFZP9I5vV64Kl7unE39yisrUZVrUiVo=
</data>
</dict>
<key>Headers/FlutterMacros.h</key>
<dict>
<key>hash</key>
<data>
Ez4684e7XzQ8vidzmRvJh3qCNxk=
</data>
<key>hash2</key>
<data>
Lkv4JVLTujcNJRJvmOh5VX+fZHuEvj7MAwT8cSOlJnc=
</data>
</dict>
<key>Headers/FlutterPlatformViews.h</key>
<dict>
<key>hash</key>
<data>
14j1xmP4V+DT37g/he3ZhpoeOig=
</data>
<key>hash2</key>
<data>
WtX5LuTXzU9cYk6a/IwuJNP7tIvt2/I+sFiRK1SryNg=
</data>
</dict>
<key>Headers/FlutterPlugin.h</key>
<dict>
<key>hash</key>
<data>
maoHSos7SW7cnlOzz+gFyKQiG/s=
</data>
<key>hash2</key>
<data>
zVbxlG7MdrPSwtAajDCXzGiZsYEfvRpPlva7i1yMjUk=
</data>
</dict>
<key>Headers/FlutterPluginAppLifeCycleDelegate.h</key>
<dict>
<key>hash</key>
<data>
gctJ/r455gE8/rQYDs4lB3RUOkI=
</data>
<key>hash2</key>
<data>
0NeMhrK4y2kLHg0c8MGwANiCI5BUXUcz6iisREtmIuQ=
</data>
</dict>
<key>Headers/FlutterTexture.h</key>
<dict>
<key>hash</key>
<data>
1LdQETkD4xmsSZETVBywMxxLPwM=
</data>
<key>hash2</key>
<data>
7BCnkj4wcr2olEbhMVyuYZSgMXDx0XpJQ6/WdwMLdmE=
</data>
</dict>
<key>Headers/FlutterViewController.h</key>
<dict>
<key>hash</key>
<data>
1iNZtmSzviLXO3AyP98IfgOStLs=
</data>
<key>hash2</key>
<data>
LWq4OdgIuM3854RYisDOh7XYZtEB4HOm46p6QJ7WOdg=
</data>
</dict>
<key>Modules/module.modulemap</key>
<dict>
<key>hash</key>
<data>
wJV5dCKEGl+FAtDc8wJJh/fvKXs=
</data>
<key>hash2</key>
<data>
0VjriRpZ7AZZaP/0mMAPMJPhi6LoMB4MhXzL5j24tGs=
</data>
</dict>
<key>icudtl.dat</key>
<dict>
<key>hash</key>
<data>
cjDelfr3ugTDn3+r5icq6Ge1n4Q=
</data>
<key>hash2</key>
<data>
INkC1JLiLe7AB9SqeZRmj6oaRlkPwCvM96J3pilvsnc=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>
...@@ -43,7 +43,7 @@ EXTERNAL SOURCES: ...@@ -43,7 +43,7 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/xservice_kit/ios" :path: ".symlinks/plugins/xservice_kit/ios"
SPEC CHECKSUMS: SPEC CHECKSUMS:
Flutter: 0e3d915762c693b495b44d77113d4970485de6ec Flutter: 58dd7d1b27887414a370fcccb9e645c08ffd7a6a
flutter_boost: 0e85ea37c74ed39ee7b91a35612afa1605557484 flutter_boost: 0e85ea37c74ed39ee7b91a35612afa1605557484
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
gengmei_flutter_plugin: 9461e8644c06c4a0e38292ddcca1cc55e6ac6156 gengmei_flutter_plugin: 9461e8644c06c4a0e38292ddcca1cc55e6ac6156
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
"tag": "1.0.0" "tag": "1.0.0"
}, },
"platforms": { "platforms": {
"ios": "8.0" "ios": "7.0"
}, },
"vendored_frameworks": "Flutter.framework" "vendored_frameworks": "Flutter.framework"
} }
...@@ -43,7 +43,7 @@ EXTERNAL SOURCES: ...@@ -43,7 +43,7 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/xservice_kit/ios" :path: ".symlinks/plugins/xservice_kit/ios"
SPEC CHECKSUMS: SPEC CHECKSUMS:
Flutter: 0e3d915762c693b495b44d77113d4970485de6ec Flutter: 58dd7d1b27887414a370fcccb9e645c08ffd7a6a
flutter_boost: 0e85ea37c74ed39ee7b91a35612afa1605557484 flutter_boost: 0e85ea37c74ed39ee7b91a35612afa1605557484
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
gengmei_flutter_plugin: 9461e8644c06c4a0e38292ddcca1cc55e6ac6156 gengmei_flutter_plugin: 9461e8644c06c4a0e38292ddcca1cc55e6ac6156
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -364,7 +364,7 @@ ...@@ -364,7 +364,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = NO; MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos; SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2"; TARGETED_DEVICE_FAMILY = "1,2";
...@@ -444,7 +444,7 @@ ...@@ -444,7 +444,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = YES; MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES; ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos; SDKROOT = iphoneos;
...@@ -494,7 +494,7 @@ ...@@ -494,7 +494,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = NO; MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos; SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2"; TARGETED_DEVICE_FAMILY = "1,2";
......
...@@ -27,8 +27,6 @@ ...@@ -27,8 +27,6 @@
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"> shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<MacroExpansion> <MacroExpansion>
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
...@@ -38,11 +36,11 @@ ...@@ -38,11 +36,11 @@
ReferencedContainer = "container:Runner.xcodeproj"> ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference> </BuildableReference>
</MacroExpansion> </MacroExpansion>
<AdditionalOptions> <Testables>
</AdditionalOptions> </Testables>
</TestAction> </TestAction>
<LaunchAction <LaunchAction
buildConfiguration = "Debug" buildConfiguration = "Release"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0" launchStyle = "0"
...@@ -61,8 +59,6 @@ ...@@ -61,8 +59,6 @@
ReferencedContainer = "container:Runner.xcodeproj"> ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference> </BuildableReference>
</BuildableProductRunnable> </BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction> </LaunchAction>
<ProfileAction <ProfileAction
buildConfiguration = "Profile" buildConfiguration = "Profile"
......
...@@ -3,4 +3,8 @@ ...@@ -3,4 +3,8 @@
@interface AppDelegate : FlutterAppDelegate @interface AppDelegate : FlutterAppDelegate
/**
*flutter 管道
*/
@property(nonatomic,strong)FlutterEventSink _flutterEvent;
@end @end
#include "AppDelegate.h" #include "AppDelegate.h"
#include "GeneratedPluginRegistrant.h" #include "GeneratedPluginRegistrant.h"
@interface AppDelegate()<FlutterStreamHandler>
@end
@implementation AppDelegate @implementation AppDelegate
- (BOOL)application:(UIApplication *)application - (BOOL)application:(UIApplication *)application
...@@ -17,9 +20,14 @@ ...@@ -17,9 +20,14 @@
(FlutterViewController*)self.window.rootViewController; (FlutterViewController*)self.window.rootViewController;
FlutterMethodChannel* buryChannel = [FlutterMethodChannel FlutterMethodChannel* buryChannel = [FlutterMethodChannel
methodChannelWithName:@"flutter_bury_channel" methodChannelWithName:@"flutter_channel"
binaryMessenger:controller]; binaryMessenger:controller];
FlutterEventChannel* flutterEvent=[FlutterEventChannel
eventChannelWithName:@"flutter_channel_event" binaryMessenger:controller];
[flutterEvent setStreamHandler:self];
[buryChannel setMethodCallHandler:^(FlutterMethodCall* call, [buryChannel setMethodCallHandler:^(FlutterMethodCall* call,
FlutterResult result) { FlutterResult result) {
NSLog(@" ME %@ argue %@",call.method,call.arguments); NSLog(@" ME %@ argue %@",call.method,call.arguments);
...@@ -60,27 +68,26 @@ ...@@ -60,27 +68,26 @@
}else if([call.method isEqualToString:@"INIT_PARAMS"]){ }else if([call.method isEqualToString:@"INIT_PARAMS"]){
NSMutableDictionary * map=[[NSMutableDictionary alloc] init]; NSMutableDictionary * map=[[NSMutableDictionary alloc] init];
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"sessionid=9odo0sov71x66ke9dlphibnq9i9gduxj;_gtid=3fbe9b78d2cb11e98bc1525400e82fab5270; _gm_token=db88861568285036" forKey:@"cookie"]; [dict setObject:@"sessionid=9odo0sov71x66ke9dlphibnq9i9gduxj;_gtid=3fbe9b78d2cb11e98bc1525400e82fab5270; _gm_token=db88861568285036" forKey:@"Cookie"];
[dict setObject:@"debug" forKey:@"buildConfig"]; [dict setObject:@"debug" forKey:@"buildConfig"];
//HERE //HERE
// [dict setObject:@"172.30.9.84:6666" forKey:@"proxy"]; // [dict setObject:@"172.30.9.84:6666" forKey:@"proxy"];
result(dict); result(dict);
}else if([call.method isEqualToString:@"UPLOAD_IMG"]){ }else if([call.method isEqualToString:@"UPLOAD_IMG"]){
// NSString* path=call.arguments[@"path"];
// NSString* token=call.arguments[@"token"];
// [[ALUpLoadManager shareInstance] setImage:path token:token block:^(NSString *url) {
// result(url);
// NSLog(@"!!!OKK %@",url);
// } failBlock:^(NSString *message) {
// NSLog(@"!!!ERROR %@",message);
// result([FlutterError errorWithCode:@"11" message:message details:message]);
// }];
// NSData *data = [NSData dataWithContentsOfFile:path];
// UIImage * printerImg = [UIImage imageWithData:data];
result(@"2019/10/17/1156/44dbb13ac6d9"); result(@"2019/10/17/1156/44dbb13ac6d9");
} }
}]; }];
} }
#pragma mark - FlutterStreamHandler
- (FlutterError* _Nullable)onListenWithArguments:(id _Nullable)arguments
eventSink:(FlutterEventSink)eventSink{
self._flutterEvent = eventSink;
return nil;
}
- (FlutterError* _Nullable)onCancelWithArguments:(id _Nullable)arguments {
return nil;
}
@end @end
...@@ -2,6 +2,21 @@ ...@@ -2,6 +2,21 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>NSCameraUsageDescription</key>
<string>照相机</string>
<key>NSContactsUsageDescription</key>
<string>contactsDesciption</string>
<key>NSMicrophoneUsageDescription</key>
<string>麦克风</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>相册11</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>相册</string>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>CFBundleDevelopmentRegion</key> <key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string> <string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
......
...@@ -62,39 +62,21 @@ class AlbumModel extends BaseModel { ...@@ -62,39 +62,21 @@ class AlbumModel extends BaseModel {
var map = (event as Map); var map = (event as Map);
// var list = map[_nowDirName]; // var list = map[_nowDirName];
_mainValue.forEach((k, itemList) { _mainValue.forEach((k, itemList) {
for (int i = 0; i < itemList.length; i++) { var key = map[k];
if (map[k] == null || map[k][i] == null) { if (key != null) {
continue; for (int i = 0; i < itemList.length; i++) {
} if (key[i] == null) {
var newPath = map[k][i]["path"] as String; continue;
if ((itemList[i].path == null || itemList[i].path.isEmpty) && }
newPath != null) { if (itemList[i].path == null) {
itemList[i].path = newPath; itemList[i].path = key[i]["path"];
} }
var realPath = map[k][i]["realPath"] as String; if (itemList[i].realPath == null) {
if ((itemList[i].realPath == null || itemList[i].realPath.isEmpty) && itemList[i].realPath = key[i]["realPath"];
realPath != null) { }
itemList[i].realPath = realPath;
} }
} }
}); });
// var recordList=_mainValue[_nowDirName];
// List<ScanImageItem> tempList = new List();
// if (list != null && !list.isEmpty) {
//// for (int i = 0; i < albumLive.data.length; i++) {
//// if (list[i]["path"] != null) {
//// albumLive.data[i].path = list[i]["path"];
//// }
//// }
// for (var item in list) {
// ScanImageItem scanImageItem = new ScanImageItem();
// scanImageItem.path = item["path"];
// scanImageItem.size = item["size"];
// scanImageItem.realPath = item["realPath"];
// tempList.add(scanImageItem);
// }
// }
// print("EVENTTTT !! ${tempList.length} ${tempList}");
albumLive.notifyView(_mainValue[_nowDirName]); albumLive.notifyView(_mainValue[_nowDirName]);
} }
......
...@@ -106,6 +106,14 @@ class ServiceGenerator extends GeneratorForAnnotation<ServiceCenter> { ...@@ -106,6 +106,14 @@ class ServiceGenerator extends GeneratorForAnnotation<ServiceCenter> {
} }
}); });
"""); """);
// mapBuffer.write("""
// .map((value){
// if(value!=null&&value.statusCode==200){
// Map map = json.decode(value.toString());
// return ${methodElement.returnType.name}.fromJson(map);
// }
// });
// """);
methodBuffer.write(""" methodBuffer.write("""
Observable<${methodElement.returnType.name}> ${methodElement.name}(${tempParams == null ? "" : tempParams}){ Observable<${methodElement.returnType.name}> ${methodElement.name}(${tempParams == null ? "" : tempParams}){
......
...@@ -19,52 +19,45 @@ class MessageModel extends BaseModel { ...@@ -19,52 +19,45 @@ class MessageModel extends BaseModel {
MessageModel(this.page, this.count); MessageModel(this.page, this.count);
init(BuildContext context) { init(BuildContext context) {
getMyMessage(page, count); getMyMessage(context, page, count);
getUnreadMessage(0, likeUnreadMessageLive); getUnreadMessage(context, 0, likeUnreadMessageLive);
getUnreadMessage(1, followUnreadMessageLive); getUnreadMessage(context, 1, followUnreadMessageLive);
getLatestMessage(); getLatestMessage(context);
} }
getMyMessage(BuildContext context, page, count, [callback]) {
getMyMessage(page, count, [callback]){ MessageRepository.getInstance().getMyMessage(page, count).listen((value) {
MessageRepository.getInstance()
.getMyMessage(page, count)
.listen((value) {
if (value != null) { if (value != null) {
if(page > 1) { if (page > 1) {
myMessageList.data?.addAll(value.data); myMessageList.data?.addAll(value.data);
} else { } else {
myMessageList = value; myMessageList = value;
} }
if(callback != null) callback(value); if (callback != null) callback(value);
myMessageLive.notifyView(myMessageList); myMessageLive.notifyView(myMessageList);
} }
}).onError((error) { }).onError((error) {
Toast.show(error, "${error.toString()}"); Toast.show(context, "${error.toString()}");
}); });
} }
getUnreadMessage(type, dataLive) { getUnreadMessage(BuildContext context, type, dataLive) {
MessageRepository.getInstance() MessageRepository.getInstance().getUnreadMessage(type).listen((value) {
.getUnreadMessage(type)
.listen((value) {
if (value != null) { if (value != null) {
dataLive.notifyView(value); dataLive.notifyView(value);
} }
}).onError((error) { }).onError((error) {
Toast.show(error, "${error.toString()}"); Toast.show(context, "${error.toString()}");
}); });
} }
getLatestMessage() { getLatestMessage(BuildContext context) {
MessageRepository.getInstance() MessageRepository.getInstance().getLatestMessage().listen((value) {
.getLatestMessage()
.listen((value) {
if (value != null) { if (value != null) {
latestMessageLive.notifyView(value); latestMessageLive.notifyView(value);
} }
}).onError((error) { }).onError((error) {
Toast.show(error, "${error.toString()}"); Toast.show(context, "${error.toString()}");
}); });
} }
......
...@@ -8,6 +8,8 @@ import 'package:gmalpha_flutter/NewMessageModel/service/remote/entity/MyMessageE ...@@ -8,6 +8,8 @@ import 'package:gmalpha_flutter/NewMessageModel/service/remote/entity/MyMessageE
import 'package:gmalpha_flutter/NewMessageModel/service/remote/entity/UnreadMessageEntity.dart'; import 'package:gmalpha_flutter/NewMessageModel/service/remote/entity/UnreadMessageEntity.dart';
import 'package:gmalpha_flutter/NewMessageModel/util/Jump.dart'; import 'package:gmalpha_flutter/NewMessageModel/util/Jump.dart';
import 'package:gmalpha_flutter/commonModel/GMBase.dart'; import 'package:gmalpha_flutter/commonModel/GMBase.dart';
import 'package:gmalpha_flutter/commonModel/eventbus/GlobalEventBus.dart';
import 'package:gmalpha_flutter/commonModel/eventbus/event/LoginEvent.dart';
import 'package:gmalpha_flutter/res/value/ALColors.dart'; import 'package:gmalpha_flutter/res/value/ALColors.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart';
...@@ -18,6 +20,7 @@ class MessagePage extends StatefulWidget { ...@@ -18,6 +20,7 @@ class MessagePage extends StatefulWidget {
MessagePage(this.fromPage) { MessagePage(this.fromPage) {
_messageModel = new MessageModel(1, 10); _messageModel = new MessageModel(1, 10);
} }
@override @override
_MessagePageState createState() => _MessagePageState(_messageModel); _MessagePageState createState() => _MessagePageState(_messageModel);
} }
...@@ -26,18 +29,24 @@ class _MessagePageState extends BasePage<MessagePage> { ...@@ -26,18 +29,24 @@ class _MessagePageState extends BasePage<MessagePage> {
MessageModel _messageModel; MessageModel _messageModel;
static int pageCount = 10; static int pageCount = 10;
static int pageNo = 2; static int pageNo = 2;
RefreshController _refreshController = RefreshController(initialRefresh: false); RefreshController _refreshController =
RefreshController(initialRefresh: false);
_MessagePageState(this._messageModel); _MessagePageState(this._messageModel);
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_messageModel.init(context); _messageModel.init(context);
GlobalEventBus().event.on<LoginEvent>().listen((event) {
print("flutter EVENT BUS LoginEvent ${event}");
_messageModel.init(context);
});
} }
void _onLoading() async { void _onLoading(BuildContext context) async {
await _messageModel.getMyMessage(pageNo, pageCount, (data) { await _messageModel.getMyMessage(context, pageNo, pageCount, (data) {
if(data.data?.length == 0) { if (data.data?.length == 0) {
_refreshController.loadNoData(); _refreshController.loadNoData();
} else { } else {
pageNo++; pageNo++;
...@@ -57,163 +66,165 @@ class _MessagePageState extends BasePage<MessagePage> { ...@@ -57,163 +66,165 @@ class _MessagePageState extends BasePage<MessagePage> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context);
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
centerTitle: false, centerTitle: false,
title: messageTitle('消息'), title: messageTitle('消息'),
elevation: 0, elevation: 0,
backgroundColor: ALColors.ColorFFFFFF, backgroundColor: ALColors.ColorFFFFFF,
),
body: SmartRefresher(
enablePullDown: false,
enablePullUp: true,
footer: CustomFooter(
builder: (BuildContext context, LoadStatus mode){
String body;
var loadingTS = TextStyle(color: ALColors.Color999999, fontSize: ScreenUtil().setSp(16));
if(mode == LoadStatus.idle) {
body = '上拉加载';
} else if(mode == LoadStatus.loading || mode == LoadStatus.canLoading) {
body = '加载中...';
} else if(mode == LoadStatus.failed) {
body = '加载失败!点击重试!';
} else {
body = '暂时无更多数据';
}
var loadingIndicator = Visibility(
visible: (mode == LoadStatus.loading || mode == LoadStatus.canLoading) ? true : false,
child: SizedBox(
child: CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation(ALColors.Color999999),
strokeWidth: 2
),
width: ScreenUtil.instance.setWidth(16),
height: ScreenUtil.instance.setHeight(16)
)
);
return _pad(
Row(
children: <Widget>[loadingIndicator, _pad(Text(body, style: loadingTS), l: ScreenUtil.instance.setWidth(10))],
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
),
t: 20.0,
b: 20.0
);
},
), ),
controller: _refreshController, body: SmartRefresher(
onLoading: _onLoading, enablePullDown: false,
child: Container( enablePullUp: true,
color: ALColors.ColorFFFFFF, footer: CustomFooter(
child: SingleChildScrollView( builder: (BuildContext context, LoadStatus mode) {
child: Column( String body;
children: <Widget>[ var loadingTS = TextStyle(
topCard(), color: ALColors.Color999999,
getListView() fontSize: ScreenUtil().setSp(16));
] if (mode == LoadStatus.idle) {
) body = '上拉加载';
) } else if (mode == LoadStatus.loading ||
) mode == LoadStatus.canLoading) {
) body = '加载中...';
); } else if (mode == LoadStatus.failed) {
body = '加载失败!点击重试!';
} else {
body = '暂时无更多数据';
}
var loadingIndicator = Visibility(
visible: (mode == LoadStatus.loading ||
mode == LoadStatus.canLoading)
? true
: false,
child: SizedBox(
child: CircularProgressIndicator(
valueColor:
AlwaysStoppedAnimation(ALColors.Color999999),
strokeWidth: 2),
width: ScreenUtil().setWidth(16),
height: ScreenUtil().setHeight(16)));
return _pad(
Row(
children: <Widget>[
loadingIndicator,
_pad(Text(body, style: loadingTS),
l: ScreenUtil().setWidth(10))
],
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
),
t: 20.0,
b: 20.0);
},
),
controller: _refreshController,
onLoading: () => _onLoading(context),
child: Container(
color: ALColors.ColorFFFFFF,
child: SingleChildScrollView(
child: Column(
children: <Widget>[topCard(), getListView()])))));
} }
Widget getListView() { Widget getListView() {
return StreamBuilder<MyMessageEntity>( return StreamBuilder<MyMessageEntity>(
stream: _messageModel.myMessageLive.stream, stream: _messageModel.myMessageLive.stream,
initialData: _messageModel.myMessageLive.data, initialData: _messageModel.myMessageLive.data,
builder: (BuildContext context, data) { builder: (BuildContext context, data) {
var dataList = data?.data?.data; var dataList = data?.data?.data;
if(dataList == null) { if (dataList == null) {
return noData(); return noData();
} }
return ListView.builder( return ListView.builder(
shrinkWrap: true, shrinkWrap: true,
physics: NeverScrollableScrollPhysics(), physics: NeverScrollableScrollPhysics(),
itemBuilder: (c, i) => messageList(dataList[i]), itemBuilder: (c, i) => messageList(dataList[i]),
itemCount: dataList.length, itemCount: dataList.length,
); );
} });
);
} }
Widget noData() { Widget noData() {
return Container(); return Container();
} }
Widget topCard(){ Widget topCard() {
return Container( return Container(
color: ALColors.ColorFFFFFF, color: ALColors.ColorFFFFFF,
child: Column( child: Column(
children: <Widget>[ children: <Widget>[
StreamBuilder<LatestMessageEntity>( StreamBuilder<LatestMessageEntity>(
stream: _messageModel.latestMessageLive.stream, stream: _messageModel.latestMessageLive.stream,
initialData: _messageModel.latestMessageLive.data , initialData: _messageModel.latestMessageLive.data,
builder: (BuildContext context, data){ builder: (BuildContext context, data) {
if(data?.data == null) { if (data?.data == null) {
return noData(); return noData();
} }
var content = data.data?.data?.content ?? '没有新的通知'; var content = data.data?.data?.content ?? '没有新的通知';
return GestureDetector( return GestureDetector(
onTap: (){ onTap: () {
super.pageStop(); super.pageStop();
onClickButton('notice'); onClickButton('notice');
jumpToAttentionPage(context).then((value){}).whenComplete((){ jumpToAttentionPage(context)
startTime = DateTime.now().millisecondsSinceEpoch; .then((value) {})
}); .whenComplete(() {
}, startTime = DateTime.now().millisecondsSinceEpoch;
child: messageTop('images/icon_notice.svg', '通知', content == '' ? '没有新的通知' : content, 0) });
); },
child: messageTop('images/icon_notice.svg', '通知',
content == '' ? '没有新的通知' : content, 0));
}, },
), ),
StreamBuilder<UnreadMessageEntity>( StreamBuilder<UnreadMessageEntity>(
stream: _messageModel.likeUnreadMessageLive.stream, stream: _messageModel.likeUnreadMessageLive.stream,
initialData: _messageModel.likeUnreadMessageLive.data , initialData: _messageModel.likeUnreadMessageLive.data,
builder: (BuildContext context, data){ builder: (BuildContext context, data) {
if(data?.data == null) { if (data?.data == null) {
return noData(); return noData();
} }
var voteCount = data.data?.data?.voteCount ?? 0; var voteCount = data.data?.data?.voteCount ?? 0;
return GestureDetector( return GestureDetector(
onTap: (){ onTap: () {
onClickButton('like'); onClickButton('like');
jumpToLikePage(context); jumpToLikePage(context);
}, },
child: messageTop('images/icon_like.svg', 'Like!', voteCount == 0 ? '还没有人给你Like!哦~' : '有$voteCount个人Like!了你', voteCount) child: messageTop(
); 'images/icon_like.svg',
'Like!',
voteCount == 0 ? '还没有人给你Like!哦~' : '有$voteCount个人Like!了你',
voteCount));
}, },
), ),
StreamBuilder<UnreadMessageEntity>( StreamBuilder<UnreadMessageEntity>(
stream: _messageModel.followUnreadMessageLive.stream, stream: _messageModel.followUnreadMessageLive.stream,
initialData: _messageModel.followUnreadMessageLive.data , initialData: _messageModel.followUnreadMessageLive.data,
builder: (BuildContext context, data){ builder: (BuildContext context, data) {
if(data?.data == null) { if (data?.data == null) {
return noData(); return noData();
} }
var count = data.data?.data?.count ?? 0; var count = data.data?.data?.count ?? 0;
return GestureDetector( return GestureDetector(
onTap: (){ onTap: () {
onClickButton('attention'); onClickButton('attention');
jumpToFocusPage(context); jumpToFocusPage(context);
}, },
child: messageTop('images/icon_follow.svg', '关注', count == 0 ? '还没有人给你关注哦~' : '有$count个人关注了你', count) child: messageTop('images/icon_follow.svg', '关注',
); count == 0 ? '还没有人给你关注哦~' : '有$count个人关注了你', count));
}, },
), ),
Container( Container(
margin: EdgeInsets.only(left: ScreenUtil.instance.setWidth(16), right: ScreenUtil.instance.setWidth(16), bottom: ScreenUtil().setHeight(24)), margin: EdgeInsets.only(
height: ScreenUtil.instance.setHeight(12), left: ScreenUtil.instance.setWidth(16),
decoration: BoxDecoration( right: ScreenUtil.instance.setWidth(16),
color: ALColors.ColorFFFFFF, bottom: ScreenUtil().setHeight(24)),
border: Border( height: ScreenUtil.instance.setHeight(12),
bottom: BorderSide( decoration: BoxDecoration(
color: Color(0xfffE4E4E4), color: ALColors.ColorFFFFFF,
width: ScreenUtil.instance.setWidth(1), border: Border(
style: BorderStyle.solid bottom: BorderSide(
) color: Color(0xfffE4E4E4),
) width: ScreenUtil.instance.setWidth(1),
) style: BorderStyle.solid))))
)
], ],
), ),
); );
...@@ -223,6 +234,7 @@ class _MessagePageState extends BasePage<MessagePage> { ...@@ -223,6 +234,7 @@ class _MessagePageState extends BasePage<MessagePage> {
void dispose() { void dispose() {
super.dispose(); super.dispose();
_refreshController.dispose(); _refreshController.dispose();
GlobalEventBus().event.destroy();
pageNo = 2; pageNo = 2;
} }
...@@ -235,5 +247,4 @@ class _MessagePageState extends BasePage<MessagePage> { ...@@ -235,5 +247,4 @@ class _MessagePageState extends BasePage<MessagePage> {
String referrer() { String referrer() {
return widget.fromPage; return widget.fromPage;
} }
}
}
\ No newline at end of file
...@@ -7,7 +7,10 @@ import 'dart:async'; ...@@ -7,7 +7,10 @@ import 'dart:async';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:gmalpha_flutter/Annotations/RouterCenterRestore.mark.dart';
import 'package:gmalpha_flutter/commonModel/cache/CacheManager.dart'; import 'package:gmalpha_flutter/commonModel/cache/CacheManager.dart';
import 'package:gmalpha_flutter/commonModel/eventbus/GlobalEventBus.dart';
import 'package:gmalpha_flutter/commonModel/eventbus/event/LoginEvent.dart';
import 'package:gmalpha_flutter/commonModel/net/Api.dart'; import 'package:gmalpha_flutter/commonModel/net/Api.dart';
import 'package:gmalpha_flutter/commonModel/net/DioUtil.dart'; import 'package:gmalpha_flutter/commonModel/net/DioUtil.dart';
import 'package:rxdart/rxdart.dart'; import 'package:rxdart/rxdart.dart';
...@@ -17,7 +20,9 @@ const NET_TYPE = "GET_NET_TYPE"; ...@@ -17,7 +20,9 @@ const NET_TYPE = "GET_NET_TYPE";
const INIT_PARAMS = "INIT_PARAMS"; const INIT_PARAMS = "INIT_PARAMS";
const UPLOAD_IMG = "UPLOAD_IMG"; const UPLOAD_IMG = "UPLOAD_IMG";
const USER_LOGOUT = "USER_LOGOUT"; const USER_LOGOUT = "USER_LOGOUT";
const platform = const MethodChannel('flutter_bury_channel'); const platform = const MethodChannel('flutter_channel');
const eventChannel = const EventChannel('flutter_channel_event');
StreamSubscription _listen;
void jumpToH5(String jumpToName, Map params) { void jumpToH5(String jumpToName, Map params) {
Map map = {"page_name": jumpToName}; Map map = {"page_name": jumpToName};
...@@ -66,6 +71,8 @@ Observable<bool> userLogout() { ...@@ -66,6 +71,8 @@ Observable<bool> userLogout() {
} }
void initParams(VoidCallback callback) { void initParams(VoidCallback callback) {
_listen =
eventChannel.receiveBroadcastStream().listen(_onEvent, onError: _onError);
platform.invokeMethod(INIT_PARAMS, null).then((value) { platform.invokeMethod(INIT_PARAMS, null).then((value) {
print("lsy INITPARAMS !! $value"); print("lsy INITPARAMS !! $value");
Api.getInstance().initBuildConfig(value); Api.getInstance().initBuildConfig(value);
...@@ -75,6 +82,27 @@ void initParams(VoidCallback callback) { ...@@ -75,6 +82,27 @@ void initParams(VoidCallback callback) {
}); });
} }
void _onEvent(Object event) {
print("ONEVENT !!!! ${event}");
if (event == null) {
return;
}
String cookie = (event as Map)["Cookie"];
if (cookie != null) {
Api.getInstance().setDioCookie(event);
}
String userID = (event as Map)["userId"];
if (userID != null) {
RouterCenterImpl().findUserRouter().loginChangeUserID(userID);
}
GlobalEventBus().event.fire(LoginEvent(userID, cookie));
}
void _onError(Object error) {
print("ERROR $error");
}
void initBuried(VoidCallback call) { void initBuried(VoidCallback call) {
getBuriedInfo().then((value) { getBuriedInfo().then((value) {
Map temp = new Map<String, dynamic>.from(value); Map temp = new Map<String, dynamic>.from(value);
......
/*
* @author lsy
* @date 2019-10-24
**/
import 'package:event_bus/event_bus.dart';
class GlobalEventBus{
EventBus event;
factory GlobalEventBus() => _getInstance();
static GlobalEventBus get instance => _getInstance();
static GlobalEventBus _instance;
GlobalEventBus._internal() {
// 创建对象
event = EventBus();
}
static GlobalEventBus _getInstance() {
if (_instance == null) {
_instance = GlobalEventBus._internal();
}
return _instance;
}
}
\ No newline at end of file
/*
* @author lsy
* @date 2019-10-24
**/
class LoginEvent {
final String userID;
final String cookie;
LoginEvent(this.userID, this.cookie);
}
...@@ -58,8 +58,9 @@ class Api { ...@@ -58,8 +58,9 @@ class Api {
print("baseUrl --> $baseUrl"); print("baseUrl --> $baseUrl");
DioUtil().setConfig(HttpConfig( DioUtil().setConfig(HttpConfig(
options: BaseOptions( options: BaseOptions(
baseUrl: baseUrl, baseUrl: baseUrl,
))); ),
nativeCookie: {"Cookie": params["Cookie"]}));
return true; return true;
} }
......
...@@ -391,7 +391,7 @@ class DioUtil { ...@@ -391,7 +391,7 @@ class DioUtil {
options.connectTimeout = 10 * 1000; options.connectTimeout = 10 * 1000;
options.receiveTimeout = 20 * 1000; options.receiveTimeout = 20 * 1000;
// options.contentType = ContentType.parse('application/x-www-form-urlencoded'); // options.contentType = ContentType.parse('application/x-www-form-urlencoded');
options.contentType = ContentType.json; // options.contentType = ContentType.json;
options.responseType = ResponseType.plain; options.responseType = ResponseType.plain;
options.baseUrl = APP_HOST_DEBUG + "/"; options.baseUrl = APP_HOST_DEBUG + "/";
Map<String, dynamic> headers = Map<String, dynamic>(); Map<String, dynamic> headers = Map<String, dynamic>();
......
...@@ -15,7 +15,18 @@ import 'package:gmalpha_flutter/messageModel/home/message_home.dart'; ...@@ -15,7 +15,18 @@ import 'package:gmalpha_flutter/messageModel/home/message_home.dart';
import 'commonModel/GMBase.dart'; import 'commonModel/GMBase.dart';
void main() { void main() {
initParams(() => runApp(MyApp())); initParams(() {
runZoned(() {
runApp(MyApp());
}, onError: (Object obj, StackTrace stack) {
var details = makeDetails(obj, stack);
reportError(details);
});
});
}
void reportError(FlutterErrorDetails details) {
print("flutter error ==> $details");
} }
class MyApp extends StatefulWidget { class MyApp extends StatefulWidget {
...@@ -34,20 +45,20 @@ class _MyAppState extends State<MyApp> { ...@@ -34,20 +45,20 @@ class _MyAppState extends State<MyApp> {
super.initState(); super.initState();
FlutterBoost.singleton.registerPageBuilders({ FlutterBoost.singleton.registerPageBuilders({
'comment_suggest': (pageName, params, _) { 'comment_suggest': (pageName, params, _) {
if (!Api.getInstance().setDioCookie(params) || // if (!Api.getInstance().setDioCookie(params) ||
params["fromPage"] == null) { // params["fromPage"] == null) {
return ErrorPage("出错:需要传递的参数为空"); // return ErrorPage("出错:需要传递的参数为空");
} // }
return RouterCenterImpl() return RouterCenterImpl()
.findUserRouter() .findUserRouter()
?.getCommentPage(params["fromPage"]); ?.getCommentPage(params["fromPage"]);
}, },
'message_home': (pageName, params, _) { 'message_home': (pageName, params, _) {
print("PARAMS!! ${params}"); print("PARAMS!! ${params}");
if (!Api.getInstance().setDioCookie(params) || // if (!Api.getInstance().setDioCookie(params) ||
params["fromPage"] == null) { // params["fromPage"] == null) {
return ErrorPage("出错:需要传递的参数为空"); // return ErrorPage("出错:需要传递的参数为空");
} // }
return RouterCenterImpl() return RouterCenterImpl()
.findNewMessageRouter() .findNewMessageRouter()
?.getMessagePage(params["fromPage"]); ?.getMessagePage(params["fromPage"]);
...@@ -69,64 +80,64 @@ class _MyAppState extends State<MyApp> { ...@@ -69,64 +80,64 @@ class _MyAppState extends State<MyApp> {
}, },
"prestige": (pageName, params, _) { "prestige": (pageName, params, _) {
print("PARAMS!! ${params}"); print("PARAMS!! ${params}");
if (!Api.getInstance().setDioCookie(params) || // if (!Api.getInstance().setDioCookie(params) ||
params["fromPage"] == null) { // params["fromPage"] == null) {
return ErrorPage("出错:需要传递的参数为空"); // return ErrorPage("出错:需要传递的参数为空");
} // }
int userId = int.parse(params["userId"]); int userId = int.parse(params["userId"]);
return RouterCenterImpl().findPrestigeRouter()?.getReputationsPage( return RouterCenterImpl().findPrestigeRouter()?.getReputationsPage(
userId, params["userName"], params["fromPage"]); userId, params["userName"], params["fromPage"]);
}, },
"user_setting": (pageName, params, _) { "user_setting": (pageName, params, _) {
print("PARAMS!! ${params}"); print("PARAMS!! ${params}");
if (!Api.getInstance().setDioCookie(params) || // if (!Api.getInstance().setDioCookie(params) ||
params["fromPage"] == null) { // params["fromPage"] == null) {
return ErrorPage("出错:需要传递的参数为空"); // return ErrorPage("出错:需要传递的参数为空");
} // }
return RouterCenterImpl() return RouterCenterImpl()
.findUserRouter() .findUserRouter()
?.getUserSettingPage(params["userId"] ?? "", params["fromPage"]); ?.getUserSettingPage(params["userId"] ?? "", params["fromPage"]);
}, },
"activity_report": (pageName, params, _) { "activity_report": (pageName, params, _) {
print("PARAMS!! ${params}"); print("PARAMS!! ${params}");
if (!Api.getInstance().setDioCookie(params) || // if (!Api.getInstance().setDioCookie(params) ||
params["fromPage"] == null) { // params["fromPage"] == null) {
return ErrorPage("出错:需要传递的参数为空"); // return ErrorPage("出错:需要传递的参数为空");
} // }
return RouterCenterImpl() return RouterCenterImpl()
.findActivityReportRouter() .findActivityReportRouter()
?.getActivityReportPage( ?.getActivityReportPage(
params["survey_record_id"] == null params["survey_record_id"] == null
? null ? null
: int.parse(params["survey_record_id"]), : int.parse(params["survey_record_id"]),
params["template_id"] == null params["template_id"] == null
? null ? null
: int.parse(params["template_id"]), : int.parse(params["template_id"]),
params["fromPage"]); params["fromPage"]);
}, },
"message_focus": (pageName, params, _) { "message_focus": (pageName, params, _) {
if (!Api.getInstance().setDioCookie(params) || // if (!Api.getInstance().setDioCookie(params) ||
params["fromPage"] == null) { // params["fromPage"] == null) {
return ErrorPage("出错:需要传递的参数为空"); // return ErrorPage("出错:需要传递的参数为空");
} // }
return RouterCenterImpl() return RouterCenterImpl()
.findNewMessageRouter() .findNewMessageRouter()
?.getFocusPage(params["fromPage"]); ?.getFocusPage(params["fromPage"]);
}, },
"message_attention": (pageName, params, _) { "message_attention": (pageName, params, _) {
if (!Api.getInstance().setDioCookie(params) || // if (!Api.getInstance().setDioCookie(params) ||
params["fromPage"] == null) { // params["fromPage"] == null) {
return ErrorPage("出错:需要传递的参数为空"); // return ErrorPage("出错:需要传递的参数为空");
} // }
return RouterCenterImpl() return RouterCenterImpl()
.findNewMessageRouter() .findNewMessageRouter()
?.getAttentionPage(params["fromPage"]); ?.getAttentionPage(params["fromPage"]);
}, },
"message_like": (pageName, params, _) { "message_like": (pageName, params, _) {
if (!Api.getInstance().setDioCookie(params) || // if (!Api.getInstance().setDioCookie(params) ||
params["fromPage"] == null) { // params["fromPage"] == null) {
return ErrorPage("出错:需要传递的参数为空"); // return ErrorPage("出错:需要传递的参数为空");
} // }
return RouterCenterImpl() return RouterCenterImpl()
.findNewMessageRouter() .findNewMessageRouter()
?.getLikePage(params["fromPage"]); ?.getLikePage(params["fromPage"]);
...@@ -145,7 +156,7 @@ class _MyAppState extends State<MyApp> { ...@@ -145,7 +156,7 @@ class _MyAppState extends State<MyApp> {
// return TestPage(); // return TestPage();
// }, // },
// }, // },
builder: buildOnce, builder: FlutterBoost.init(),
theme: new ThemeData( theme: new ThemeData(
primaryColor: Colors.white, primaryColor: Colors.white,
backgroundColor: Color(0xFFEFEFEF), backgroundColor: Color(0xFFEFEFEF),
......
...@@ -15,4 +15,6 @@ abstract class UserRouter implements RouterBaser { ...@@ -15,4 +15,6 @@ abstract class UserRouter implements RouterBaser {
Widget getUserSettingPage(String userID, String refer); Widget getUserSettingPage(String userID, String refer);
Widget getCommentPage(String refer); Widget getCommentPage(String refer);
void loginChangeUserID(String userId);
} }
...@@ -6,19 +6,28 @@ import 'package:flutter/src/widgets/framework.dart'; ...@@ -6,19 +6,28 @@ import 'package:flutter/src/widgets/framework.dart';
import 'package:gmalpha_flutter/userModel/UserRouter.dart'; import 'package:gmalpha_flutter/userModel/UserRouter.dart';
import 'package:gmalpha_flutter/userModel/page/comment/CommentSuggestPage.dart'; import 'package:gmalpha_flutter/userModel/page/comment/CommentSuggestPage.dart';
import 'package:gmalpha_flutter/userModel/page/userSetting/UserSettingPage.dart'; import 'package:gmalpha_flutter/userModel/page/userSetting/UserSettingPage.dart';
import 'package:gmalpha_flutter/userModel/service/remote/entity/UserEntity.user.dart';
class UserRouterImpl implements UserRouter { class UserRouterImpl implements UserRouter {
@override @override
Widget getUserPage() { Widget getUserPage() {}
}
@override @override
Widget getUserSettingPage(String userID, String refer) { Widget getUserSettingPage(String userID, String refer) {
return UserSettingPage(userID,refer); return UserSettingPage(userID, refer);
} }
@override @override
Widget getCommentPage(String refer) { Widget getCommentPage(String refer) {
return CommentSuggestPage(refer); return CommentSuggestPage(refer);
} }
@override
void loginChangeUserID(String userId) {
UserEntityImpl().getuserId().listen((value) {
if (value != userId) {
UserEntityImpl().saveuserId("");
}
});
}
} }
...@@ -162,7 +162,6 @@ class UserSettingModel extends BaseModel { ...@@ -162,7 +162,6 @@ class UserSettingModel extends BaseModel {
} }
void save(BuildContext context) { void save(BuildContext context) {
popLoadingDialog(context, true, "加载中");
if (selectImgPath != null) { if (selectImgPath != null) {
UserRepository.getInstance().getUploadToken(1).listen((data) { UserRepository.getInstance().getUploadToken(1).listen((data) {
uploadImage(context, data.data?.token); uploadImage(context, data.data?.token);
...@@ -200,7 +199,7 @@ class UserSettingModel extends BaseModel { ...@@ -200,7 +199,7 @@ class UserSettingModel extends BaseModel {
.settingUserInfo(countryId, name, head, userid, age) .settingUserInfo(countryId, name, head, userid, age)
.listen((data) { .listen((data) {
if (data != null) { if (data != null) {
dismissLoadingDialog(context); Navigator.pop(context);
UserEntityImpl().saveage(data?.data?.age); UserEntityImpl().saveage(data?.data?.age);
UserEntityImpl().saveprofilePic(head); UserEntityImpl().saveprofilePic(head);
UserEntityImpl().savenickName(name); UserEntityImpl().savenickName(name);
......
...@@ -59,7 +59,6 @@ class UserState extends BasePage<UserSettingPage> { ...@@ -59,7 +59,6 @@ class UserState extends BasePage<UserSettingPage> {
}, () { }, () {
logoutPicker.dismiss(context); logoutPicker.dismiss(context);
}); });
logoutPicker.setPicker(userLogoutPicker);
} }
@override @override
...@@ -94,6 +93,8 @@ class UserState extends BasePage<UserSettingPage> { ...@@ -94,6 +93,8 @@ class UserState extends BasePage<UserSettingPage> {
} else { } else {
return GestureDetector( return GestureDetector(
onTap: () { onTap: () {
logoutPicker.setPicker(baseLoadingItem);
logoutPicker.show(context);
_model.save(context); _model.save(context);
}, },
child: Padding( child: Padding(
...@@ -244,6 +245,7 @@ class UserState extends BasePage<UserSettingPage> { ...@@ -244,6 +245,7 @@ class UserState extends BasePage<UserSettingPage> {
right: ScreenUtil.instance.setWidth(30)), right: ScreenUtil.instance.setWidth(30)),
child: OutlineButton( child: OutlineButton(
onPressed: () { onPressed: () {
logoutPicker.setPicker(userLogoutPicker);
logoutPicker.show(context); logoutPicker.show(context);
}, },
child: baseText("退出登入", 14, ALColors.Color323232), child: baseText("退出登入", 14, ALColors.Color323232),
......
...@@ -24,10 +24,11 @@ dependencies: ...@@ -24,10 +24,11 @@ dependencies:
flutter: flutter:
sdk: flutter sdk: flutter
cupertino_icons: ^0.1.2 cupertino_icons: ^0.1.2
dio: ^2.1.0 dio: ^2.2.2
rxdart: ^0.22.0 #链式编程 rxdart: ^0.22.0 #链式编程
pull_to_refresh: ^1.5.0 pull_to_refresh: ^1.5.0
flutter_boost: ^0.0.420 flutter_boost: ^0.0.420
event_bus: ^1.1.0
# gengmei_flutter_plugin: ^0.0.731 # gengmei_flutter_plugin: ^0.0.731
# flutter_boost: # flutter_boost:
# git: # git:
...@@ -38,7 +39,7 @@ dependencies: ...@@ -38,7 +39,7 @@ dependencies:
gengmei_flutter_plugin: gengmei_flutter_plugin:
git: git:
url: 'git@git.wanmeizhensuo.com:linshengyu/flutter_plugin.git' url: 'git@git.wanmeizhensuo.com:linshengyu/flutter_plugin.git'
ref: "31f0e00d6a02ebbfa022be8770e397f36bcb10ce" ref: "703b4906beabe5fa9ba4e5e76a5b43799a25f89b"
protobuf: ^0.14.4 protobuf: ^0.14.4
grpc: ^2.1.2 grpc: ^2.1.2
flutter_svg: ^0.14.1 flutter_svg: ^0.14.1
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment